diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index 58e564a..5ebeeb7 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -580,6 +580,9 @@
   if (builtin->IsTexture()) {
     return EmitTextureCall(out, call, builtin);
   }
+  if (builtin->Type() == sem::BuiltinType::kCountOneBits) {
+    return EmitCountOneBitsCall(out, expr);
+  }
   if (builtin->Type() == sem::BuiltinType::kSelect) {
     return EmitSelectCall(out, expr);
   }
@@ -859,6 +862,23 @@
   return true;
 }
 
+bool GeneratorImpl::EmitCountOneBitsCall(std::ostream& out,
+                                         const ast::CallExpression* expr) {
+  // GLSL's bitCount returns an integer type, so cast it to the appropriate
+  // unsigned type.
+  if (!EmitType(out, TypeOf(expr)->UnwrapRef(), ast::StorageClass::kNone,
+                ast::Access::kReadWrite, "")) {
+    return false;
+  }
+  out << "(bitCount(";
+
+  if (!EmitExpression(out, expr->args[0])) {
+    return false;
+  }
+  out << "))";
+  return true;
+}
+
 bool GeneratorImpl::EmitSelectCall(std::ostream& out,
                                    const ast::CallExpression* expr) {
   auto* expr_false = expr->args[0];
@@ -1589,7 +1609,7 @@
     case sem::BuiltinType::kAtan2:
       return "atan";
     case sem::BuiltinType::kCountOneBits:
-      return "countbits";
+      return "bitCount";
     case sem::BuiltinType::kDpdx:
       return "ddx";
     case sem::BuiltinType::kDpdxCoarse:
diff --git a/src/tint/writer/glsl/generator_impl.h b/src/tint/writer/glsl/generator_impl.h
index 5fa94f9..8bfebbc 100644
--- a/src/tint/writer/glsl/generator_impl.h
+++ b/src/tint/writer/glsl/generator_impl.h
@@ -194,6 +194,11 @@
   /// @param out the output of the expression stream
   /// @param expr the call expression
   /// @returns true if the call expression is emitted
+  bool EmitCountOneBitsCall(std::ostream& out, const ast::CallExpression* expr);
+  /// Handles generating a call to the `countOneBits()` builtin
+  /// @param out the output of the expression stream
+  /// @param expr the call expression
+  /// @returns true if the call expression is emitted
   bool EmitSelectCall(std::ostream& out, const ast::CallExpression* expr);
   /// Handles generating a call to the `dot()` builtin
   /// @param out the output of the expression stream
diff --git a/src/tint/writer/glsl/generator_impl_builtin_test.cc b/src/tint/writer/glsl/generator_impl_builtin_test.cc
index 5f6d04c..2de2f85 100644
--- a/src/tint/writer/glsl/generator_impl_builtin_test.cc
+++ b/src/tint/writer/glsl/generator_impl_builtin_test.cc
@@ -198,7 +198,7 @@
         BuiltinData{BuiltinType::kClamp, ParamType::kU32, "clamp"},
         BuiltinData{BuiltinType::kCos, ParamType::kF32, "cos"},
         BuiltinData{BuiltinType::kCosh, ParamType::kF32, "cosh"},
-        BuiltinData{BuiltinType::kCountOneBits, ParamType::kU32, "countbits"},
+        BuiltinData{BuiltinType::kCountOneBits, ParamType::kU32, "bitCount"},
         BuiltinData{BuiltinType::kCross, ParamType::kF32, "cross"},
         BuiltinData{BuiltinType::kDeterminant, ParamType::kF32, "determinant"},
         BuiltinData{BuiltinType::kDistance, ParamType::kF32, "distance"},
diff --git a/test/tint/builtins/gen/countOneBits/0d0e46.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/0d0e46.wgsl.expected.glsl
index bf9a227..11f62b4 100644
--- a/test/tint/builtins/gen/countOneBits/0d0e46.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/0d0e46.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_0d0e46() {
-  uvec4 res = countbits(uvec4(0u, 0u, 0u, 0u));
+  uvec4 res = uvec4(bitCount(uvec4(0u, 0u, 0u, 0u)));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_0d0e46() {
-  uvec4 res = countbits(uvec4(0u, 0u, 0u, 0u));
+  uvec4 res = uvec4(bitCount(uvec4(0u, 0u, 0u, 0u)));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_0d0e46() {
-  uvec4 res = countbits(uvec4(0u, 0u, 0u, 0u));
+  uvec4 res = uvec4(bitCount(uvec4(0u, 0u, 0u, 0u)));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/countOneBits/0f7980.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/0f7980.wgsl.expected.glsl
index d4e690c..2dafae1 100644
--- a/test/tint/builtins/gen/countOneBits/0f7980.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/0f7980.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_0f7980() {
-  ivec4 res = countbits(ivec4(0, 0, 0, 0));
+  ivec4 res = ivec4(bitCount(ivec4(0, 0, 0, 0)));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_0f7980() {
-  ivec4 res = countbits(ivec4(0, 0, 0, 0));
+  ivec4 res = ivec4(bitCount(ivec4(0, 0, 0, 0)));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_0f7980() {
-  ivec4 res = countbits(ivec4(0, 0, 0, 0));
+  ivec4 res = ivec4(bitCount(ivec4(0, 0, 0, 0)));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/countOneBits/65d2ae.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/65d2ae.wgsl.expected.glsl
index 2f4d946..abdbb04 100644
--- a/test/tint/builtins/gen/countOneBits/65d2ae.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/65d2ae.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_65d2ae() {
-  ivec3 res = countbits(ivec3(0, 0, 0));
+  ivec3 res = ivec3(bitCount(ivec3(0, 0, 0)));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_65d2ae() {
-  ivec3 res = countbits(ivec3(0, 0, 0));
+  ivec3 res = ivec3(bitCount(ivec3(0, 0, 0)));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_65d2ae() {
-  ivec3 res = countbits(ivec3(0, 0, 0));
+  ivec3 res = ivec3(bitCount(ivec3(0, 0, 0)));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/countOneBits/690cfc.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/690cfc.wgsl.expected.glsl
index 80fbd03..95e26f1 100644
--- a/test/tint/builtins/gen/countOneBits/690cfc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/690cfc.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_690cfc() {
-  uvec3 res = countbits(uvec3(0u, 0u, 0u));
+  uvec3 res = uvec3(bitCount(uvec3(0u, 0u, 0u)));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_690cfc() {
-  uvec3 res = countbits(uvec3(0u, 0u, 0u));
+  uvec3 res = uvec3(bitCount(uvec3(0u, 0u, 0u)));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of uint'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_690cfc() {
-  uvec3 res = countbits(uvec3(0u, 0u, 0u));
+  uvec3 res = uvec3(bitCount(uvec3(0u, 0u, 0u)));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/countOneBits/94fd81.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/94fd81.wgsl.expected.glsl
index f4d3c55..214e0d9 100644
--- a/test/tint/builtins/gen/countOneBits/94fd81.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/94fd81.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_94fd81() {
-  uvec2 res = countbits(uvec2(0u, 0u));
+  uvec2 res = uvec2(bitCount(uvec2(0u, 0u)));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_94fd81() {
-  uvec2 res = countbits(uvec2(0u, 0u));
+  uvec2 res = uvec2(bitCount(uvec2(0u, 0u)));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of uint'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_94fd81() {
-  uvec2 res = countbits(uvec2(0u, 0u));
+  uvec2 res = uvec2(bitCount(uvec2(0u, 0u)));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/countOneBits/ae44f9.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/ae44f9.wgsl.expected.glsl
index 6d26ecd..cf72302 100644
--- a/test/tint/builtins/gen/countOneBits/ae44f9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/ae44f9.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_ae44f9() {
-  uint res = countbits(1u);
+  uint res = uint(bitCount(1u));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_ae44f9() {
-  uint res = countbits(1u);
+  uint res = uint(bitCount(1u));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_ae44f9() {
-  uint res = countbits(1u);
+  uint res = uint(bitCount(1u));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp uint'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/countOneBits/af90e2.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/af90e2.wgsl.expected.glsl
index 13673ed..2e87592 100644
--- a/test/tint/builtins/gen/countOneBits/af90e2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/af90e2.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_af90e2() {
-  ivec2 res = countbits(ivec2(0, 0));
+  ivec2 res = ivec2(bitCount(ivec2(0, 0)));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_af90e2() {
-  ivec2 res = countbits(ivec2(0, 0));
+  ivec2 res = ivec2(bitCount(ivec2(0, 0)));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_af90e2() {
-  ivec2 res = countbits(ivec2(0, 0));
+  ivec2 res = ivec2(bitCount(ivec2(0, 0)));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/countOneBits/fd88b2.wgsl.expected.glsl b/test/tint/builtins/gen/countOneBits/fd88b2.wgsl.expected.glsl
index 22f32fc..bf825f0 100644
--- a/test/tint/builtins/gen/countOneBits/fd88b2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/countOneBits/fd88b2.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void countOneBits_fd88b2() {
-  int res = countbits(1);
+  int res = int(bitCount(1));
 }
 
 vec4 vertex_main() {
@@ -18,19 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
 void countOneBits_fd88b2() {
-  int res = countbits(1);
+  int res = int(bitCount(1));
 }
 
 void fragment_main() {
@@ -41,18 +31,10 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'countbits' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 void countOneBits_fd88b2() {
-  int res = countbits(1);
+  int res = int(bitCount(1));
 }
 
 void compute_main() {
@@ -64,11 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: 'countbits' : no matching overloaded function found 
-ERROR: 0:4: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl
index 90d4fcd..a2b0da4 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  ivec2 x_1 = countbits(v2i1);
+  ivec2 x_1 = ivec2(bitCount(v2i1));
   return;
 }
 
@@ -20,11 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl
index 0d0f715..8f0ef93 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  ivec2 x_1 = ivec2(countbits(v2u1));
+  ivec2 x_1 = ivec2(uvec2(bitCount(v2u1)));
   return;
 }
 
@@ -20,10 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl
index 14bc7ec..cef6916 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  int x_1 = countbits(i1);
+  int x_1 = int(bitCount(i1));
   return;
 }
 
@@ -20,11 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl
index 26c3149..3a7c14c 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  int x_1 = int(countbits(u1));
+  int x_1 = int(uint(bitCount(u1)));
   return;
 }
 
@@ -20,10 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl
index 001332f..53291e7 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  uvec2 x_1 = uvec2(countbits(v2i1));
+  uvec2 x_1 = uvec2(ivec2(bitCount(v2i1)));
   return;
 }
 
@@ -20,10 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl
index b53a816..a6bf792 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  uvec2 x_1 = countbits(v2u1);
+  uvec2 x_1 = uvec2(bitCount(v2u1));
   return;
 }
 
@@ -20,11 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl
index ed3e3e8..8c34a54 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  uint x_1 = uint(countbits(i1));
+  uint x_1 = uint(int(bitCount(i1)));
   return;
 }
 
@@ -20,10 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl
index bb09555..7cbf141 100644
--- a/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 void main_1() {
@@ -7,7 +5,7 @@
   int i1 = 30;
   uvec2 v2u1 = uvec2(10u, 20u);
   ivec2 v2i1 = ivec2(30, 40);
-  uint x_1 = countbits(u1);
+  uint x_1 = uint(bitCount(u1));
   return;
 }
 
@@ -20,11 +18,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:8: 'countbits' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp highp uint'
-ERROR: 0:8: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl
index 944bf9e..311b8a6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -39,7 +37,7 @@
   if ((x_65 > x_67)) {
     a = (a + 1);
   }
-  i = countbits(a);
+  i = int(bitCount(a));
   int x_75 = i;
   int x_77 = x_11.x_GLF_uniform_int_values[0].el;
   if ((x_75 < x_77)) {
@@ -85,11 +83,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:40: 'countbits' : no matching overloaded function found 
-ERROR: 0:40: 'assign' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:40: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl
index c64c3de..f834d90 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl:1:13 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
 type Arr = @stride(16) array<f32, 1>;
             ^^^^^^
@@ -47,7 +45,7 @@
   if ((x_65 > x_67)) {
     a = (a + 1);
   }
-  i = countbits(a);
+  i = int(bitCount(a));
   int x_75 = i;
   int x_77 = x_11.x_GLF_uniform_int_values[0].el;
   if ((x_75 < x_77)) {
@@ -93,11 +91,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:40: 'countbits' : no matching overloaded function found 
-ERROR: 0:40: 'assign' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:40: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
