Move IntrinsicType parsing to semantic/intrinsic.h

Keeps the enum / parse / print code all together.

Change-Id: I78e5e15b6a97d3aec619a94e4390ecc4a77ab478
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/43980
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 6a96d84..8ec5e25 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -844,6 +844,7 @@
     "src/intrinsic_table_test.cc",
     "src/program_builder_test.cc",
     "src/program_test.cc",
+    "src/semantic/sem_intrinsic_test.cc",
     "src/scope_stack_test.cc",
     "src/symbol_table_test.cc",
     "src/symbol_test.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 93ebd19..b18564c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -472,6 +472,7 @@
     inspector/inspector_test.cc
     intrinsic_table_test.cc
     program_test.cc
+    semantic/sem_intrinsic_test.cc
     scope_stack_test.cc
     symbol_table_test.cc
     symbol_test.cc
diff --git a/src/semantic/intrinsic.h b/src/semantic/intrinsic.h
index d8a313b..4bb0134 100644
--- a/src/semantic/intrinsic.h
+++ b/src/semantic/intrinsic.h
@@ -16,6 +16,7 @@
 #define SRC_SEMANTIC_INTRINSIC_H_
 
 #include <ostream>
+#include <string>
 
 #include "src/semantic/call_target.h"
 
@@ -109,6 +110,12 @@
   kUnpack2x16Float,
 };
 
+/// Matches the IntrisicType by name
+/// @param name the intrinsic name to parse
+/// @returns the parsed IntrinsicType, or IntrinsicType::kNone if `name` did not
+/// match any intrinsic.
+IntrinsicType ParseIntrinsicType(const std::string& name);
+
 /// @returns the name of the intrinsic function type. The spelling, including
 /// case, matches the name in the WGSL spec.
 const char* str(IntrinsicType i);
diff --git a/src/semantic/sem_intrinsic.cc b/src/semantic/sem_intrinsic.cc
index 990cc3c..e1e8bf7 100644
--- a/src/semantic/sem_intrinsic.cc
+++ b/src/semantic/sem_intrinsic.cc
@@ -28,6 +28,175 @@
   return semantic::str(type_);
 }
 
+IntrinsicType ParseIntrinsicType(const std::string& name) {
+  if (name == "abs") {
+    return IntrinsicType::kAbs;
+  } else if (name == "acos") {
+    return IntrinsicType::kAcos;
+  } else if (name == "all") {
+    return IntrinsicType::kAll;
+  } else if (name == "any") {
+    return IntrinsicType::kAny;
+  } else if (name == "arrayLength") {
+    return IntrinsicType::kArrayLength;
+  } else if (name == "asin") {
+    return IntrinsicType::kAsin;
+  } else if (name == "atan") {
+    return IntrinsicType::kAtan;
+  } else if (name == "atan2") {
+    return IntrinsicType::kAtan2;
+  } else if (name == "ceil") {
+    return IntrinsicType::kCeil;
+  } else if (name == "clamp") {
+    return IntrinsicType::kClamp;
+  } else if (name == "cos") {
+    return IntrinsicType::kCos;
+  } else if (name == "cosh") {
+    return IntrinsicType::kCosh;
+  } else if (name == "countOneBits") {
+    return IntrinsicType::kCountOneBits;
+  } else if (name == "cross") {
+    return IntrinsicType::kCross;
+  } else if (name == "determinant") {
+    return IntrinsicType::kDeterminant;
+  } else if (name == "distance") {
+    return IntrinsicType::kDistance;
+  } else if (name == "dot") {
+    return IntrinsicType::kDot;
+  } else if (name == "dpdx") {
+    return IntrinsicType::kDpdx;
+  } else if (name == "dpdxCoarse") {
+    return IntrinsicType::kDpdxCoarse;
+  } else if (name == "dpdxFine") {
+    return IntrinsicType::kDpdxFine;
+  } else if (name == "dpdy") {
+    return IntrinsicType::kDpdy;
+  } else if (name == "dpdyCoarse") {
+    return IntrinsicType::kDpdyCoarse;
+  } else if (name == "dpdyFine") {
+    return IntrinsicType::kDpdyFine;
+  } else if (name == "exp") {
+    return IntrinsicType::kExp;
+  } else if (name == "exp2") {
+    return IntrinsicType::kExp2;
+  } else if (name == "faceForward") {
+    return IntrinsicType::kFaceForward;
+  } else if (name == "floor") {
+    return IntrinsicType::kFloor;
+  } else if (name == "fma") {
+    return IntrinsicType::kFma;
+  } else if (name == "fract") {
+    return IntrinsicType::kFract;
+  } else if (name == "frexp") {
+    return IntrinsicType::kFrexp;
+  } else if (name == "fwidth") {
+    return IntrinsicType::kFwidth;
+  } else if (name == "fwidthCoarse") {
+    return IntrinsicType::kFwidthCoarse;
+  } else if (name == "fwidthFine") {
+    return IntrinsicType::kFwidthFine;
+  } else if (name == "inverseSqrt") {
+    return IntrinsicType::kInverseSqrt;
+  } else if (name == "isFinite") {
+    return IntrinsicType::kIsFinite;
+  } else if (name == "isInf") {
+    return IntrinsicType::kIsInf;
+  } else if (name == "isNan") {
+    return IntrinsicType::kIsNan;
+  } else if (name == "isNormal") {
+    return IntrinsicType::kIsNormal;
+  } else if (name == "ldexp") {
+    return IntrinsicType::kLdexp;
+  } else if (name == "length") {
+    return IntrinsicType::kLength;
+  } else if (name == "log") {
+    return IntrinsicType::kLog;
+  } else if (name == "log2") {
+    return IntrinsicType::kLog2;
+  } else if (name == "max") {
+    return IntrinsicType::kMax;
+  } else if (name == "min") {
+    return IntrinsicType::kMin;
+  } else if (name == "mix") {
+    return IntrinsicType::kMix;
+  } else if (name == "modf") {
+    return IntrinsicType::kModf;
+  } else if (name == "normalize") {
+    return IntrinsicType::kNormalize;
+  } else if (name == "pack4x8snorm") {
+    return IntrinsicType::kPack4x8Snorm;
+  } else if (name == "pack4x8unorm") {
+    return IntrinsicType::kPack4x8Unorm;
+  } else if (name == "pack2x16snorm") {
+    return IntrinsicType::kPack2x16Snorm;
+  } else if (name == "pack2x16unorm") {
+    return IntrinsicType::kPack2x16Unorm;
+  } else if (name == "pack2x16float") {
+    return IntrinsicType::kPack2x16Float;
+  } else if (name == "pow") {
+    return IntrinsicType::kPow;
+  } else if (name == "reflect") {
+    return IntrinsicType::kReflect;
+  } else if (name == "reverseBits") {
+    return IntrinsicType::kReverseBits;
+  } else if (name == "round") {
+    return IntrinsicType::kRound;
+  } else if (name == "select") {
+    return IntrinsicType::kSelect;
+  } else if (name == "sign") {
+    return IntrinsicType::kSign;
+  } else if (name == "sin") {
+    return IntrinsicType::kSin;
+  } else if (name == "sinh") {
+    return IntrinsicType::kSinh;
+  } else if (name == "smoothStep") {
+    return IntrinsicType::kSmoothStep;
+  } else if (name == "sqrt") {
+    return IntrinsicType::kSqrt;
+  } else if (name == "step") {
+    return IntrinsicType::kStep;
+  } else if (name == "tan") {
+    return IntrinsicType::kTan;
+  } else if (name == "tanh") {
+    return IntrinsicType::kTanh;
+  } else if (name == "textureDimensions") {
+    return IntrinsicType::kTextureDimensions;
+  } else if (name == "textureNumLayers") {
+    return IntrinsicType::kTextureNumLayers;
+  } else if (name == "textureNumLevels") {
+    return IntrinsicType::kTextureNumLevels;
+  } else if (name == "textureNumSamples") {
+    return IntrinsicType::kTextureNumSamples;
+  } else if (name == "textureLoad") {
+    return IntrinsicType::kTextureLoad;
+  } else if (name == "textureStore") {
+    return IntrinsicType::kTextureStore;
+  } else if (name == "textureSample") {
+    return IntrinsicType::kTextureSample;
+  } else if (name == "textureSampleBias") {
+    return IntrinsicType::kTextureSampleBias;
+  } else if (name == "textureSampleCompare") {
+    return IntrinsicType::kTextureSampleCompare;
+  } else if (name == "textureSampleGrad") {
+    return IntrinsicType::kTextureSampleGrad;
+  } else if (name == "textureSampleLevel") {
+    return IntrinsicType::kTextureSampleLevel;
+  } else if (name == "trunc") {
+    return IntrinsicType::kTrunc;
+  } else if (name == "unpack4x8snorm") {
+    return IntrinsicType::kUnpack4x8Snorm;
+  } else if (name == "unpack4x8unorm") {
+    return IntrinsicType::kUnpack4x8Unorm;
+  } else if (name == "unpack2x16snorm") {
+    return IntrinsicType::kUnpack2x16Snorm;
+  } else if (name == "unpack2x16unorm") {
+    return IntrinsicType::kUnpack2x16Unorm;
+  } else if (name == "unpack2x16float") {
+    return IntrinsicType::kUnpack2x16Float;
+  }
+  return IntrinsicType::kNone;
+}
+
 const char* str(IntrinsicType i) {
   /// The emitted name matches the spelling in the WGSL spec.
   /// including case.
diff --git a/src/semantic/sem_intrinsic_test.cc b/src/semantic/sem_intrinsic_test.cc
new file mode 100644
index 0000000..bba98b3
--- /dev/null
+++ b/src/semantic/sem_intrinsic_test.cc
@@ -0,0 +1,123 @@
+// Copyright 2021 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/semantic/intrinsic.h"
+
+#include "gtest/gtest.h"
+
+namespace tint {
+namespace semantic {
+namespace {
+
+struct IntrinsicData {
+  const char* name;
+  IntrinsicType intrinsic;
+};
+
+inline std::ostream& operator<<(std::ostream& out, IntrinsicData data) {
+  out << data.name;
+  return out;
+}
+
+using IntrinsicTypeTest = testing::TestWithParam<IntrinsicData>;
+
+TEST_P(IntrinsicTypeTest, Parse) {
+  auto param = GetParam();
+  EXPECT_EQ(ParseIntrinsicType(param.name), param.intrinsic);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    IntrinsicTypeTest,
+    IntrinsicTypeTest,
+    testing::Values(
+        IntrinsicData{"abs", IntrinsicType::kAbs},
+        IntrinsicData{"acos", IntrinsicType::kAcos},
+        IntrinsicData{"all", IntrinsicType::kAll},
+        IntrinsicData{"any", IntrinsicType::kAny},
+        IntrinsicData{"arrayLength", IntrinsicType::kArrayLength},
+        IntrinsicData{"asin", IntrinsicType::kAsin},
+        IntrinsicData{"atan", IntrinsicType::kAtan},
+        IntrinsicData{"atan2", IntrinsicType::kAtan2},
+        IntrinsicData{"ceil", IntrinsicType::kCeil},
+        IntrinsicData{"clamp", IntrinsicType::kClamp},
+        IntrinsicData{"cos", IntrinsicType::kCos},
+        IntrinsicData{"cosh", IntrinsicType::kCosh},
+        IntrinsicData{"countOneBits", IntrinsicType::kCountOneBits},
+        IntrinsicData{"cross", IntrinsicType::kCross},
+        IntrinsicData{"determinant", IntrinsicType::kDeterminant},
+        IntrinsicData{"distance", IntrinsicType::kDistance},
+        IntrinsicData{"dot", IntrinsicType::kDot},
+        IntrinsicData{"dpdx", IntrinsicType::kDpdx},
+        IntrinsicData{"dpdxCoarse", IntrinsicType::kDpdxCoarse},
+        IntrinsicData{"dpdxFine", IntrinsicType::kDpdxFine},
+        IntrinsicData{"dpdy", IntrinsicType::kDpdy},
+        IntrinsicData{"dpdyCoarse", IntrinsicType::kDpdyCoarse},
+        IntrinsicData{"dpdyFine", IntrinsicType::kDpdyFine},
+        IntrinsicData{"exp", IntrinsicType::kExp},
+        IntrinsicData{"exp2", IntrinsicType::kExp2},
+        IntrinsicData{"faceForward", IntrinsicType::kFaceForward},
+        IntrinsicData{"floor", IntrinsicType::kFloor},
+        IntrinsicData{"fma", IntrinsicType::kFma},
+        IntrinsicData{"fract", IntrinsicType::kFract},
+        IntrinsicData{"frexp", IntrinsicType::kFrexp},
+        IntrinsicData{"fwidth", IntrinsicType::kFwidth},
+        IntrinsicData{"fwidthCoarse", IntrinsicType::kFwidthCoarse},
+        IntrinsicData{"fwidthFine", IntrinsicType::kFwidthFine},
+        IntrinsicData{"inverseSqrt", IntrinsicType::kInverseSqrt},
+        IntrinsicData{"isFinite", IntrinsicType::kIsFinite},
+        IntrinsicData{"isInf", IntrinsicType::kIsInf},
+        IntrinsicData{"isNan", IntrinsicType::kIsNan},
+        IntrinsicData{"isNormal", IntrinsicType::kIsNormal},
+        IntrinsicData{"ldexp", IntrinsicType::kLdexp},
+        IntrinsicData{"length", IntrinsicType::kLength},
+        IntrinsicData{"log", IntrinsicType::kLog},
+        IntrinsicData{"log2", IntrinsicType::kLog2},
+        IntrinsicData{"max", IntrinsicType::kMax},
+        IntrinsicData{"min", IntrinsicType::kMin},
+        IntrinsicData{"mix", IntrinsicType::kMix},
+        IntrinsicData{"modf", IntrinsicType::kModf},
+        IntrinsicData{"normalize", IntrinsicType::kNormalize},
+        IntrinsicData{"pow", IntrinsicType::kPow},
+        IntrinsicData{"reflect", IntrinsicType::kReflect},
+        IntrinsicData{"reverseBits", IntrinsicType::kReverseBits},
+        IntrinsicData{"round", IntrinsicType::kRound},
+        IntrinsicData{"select", IntrinsicType::kSelect},
+        IntrinsicData{"sign", IntrinsicType::kSign},
+        IntrinsicData{"sin", IntrinsicType::kSin},
+        IntrinsicData{"sinh", IntrinsicType::kSinh},
+        IntrinsicData{"smoothStep", IntrinsicType::kSmoothStep},
+        IntrinsicData{"sqrt", IntrinsicType::kSqrt},
+        IntrinsicData{"step", IntrinsicType::kStep},
+        IntrinsicData{"tan", IntrinsicType::kTan},
+        IntrinsicData{"tanh", IntrinsicType::kTanh},
+        IntrinsicData{"textureDimensions", IntrinsicType::kTextureDimensions},
+        IntrinsicData{"textureLoad", IntrinsicType::kTextureLoad},
+        IntrinsicData{"textureNumLayers", IntrinsicType::kTextureNumLayers},
+        IntrinsicData{"textureNumLevels", IntrinsicType::kTextureNumLevels},
+        IntrinsicData{"textureNumSamples", IntrinsicType::kTextureNumSamples},
+        IntrinsicData{"textureSample", IntrinsicType::kTextureSample},
+        IntrinsicData{"textureSampleBias", IntrinsicType::kTextureSampleBias},
+        IntrinsicData{"textureSampleCompare",
+                      IntrinsicType::kTextureSampleCompare},
+        IntrinsicData{"textureSampleGrad", IntrinsicType::kTextureSampleGrad},
+        IntrinsicData{"textureSampleLevel", IntrinsicType::kTextureSampleLevel},
+        IntrinsicData{"trunc", IntrinsicType::kTrunc}));
+
+TEST_F(IntrinsicTypeTest, ParseNoMatch) {
+  EXPECT_EQ(ParseIntrinsicType("not_intrinsic"), IntrinsicType::kNone);
+}
+
+}  // namespace
+}  // namespace semantic
+}  // namespace tint
diff --git a/src/type_determiner.cc b/src/type_determiner.cc
index 8a77248..22ad335 100644
--- a/src/type_determiner.cc
+++ b/src/type_determiner.cc
@@ -412,7 +412,7 @@
 
   auto name = builder_->Symbols().NameFor(ident->symbol());
 
-  auto intrinsic_type = MatchIntrinsicType(name);
+  auto intrinsic_type = semantic::ParseIntrinsicType(name);
   if (intrinsic_type != IntrinsicType::kNone) {
     if (!DetermineIntrinsicCall(call, intrinsic_type)) {
       return false;
@@ -563,7 +563,7 @@
   }
 
   std::string name = builder_->Symbols().NameFor(symbol);
-  if (MatchIntrinsicType(name) != IntrinsicType::kNone) {
+  if (semantic::ParseIntrinsicType(name) != IntrinsicType::kNone) {
     diagnostics_.add_error("missing '(' for intrinsic call",
                            expr->source().End());
     return false;
@@ -575,175 +575,6 @@
   return false;
 }
 
-IntrinsicType TypeDeterminer::MatchIntrinsicType(const std::string& name) {
-  if (name == "abs") {
-    return IntrinsicType::kAbs;
-  } else if (name == "acos") {
-    return IntrinsicType::kAcos;
-  } else if (name == "all") {
-    return IntrinsicType::kAll;
-  } else if (name == "any") {
-    return IntrinsicType::kAny;
-  } else if (name == "arrayLength") {
-    return IntrinsicType::kArrayLength;
-  } else if (name == "asin") {
-    return IntrinsicType::kAsin;
-  } else if (name == "atan") {
-    return IntrinsicType::kAtan;
-  } else if (name == "atan2") {
-    return IntrinsicType::kAtan2;
-  } else if (name == "ceil") {
-    return IntrinsicType::kCeil;
-  } else if (name == "clamp") {
-    return IntrinsicType::kClamp;
-  } else if (name == "cos") {
-    return IntrinsicType::kCos;
-  } else if (name == "cosh") {
-    return IntrinsicType::kCosh;
-  } else if (name == "countOneBits") {
-    return IntrinsicType::kCountOneBits;
-  } else if (name == "cross") {
-    return IntrinsicType::kCross;
-  } else if (name == "determinant") {
-    return IntrinsicType::kDeterminant;
-  } else if (name == "distance") {
-    return IntrinsicType::kDistance;
-  } else if (name == "dot") {
-    return IntrinsicType::kDot;
-  } else if (name == "dpdx") {
-    return IntrinsicType::kDpdx;
-  } else if (name == "dpdxCoarse") {
-    return IntrinsicType::kDpdxCoarse;
-  } else if (name == "dpdxFine") {
-    return IntrinsicType::kDpdxFine;
-  } else if (name == "dpdy") {
-    return IntrinsicType::kDpdy;
-  } else if (name == "dpdyCoarse") {
-    return IntrinsicType::kDpdyCoarse;
-  } else if (name == "dpdyFine") {
-    return IntrinsicType::kDpdyFine;
-  } else if (name == "exp") {
-    return IntrinsicType::kExp;
-  } else if (name == "exp2") {
-    return IntrinsicType::kExp2;
-  } else if (name == "faceForward") {
-    return IntrinsicType::kFaceForward;
-  } else if (name == "floor") {
-    return IntrinsicType::kFloor;
-  } else if (name == "fma") {
-    return IntrinsicType::kFma;
-  } else if (name == "fract") {
-    return IntrinsicType::kFract;
-  } else if (name == "frexp") {
-    return IntrinsicType::kFrexp;
-  } else if (name == "fwidth") {
-    return IntrinsicType::kFwidth;
-  } else if (name == "fwidthCoarse") {
-    return IntrinsicType::kFwidthCoarse;
-  } else if (name == "fwidthFine") {
-    return IntrinsicType::kFwidthFine;
-  } else if (name == "inverseSqrt") {
-    return IntrinsicType::kInverseSqrt;
-  } else if (name == "isFinite") {
-    return IntrinsicType::kIsFinite;
-  } else if (name == "isInf") {
-    return IntrinsicType::kIsInf;
-  } else if (name == "isNan") {
-    return IntrinsicType::kIsNan;
-  } else if (name == "isNormal") {
-    return IntrinsicType::kIsNormal;
-  } else if (name == "ldexp") {
-    return IntrinsicType::kLdexp;
-  } else if (name == "length") {
-    return IntrinsicType::kLength;
-  } else if (name == "log") {
-    return IntrinsicType::kLog;
-  } else if (name == "log2") {
-    return IntrinsicType::kLog2;
-  } else if (name == "max") {
-    return IntrinsicType::kMax;
-  } else if (name == "min") {
-    return IntrinsicType::kMin;
-  } else if (name == "mix") {
-    return IntrinsicType::kMix;
-  } else if (name == "modf") {
-    return IntrinsicType::kModf;
-  } else if (name == "normalize") {
-    return IntrinsicType::kNormalize;
-  } else if (name == "pack4x8snorm") {
-    return IntrinsicType::kPack4x8Snorm;
-  } else if (name == "pack4x8unorm") {
-    return IntrinsicType::kPack4x8Unorm;
-  } else if (name == "pack2x16snorm") {
-    return IntrinsicType::kPack2x16Snorm;
-  } else if (name == "pack2x16unorm") {
-    return IntrinsicType::kPack2x16Unorm;
-  } else if (name == "pack2x16float") {
-    return IntrinsicType::kPack2x16Float;
-  } else if (name == "pow") {
-    return IntrinsicType::kPow;
-  } else if (name == "reflect") {
-    return IntrinsicType::kReflect;
-  } else if (name == "reverseBits") {
-    return IntrinsicType::kReverseBits;
-  } else if (name == "round") {
-    return IntrinsicType::kRound;
-  } else if (name == "select") {
-    return IntrinsicType::kSelect;
-  } else if (name == "sign") {
-    return IntrinsicType::kSign;
-  } else if (name == "sin") {
-    return IntrinsicType::kSin;
-  } else if (name == "sinh") {
-    return IntrinsicType::kSinh;
-  } else if (name == "smoothStep") {
-    return IntrinsicType::kSmoothStep;
-  } else if (name == "sqrt") {
-    return IntrinsicType::kSqrt;
-  } else if (name == "step") {
-    return IntrinsicType::kStep;
-  } else if (name == "tan") {
-    return IntrinsicType::kTan;
-  } else if (name == "tanh") {
-    return IntrinsicType::kTanh;
-  } else if (name == "textureDimensions") {
-    return IntrinsicType::kTextureDimensions;
-  } else if (name == "textureNumLayers") {
-    return IntrinsicType::kTextureNumLayers;
-  } else if (name == "textureNumLevels") {
-    return IntrinsicType::kTextureNumLevels;
-  } else if (name == "textureNumSamples") {
-    return IntrinsicType::kTextureNumSamples;
-  } else if (name == "textureLoad") {
-    return IntrinsicType::kTextureLoad;
-  } else if (name == "textureStore") {
-    return IntrinsicType::kTextureStore;
-  } else if (name == "textureSample") {
-    return IntrinsicType::kTextureSample;
-  } else if (name == "textureSampleBias") {
-    return IntrinsicType::kTextureSampleBias;
-  } else if (name == "textureSampleCompare") {
-    return IntrinsicType::kTextureSampleCompare;
-  } else if (name == "textureSampleGrad") {
-    return IntrinsicType::kTextureSampleGrad;
-  } else if (name == "textureSampleLevel") {
-    return IntrinsicType::kTextureSampleLevel;
-  } else if (name == "trunc") {
-    return IntrinsicType::kTrunc;
-  } else if (name == "unpack4x8snorm") {
-    return IntrinsicType::kUnpack4x8Snorm;
-  } else if (name == "unpack4x8unorm") {
-    return IntrinsicType::kUnpack4x8Unorm;
-  } else if (name == "unpack2x16snorm") {
-    return IntrinsicType::kUnpack2x16Snorm;
-  } else if (name == "unpack2x16unorm") {
-    return IntrinsicType::kUnpack2x16Unorm;
-  } else if (name == "unpack2x16float") {
-    return IntrinsicType::kUnpack2x16Float;
-  }
-  return IntrinsicType::kNone;
-}
-
 bool TypeDeterminer::DetermineMemberAccessor(
     ast::MemberAccessorExpression* expr) {
   if (!DetermineResultType(expr->structure())) {
diff --git a/src/type_determiner.h b/src/type_determiner.h
index 677a21c..2c3fd2a 100644
--- a/src/type_determiner.h
+++ b/src/type_determiner.h
@@ -65,11 +65,6 @@
   /// @returns true if the type determiner was successful
   bool Determine();
 
-  /// @param name the function name to try and match as an intrinsic type.
-  /// @return the semantic::IntrinsicType for the given name. If `name` does not
-  /// match an intrinsic, returns semantic::Intrinsic::kNone
-  static semantic::IntrinsicType MatchIntrinsicType(const std::string& name);
-
  private:
   /// Structure holding semantic information about a variable.
   /// Used to build the semantic::Variable nodes at the end of resolving.
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index 75c11df..30ea38d 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -1995,97 +1995,11 @@
   const char* name;
   IntrinsicType intrinsic;
 };
+
 inline std::ostream& operator<<(std::ostream& out, IntrinsicData data) {
   out << data.name;
   return out;
 }
-using IntrinsicDataTest = TypeDeterminerTestWithParam<IntrinsicData>;
-TEST_P(IntrinsicDataTest, Lookup) {
-  auto param = GetParam();
-
-  EXPECT_EQ(TypeDeterminer::MatchIntrinsicType(param.name), param.intrinsic);
-}
-INSTANTIATE_TEST_SUITE_P(
-    TypeDeterminerTest,
-    IntrinsicDataTest,
-    testing::Values(
-        IntrinsicData{"abs", IntrinsicType::kAbs},
-        IntrinsicData{"acos", IntrinsicType::kAcos},
-        IntrinsicData{"all", IntrinsicType::kAll},
-        IntrinsicData{"any", IntrinsicType::kAny},
-        IntrinsicData{"arrayLength", IntrinsicType::kArrayLength},
-        IntrinsicData{"asin", IntrinsicType::kAsin},
-        IntrinsicData{"atan", IntrinsicType::kAtan},
-        IntrinsicData{"atan2", IntrinsicType::kAtan2},
-        IntrinsicData{"ceil", IntrinsicType::kCeil},
-        IntrinsicData{"clamp", IntrinsicType::kClamp},
-        IntrinsicData{"cos", IntrinsicType::kCos},
-        IntrinsicData{"cosh", IntrinsicType::kCosh},
-        IntrinsicData{"countOneBits", IntrinsicType::kCountOneBits},
-        IntrinsicData{"cross", IntrinsicType::kCross},
-        IntrinsicData{"determinant", IntrinsicType::kDeterminant},
-        IntrinsicData{"distance", IntrinsicType::kDistance},
-        IntrinsicData{"dot", IntrinsicType::kDot},
-        IntrinsicData{"dpdx", IntrinsicType::kDpdx},
-        IntrinsicData{"dpdxCoarse", IntrinsicType::kDpdxCoarse},
-        IntrinsicData{"dpdxFine", IntrinsicType::kDpdxFine},
-        IntrinsicData{"dpdy", IntrinsicType::kDpdy},
-        IntrinsicData{"dpdyCoarse", IntrinsicType::kDpdyCoarse},
-        IntrinsicData{"dpdyFine", IntrinsicType::kDpdyFine},
-        IntrinsicData{"exp", IntrinsicType::kExp},
-        IntrinsicData{"exp2", IntrinsicType::kExp2},
-        IntrinsicData{"faceForward", IntrinsicType::kFaceForward},
-        IntrinsicData{"floor", IntrinsicType::kFloor},
-        IntrinsicData{"fma", IntrinsicType::kFma},
-        IntrinsicData{"fract", IntrinsicType::kFract},
-        IntrinsicData{"frexp", IntrinsicType::kFrexp},
-        IntrinsicData{"fwidth", IntrinsicType::kFwidth},
-        IntrinsicData{"fwidthCoarse", IntrinsicType::kFwidthCoarse},
-        IntrinsicData{"fwidthFine", IntrinsicType::kFwidthFine},
-        IntrinsicData{"inverseSqrt", IntrinsicType::kInverseSqrt},
-        IntrinsicData{"isFinite", IntrinsicType::kIsFinite},
-        IntrinsicData{"isInf", IntrinsicType::kIsInf},
-        IntrinsicData{"isNan", IntrinsicType::kIsNan},
-        IntrinsicData{"isNormal", IntrinsicType::kIsNormal},
-        IntrinsicData{"ldexp", IntrinsicType::kLdexp},
-        IntrinsicData{"length", IntrinsicType::kLength},
-        IntrinsicData{"log", IntrinsicType::kLog},
-        IntrinsicData{"log2", IntrinsicType::kLog2},
-        IntrinsicData{"max", IntrinsicType::kMax},
-        IntrinsicData{"min", IntrinsicType::kMin},
-        IntrinsicData{"mix", IntrinsicType::kMix},
-        IntrinsicData{"modf", IntrinsicType::kModf},
-        IntrinsicData{"normalize", IntrinsicType::kNormalize},
-        IntrinsicData{"pow", IntrinsicType::kPow},
-        IntrinsicData{"reflect", IntrinsicType::kReflect},
-        IntrinsicData{"reverseBits", IntrinsicType::kReverseBits},
-        IntrinsicData{"round", IntrinsicType::kRound},
-        IntrinsicData{"select", IntrinsicType::kSelect},
-        IntrinsicData{"sign", IntrinsicType::kSign},
-        IntrinsicData{"sin", IntrinsicType::kSin},
-        IntrinsicData{"sinh", IntrinsicType::kSinh},
-        IntrinsicData{"smoothStep", IntrinsicType::kSmoothStep},
-        IntrinsicData{"sqrt", IntrinsicType::kSqrt},
-        IntrinsicData{"step", IntrinsicType::kStep},
-        IntrinsicData{"tan", IntrinsicType::kTan},
-        IntrinsicData{"tanh", IntrinsicType::kTanh},
-        IntrinsicData{"textureDimensions", IntrinsicType::kTextureDimensions},
-        IntrinsicData{"textureLoad", IntrinsicType::kTextureLoad},
-        IntrinsicData{"textureNumLayers", IntrinsicType::kTextureNumLayers},
-        IntrinsicData{"textureNumLevels", IntrinsicType::kTextureNumLevels},
-        IntrinsicData{"textureNumSamples", IntrinsicType::kTextureNumSamples},
-        IntrinsicData{"textureSample", IntrinsicType::kTextureSample},
-        IntrinsicData{"textureSampleBias", IntrinsicType::kTextureSampleBias},
-        IntrinsicData{"textureSampleCompare",
-                      IntrinsicType::kTextureSampleCompare},
-        IntrinsicData{"textureSampleGrad", IntrinsicType::kTextureSampleGrad},
-        IntrinsicData{"textureSampleLevel", IntrinsicType::kTextureSampleLevel},
-        IntrinsicData{"trunc", IntrinsicType::kTrunc}));
-
-TEST_F(TypeDeterminerTest, MatchIntrinsicNoMatch) {
-  EXPECT_EQ(TypeDeterminer::MatchIntrinsicType("not_intrinsic"),
-            IntrinsicType::kNone);
-}
 
 using Intrinsic_DataPackingTest = TypeDeterminerTestWithParam<IntrinsicData>;
 TEST_P(Intrinsic_DataPackingTest, InferType) {
@@ -2270,6 +2184,8 @@
                     IntrinsicData{"tanh", IntrinsicType::kTanh},
                     IntrinsicData{"trunc", IntrinsicType::kTrunc}));
 
+using IntrinsicDataTest = TypeDeterminerTest;
+
 TEST_F(IntrinsicDataTest, ArrayLength_Vector) {
   Global("arr", ty.array<int>(), ast::StorageClass::kNone);
   auto* call = Call("arrayLength", "arr");