// 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.

////////////////////////////////////////////////////////////////////////////////
// File generated by tools/builtin-gen
// using the template:
//   src/tint/sem/builtin_type.cc.tmpl
// and the builtin defintion file:
//   src/tint/builtins.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////

#include "src/tint/sem/builtin_type.h"

#include <sstream>

namespace tint {
namespace sem {

BuiltinType ParseBuiltinType(const std::string& name) {
  if (name == "abs") {
    return BuiltinType::kAbs;
  }
  if (name == "acos") {
    return BuiltinType::kAcos;
  }
  if (name == "all") {
    return BuiltinType::kAll;
  }
  if (name == "any") {
    return BuiltinType::kAny;
  }
  if (name == "arrayLength") {
    return BuiltinType::kArrayLength;
  }
  if (name == "asin") {
    return BuiltinType::kAsin;
  }
  if (name == "atan") {
    return BuiltinType::kAtan;
  }
  if (name == "atan2") {
    return BuiltinType::kAtan2;
  }
  if (name == "ceil") {
    return BuiltinType::kCeil;
  }
  if (name == "clamp") {
    return BuiltinType::kClamp;
  }
  if (name == "cos") {
    return BuiltinType::kCos;
  }
  if (name == "cosh") {
    return BuiltinType::kCosh;
  }
  if (name == "countLeadingZeros") {
    return BuiltinType::kCountLeadingZeros;
  }
  if (name == "countOneBits") {
    return BuiltinType::kCountOneBits;
  }
  if (name == "countTrailingZeros") {
    return BuiltinType::kCountTrailingZeros;
  }
  if (name == "cross") {
    return BuiltinType::kCross;
  }
  if (name == "degrees") {
    return BuiltinType::kDegrees;
  }
  if (name == "determinant") {
    return BuiltinType::kDeterminant;
  }
  if (name == "distance") {
    return BuiltinType::kDistance;
  }
  if (name == "dot") {
    return BuiltinType::kDot;
  }
  if (name == "dpdx") {
    return BuiltinType::kDpdx;
  }
  if (name == "dpdxCoarse") {
    return BuiltinType::kDpdxCoarse;
  }
  if (name == "dpdxFine") {
    return BuiltinType::kDpdxFine;
  }
  if (name == "dpdy") {
    return BuiltinType::kDpdy;
  }
  if (name == "dpdyCoarse") {
    return BuiltinType::kDpdyCoarse;
  }
  if (name == "dpdyFine") {
    return BuiltinType::kDpdyFine;
  }
  if (name == "exp") {
    return BuiltinType::kExp;
  }
  if (name == "exp2") {
    return BuiltinType::kExp2;
  }
  if (name == "extractBits") {
    return BuiltinType::kExtractBits;
  }
  if (name == "faceForward") {
    return BuiltinType::kFaceForward;
  }
  if (name == "firstLeadingBit") {
    return BuiltinType::kFirstLeadingBit;
  }
  if (name == "firstTrailingBit") {
    return BuiltinType::kFirstTrailingBit;
  }
  if (name == "floor") {
    return BuiltinType::kFloor;
  }
  if (name == "fma") {
    return BuiltinType::kFma;
  }
  if (name == "fract") {
    return BuiltinType::kFract;
  }
  if (name == "frexp") {
    return BuiltinType::kFrexp;
  }
  if (name == "fwidth") {
    return BuiltinType::kFwidth;
  }
  if (name == "fwidthCoarse") {
    return BuiltinType::kFwidthCoarse;
  }
  if (name == "fwidthFine") {
    return BuiltinType::kFwidthFine;
  }
  if (name == "insertBits") {
    return BuiltinType::kInsertBits;
  }
  if (name == "inverseSqrt") {
    return BuiltinType::kInverseSqrt;
  }
  if (name == "ldexp") {
    return BuiltinType::kLdexp;
  }
  if (name == "length") {
    return BuiltinType::kLength;
  }
  if (name == "log") {
    return BuiltinType::kLog;
  }
  if (name == "log2") {
    return BuiltinType::kLog2;
  }
  if (name == "max") {
    return BuiltinType::kMax;
  }
  if (name == "min") {
    return BuiltinType::kMin;
  }
  if (name == "mix") {
    return BuiltinType::kMix;
  }
  if (name == "modf") {
    return BuiltinType::kModf;
  }
  if (name == "normalize") {
    return BuiltinType::kNormalize;
  }
  if (name == "pack2x16float") {
    return BuiltinType::kPack2x16float;
  }
  if (name == "pack2x16snorm") {
    return BuiltinType::kPack2x16snorm;
  }
  if (name == "pack2x16unorm") {
    return BuiltinType::kPack2x16unorm;
  }
  if (name == "pack4x8snorm") {
    return BuiltinType::kPack4x8snorm;
  }
  if (name == "pack4x8unorm") {
    return BuiltinType::kPack4x8unorm;
  }
  if (name == "pow") {
    return BuiltinType::kPow;
  }
  if (name == "radians") {
    return BuiltinType::kRadians;
  }
  if (name == "reflect") {
    return BuiltinType::kReflect;
  }
  if (name == "refract") {
    return BuiltinType::kRefract;
  }
  if (name == "reverseBits") {
    return BuiltinType::kReverseBits;
  }
  if (name == "round") {
    return BuiltinType::kRound;
  }
  if (name == "select") {
    return BuiltinType::kSelect;
  }
  if (name == "sign") {
    return BuiltinType::kSign;
  }
  if (name == "sin") {
    return BuiltinType::kSin;
  }
  if (name == "sinh") {
    return BuiltinType::kSinh;
  }
  if (name == "smoothstep") {
    return BuiltinType::kSmoothstep;
  }
  if (name == "smoothStep") {
    return BuiltinType::kSmoothStep;
  }
  if (name == "sqrt") {
    return BuiltinType::kSqrt;
  }
  if (name == "step") {
    return BuiltinType::kStep;
  }
  if (name == "storageBarrier") {
    return BuiltinType::kStorageBarrier;
  }
  if (name == "tan") {
    return BuiltinType::kTan;
  }
  if (name == "tanh") {
    return BuiltinType::kTanh;
  }
  if (name == "transpose") {
    return BuiltinType::kTranspose;
  }
  if (name == "trunc") {
    return BuiltinType::kTrunc;
  }
  if (name == "unpack2x16float") {
    return BuiltinType::kUnpack2x16float;
  }
  if (name == "unpack2x16snorm") {
    return BuiltinType::kUnpack2x16snorm;
  }
  if (name == "unpack2x16unorm") {
    return BuiltinType::kUnpack2x16unorm;
  }
  if (name == "unpack4x8snorm") {
    return BuiltinType::kUnpack4x8snorm;
  }
  if (name == "unpack4x8unorm") {
    return BuiltinType::kUnpack4x8unorm;
  }
  if (name == "workgroupBarrier") {
    return BuiltinType::kWorkgroupBarrier;
  }
  if (name == "textureDimensions") {
    return BuiltinType::kTextureDimensions;
  }
  if (name == "textureGather") {
    return BuiltinType::kTextureGather;
  }
  if (name == "textureGatherCompare") {
    return BuiltinType::kTextureGatherCompare;
  }
  if (name == "textureNumLayers") {
    return BuiltinType::kTextureNumLayers;
  }
  if (name == "textureNumLevels") {
    return BuiltinType::kTextureNumLevels;
  }
  if (name == "textureNumSamples") {
    return BuiltinType::kTextureNumSamples;
  }
  if (name == "textureSample") {
    return BuiltinType::kTextureSample;
  }
  if (name == "textureSampleBias") {
    return BuiltinType::kTextureSampleBias;
  }
  if (name == "textureSampleCompare") {
    return BuiltinType::kTextureSampleCompare;
  }
  if (name == "textureSampleCompareLevel") {
    return BuiltinType::kTextureSampleCompareLevel;
  }
  if (name == "textureSampleGrad") {
    return BuiltinType::kTextureSampleGrad;
  }
  if (name == "textureSampleLevel") {
    return BuiltinType::kTextureSampleLevel;
  }
  if (name == "textureStore") {
    return BuiltinType::kTextureStore;
  }
  if (name == "textureLoad") {
    return BuiltinType::kTextureLoad;
  }
  if (name == "atomicLoad") {
    return BuiltinType::kAtomicLoad;
  }
  if (name == "atomicStore") {
    return BuiltinType::kAtomicStore;
  }
  if (name == "atomicAdd") {
    return BuiltinType::kAtomicAdd;
  }
  if (name == "atomicSub") {
    return BuiltinType::kAtomicSub;
  }
  if (name == "atomicMax") {
    return BuiltinType::kAtomicMax;
  }
  if (name == "atomicMin") {
    return BuiltinType::kAtomicMin;
  }
  if (name == "atomicAnd") {
    return BuiltinType::kAtomicAnd;
  }
  if (name == "atomicOr") {
    return BuiltinType::kAtomicOr;
  }
  if (name == "atomicXor") {
    return BuiltinType::kAtomicXor;
  }
  if (name == "atomicExchange") {
    return BuiltinType::kAtomicExchange;
  }
  if (name == "atomicCompareExchangeWeak") {
    return BuiltinType::kAtomicCompareExchangeWeak;
  }
  return BuiltinType::kNone;
}

const char* str(BuiltinType i) {
  switch (i) {
    case BuiltinType::kNone:
      return "<none>";
    case BuiltinType::kAbs:
      return "abs";
    case BuiltinType::kAcos:
      return "acos";
    case BuiltinType::kAll:
      return "all";
    case BuiltinType::kAny:
      return "any";
    case BuiltinType::kArrayLength:
      return "arrayLength";
    case BuiltinType::kAsin:
      return "asin";
    case BuiltinType::kAtan:
      return "atan";
    case BuiltinType::kAtan2:
      return "atan2";
    case BuiltinType::kCeil:
      return "ceil";
    case BuiltinType::kClamp:
      return "clamp";
    case BuiltinType::kCos:
      return "cos";
    case BuiltinType::kCosh:
      return "cosh";
    case BuiltinType::kCountLeadingZeros:
      return "countLeadingZeros";
    case BuiltinType::kCountOneBits:
      return "countOneBits";
    case BuiltinType::kCountTrailingZeros:
      return "countTrailingZeros";
    case BuiltinType::kCross:
      return "cross";
    case BuiltinType::kDegrees:
      return "degrees";
    case BuiltinType::kDeterminant:
      return "determinant";
    case BuiltinType::kDistance:
      return "distance";
    case BuiltinType::kDot:
      return "dot";
    case BuiltinType::kDpdx:
      return "dpdx";
    case BuiltinType::kDpdxCoarse:
      return "dpdxCoarse";
    case BuiltinType::kDpdxFine:
      return "dpdxFine";
    case BuiltinType::kDpdy:
      return "dpdy";
    case BuiltinType::kDpdyCoarse:
      return "dpdyCoarse";
    case BuiltinType::kDpdyFine:
      return "dpdyFine";
    case BuiltinType::kExp:
      return "exp";
    case BuiltinType::kExp2:
      return "exp2";
    case BuiltinType::kExtractBits:
      return "extractBits";
    case BuiltinType::kFaceForward:
      return "faceForward";
    case BuiltinType::kFirstLeadingBit:
      return "firstLeadingBit";
    case BuiltinType::kFirstTrailingBit:
      return "firstTrailingBit";
    case BuiltinType::kFloor:
      return "floor";
    case BuiltinType::kFma:
      return "fma";
    case BuiltinType::kFract:
      return "fract";
    case BuiltinType::kFrexp:
      return "frexp";
    case BuiltinType::kFwidth:
      return "fwidth";
    case BuiltinType::kFwidthCoarse:
      return "fwidthCoarse";
    case BuiltinType::kFwidthFine:
      return "fwidthFine";
    case BuiltinType::kInsertBits:
      return "insertBits";
    case BuiltinType::kInverseSqrt:
      return "inverseSqrt";
    case BuiltinType::kLdexp:
      return "ldexp";
    case BuiltinType::kLength:
      return "length";
    case BuiltinType::kLog:
      return "log";
    case BuiltinType::kLog2:
      return "log2";
    case BuiltinType::kMax:
      return "max";
    case BuiltinType::kMin:
      return "min";
    case BuiltinType::kMix:
      return "mix";
    case BuiltinType::kModf:
      return "modf";
    case BuiltinType::kNormalize:
      return "normalize";
    case BuiltinType::kPack2x16float:
      return "pack2x16float";
    case BuiltinType::kPack2x16snorm:
      return "pack2x16snorm";
    case BuiltinType::kPack2x16unorm:
      return "pack2x16unorm";
    case BuiltinType::kPack4x8snorm:
      return "pack4x8snorm";
    case BuiltinType::kPack4x8unorm:
      return "pack4x8unorm";
    case BuiltinType::kPow:
      return "pow";
    case BuiltinType::kRadians:
      return "radians";
    case BuiltinType::kReflect:
      return "reflect";
    case BuiltinType::kRefract:
      return "refract";
    case BuiltinType::kReverseBits:
      return "reverseBits";
    case BuiltinType::kRound:
      return "round";
    case BuiltinType::kSelect:
      return "select";
    case BuiltinType::kSign:
      return "sign";
    case BuiltinType::kSin:
      return "sin";
    case BuiltinType::kSinh:
      return "sinh";
    case BuiltinType::kSmoothstep:
      return "smoothstep";
    case BuiltinType::kSmoothStep:
      return "smoothStep";
    case BuiltinType::kSqrt:
      return "sqrt";
    case BuiltinType::kStep:
      return "step";
    case BuiltinType::kStorageBarrier:
      return "storageBarrier";
    case BuiltinType::kTan:
      return "tan";
    case BuiltinType::kTanh:
      return "tanh";
    case BuiltinType::kTranspose:
      return "transpose";
    case BuiltinType::kTrunc:
      return "trunc";
    case BuiltinType::kUnpack2x16float:
      return "unpack2x16float";
    case BuiltinType::kUnpack2x16snorm:
      return "unpack2x16snorm";
    case BuiltinType::kUnpack2x16unorm:
      return "unpack2x16unorm";
    case BuiltinType::kUnpack4x8snorm:
      return "unpack4x8snorm";
    case BuiltinType::kUnpack4x8unorm:
      return "unpack4x8unorm";
    case BuiltinType::kWorkgroupBarrier:
      return "workgroupBarrier";
    case BuiltinType::kTextureDimensions:
      return "textureDimensions";
    case BuiltinType::kTextureGather:
      return "textureGather";
    case BuiltinType::kTextureGatherCompare:
      return "textureGatherCompare";
    case BuiltinType::kTextureNumLayers:
      return "textureNumLayers";
    case BuiltinType::kTextureNumLevels:
      return "textureNumLevels";
    case BuiltinType::kTextureNumSamples:
      return "textureNumSamples";
    case BuiltinType::kTextureSample:
      return "textureSample";
    case BuiltinType::kTextureSampleBias:
      return "textureSampleBias";
    case BuiltinType::kTextureSampleCompare:
      return "textureSampleCompare";
    case BuiltinType::kTextureSampleCompareLevel:
      return "textureSampleCompareLevel";
    case BuiltinType::kTextureSampleGrad:
      return "textureSampleGrad";
    case BuiltinType::kTextureSampleLevel:
      return "textureSampleLevel";
    case BuiltinType::kTextureStore:
      return "textureStore";
    case BuiltinType::kTextureLoad:
      return "textureLoad";
    case BuiltinType::kAtomicLoad:
      return "atomicLoad";
    case BuiltinType::kAtomicStore:
      return "atomicStore";
    case BuiltinType::kAtomicAdd:
      return "atomicAdd";
    case BuiltinType::kAtomicSub:
      return "atomicSub";
    case BuiltinType::kAtomicMax:
      return "atomicMax";
    case BuiltinType::kAtomicMin:
      return "atomicMin";
    case BuiltinType::kAtomicAnd:
      return "atomicAnd";
    case BuiltinType::kAtomicOr:
      return "atomicOr";
    case BuiltinType::kAtomicXor:
      return "atomicXor";
    case BuiltinType::kAtomicExchange:
      return "atomicExchange";
    case BuiltinType::kAtomicCompareExchangeWeak:
      return "atomicCompareExchangeWeak";
  }
  return "<unknown>";
}

std::ostream& operator<<(std::ostream& out, BuiltinType i) {
  out << str(i);
  return out;
}

}  // namespace sem
}  // namespace tint
