// Copyright 2023 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/src/cmd/gen' using the template:
//   src/tint/lang/spirv/ir/function.cc.tmpl
//
// To regenerate run: './tools/run gen'
//
//                       Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////

#include "src/tint/lang/spirv/ir/function.h"

namespace tint::spirv::ir {

const char* str(Function i) {
    switch (i) {
        case Function::kNone:
            return "<none>";
        case Function::kArrayLength:
            return "spirv.array_length";
        case Function::kAtomicAnd:
            return "spirv.atomic_and";
        case Function::kAtomicCompareExchange:
            return "spirv.atomic_compare_exchange";
        case Function::kAtomicExchange:
            return "spirv.atomic_exchange";
        case Function::kAtomicIadd:
            return "spirv.atomic_iadd";
        case Function::kAtomicIsub:
            return "spirv.atomic_isub";
        case Function::kAtomicLoad:
            return "spirv.atomic_load";
        case Function::kAtomicOr:
            return "spirv.atomic_or";
        case Function::kAtomicSmax:
            return "spirv.atomic_smax";
        case Function::kAtomicSmin:
            return "spirv.atomic_smin";
        case Function::kAtomicStore:
            return "spirv.atomic_store";
        case Function::kAtomicUmax:
            return "spirv.atomic_umax";
        case Function::kAtomicUmin:
            return "spirv.atomic_umin";
        case Function::kAtomicXor:
            return "spirv.atomic_xor";
        case Function::kDot:
            return "spirv.dot";
        case Function::kImageDrefGather:
            return "spirv.image_dref_gather";
        case Function::kImageFetch:
            return "spirv.image_fetch";
        case Function::kImageGather:
            return "spirv.image_gather";
        case Function::kImageQuerySize:
            return "spirv.image_query_size";
        case Function::kImageQuerySizeLod:
            return "spirv.image_query_size_lod";
        case Function::kImageRead:
            return "spirv.image_read";
        case Function::kMatrixTimesMatrix:
            return "spirv.matrix_times_matrix";
        case Function::kMatrixTimesScalar:
            return "spirv.matrix_times_scalar";
        case Function::kMatrixTimesVector:
            return "spirv.matrix_times_vector";
        case Function::kSampledImage:
            return "spirv.sampled_image";
        case Function::kSelect:
            return "spirv.select";
        case Function::kVectorTimesMatrix:
            return "spirv.vector_times_matrix";
        case Function::kVectorTimesScalar:
            return "spirv.vector_times_scalar";
    }
    return "<unknown>";
}

}  // namespace tint::spirv::ir
