/*
 * Copyright (C) 2017 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

/* DO NOT EDIT - This file is generated automatically by the
 * vtn_gather_types_c.py script
 */

#include "vtn_private.h"

struct type_args {
    int res_idx;
    int res_type_idx;
};

static struct type_args
result_type_args_for_opcode(SpvOp opcode)
{
   switch (opcode) {
   case SpvOpUndef: return (struct type_args){ 1, 0 };
   case SpvOpString: return (struct type_args){ 0, -1 };
   case SpvOpExtInstImport: return (struct type_args){ 0, -1 };
   case SpvOpExtInst: return (struct type_args){ 1, 0 };
   case SpvOpTypeVoid: return (struct type_args){ 0, -1 };
   case SpvOpTypeBool: return (struct type_args){ 0, -1 };
   case SpvOpTypeInt: return (struct type_args){ 0, -1 };
   case SpvOpTypeFloat: return (struct type_args){ 0, -1 };
   case SpvOpTypeVector: return (struct type_args){ 0, -1 };
   case SpvOpTypeMatrix: return (struct type_args){ 0, -1 };
   case SpvOpTypeImage: return (struct type_args){ 0, -1 };
   case SpvOpTypeSampler: return (struct type_args){ 0, -1 };
   case SpvOpTypeSampledImage: return (struct type_args){ 0, -1 };
   case SpvOpTypeArray: return (struct type_args){ 0, -1 };
   case SpvOpTypeRuntimeArray: return (struct type_args){ 0, -1 };
   case SpvOpTypeStruct: return (struct type_args){ 0, -1 };
   case SpvOpTypeOpaque: return (struct type_args){ 0, -1 };
   case SpvOpTypePointer: return (struct type_args){ 0, -1 };
   case SpvOpTypeFunction: return (struct type_args){ 0, -1 };
   case SpvOpTypeEvent: return (struct type_args){ 0, -1 };
   case SpvOpTypeDeviceEvent: return (struct type_args){ 0, -1 };
   case SpvOpTypeReserveId: return (struct type_args){ 0, -1 };
   case SpvOpTypeQueue: return (struct type_args){ 0, -1 };
   case SpvOpTypePipe: return (struct type_args){ 0, -1 };
   case SpvOpConstantTrue: return (struct type_args){ 1, 0 };
   case SpvOpConstantFalse: return (struct type_args){ 1, 0 };
   case SpvOpConstant: return (struct type_args){ 1, 0 };
   case SpvOpConstantComposite: return (struct type_args){ 1, 0 };
   case SpvOpConstantSampler: return (struct type_args){ 1, 0 };
   case SpvOpConstantNull: return (struct type_args){ 1, 0 };
   case SpvOpSpecConstantTrue: return (struct type_args){ 1, 0 };
   case SpvOpSpecConstantFalse: return (struct type_args){ 1, 0 };
   case SpvOpSpecConstant: return (struct type_args){ 1, 0 };
   case SpvOpSpecConstantComposite: return (struct type_args){ 1, 0 };
   case SpvOpSpecConstantOp: return (struct type_args){ 1, 0 };
   case SpvOpFunction: return (struct type_args){ 1, 0 };
   case SpvOpFunctionParameter: return (struct type_args){ 1, 0 };
   case SpvOpFunctionCall: return (struct type_args){ 1, 0 };
   case SpvOpVariable: return (struct type_args){ 1, 0 };
   case SpvOpImageTexelPointer: return (struct type_args){ 1, 0 };
   case SpvOpLoad: return (struct type_args){ 1, 0 };
   case SpvOpAccessChain: return (struct type_args){ 1, 0 };
   case SpvOpInBoundsAccessChain: return (struct type_args){ 1, 0 };
   case SpvOpPtrAccessChain: return (struct type_args){ 1, 0 };
   case SpvOpArrayLength: return (struct type_args){ 1, 0 };
   case SpvOpGenericPtrMemSemantics: return (struct type_args){ 1, 0 };
   case SpvOpInBoundsPtrAccessChain: return (struct type_args){ 1, 0 };
   case SpvOpDecorationGroup: return (struct type_args){ 0, -1 };
   case SpvOpVectorExtractDynamic: return (struct type_args){ 1, 0 };
   case SpvOpVectorInsertDynamic: return (struct type_args){ 1, 0 };
   case SpvOpVectorShuffle: return (struct type_args){ 1, 0 };
   case SpvOpCompositeConstruct: return (struct type_args){ 1, 0 };
   case SpvOpCompositeExtract: return (struct type_args){ 1, 0 };
   case SpvOpCompositeInsert: return (struct type_args){ 1, 0 };
   case SpvOpCopyObject: return (struct type_args){ 1, 0 };
   case SpvOpTranspose: return (struct type_args){ 1, 0 };
   case SpvOpSampledImage: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleDrefImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleDrefExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleProjImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleProjExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleProjDrefImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleProjDrefExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageFetch: return (struct type_args){ 1, 0 };
   case SpvOpImageGather: return (struct type_args){ 1, 0 };
   case SpvOpImageDrefGather: return (struct type_args){ 1, 0 };
   case SpvOpImageRead: return (struct type_args){ 1, 0 };
   case SpvOpImage: return (struct type_args){ 1, 0 };
   case SpvOpImageQueryFormat: return (struct type_args){ 1, 0 };
   case SpvOpImageQueryOrder: return (struct type_args){ 1, 0 };
   case SpvOpImageQuerySizeLod: return (struct type_args){ 1, 0 };
   case SpvOpImageQuerySize: return (struct type_args){ 1, 0 };
   case SpvOpImageQueryLod: return (struct type_args){ 1, 0 };
   case SpvOpImageQueryLevels: return (struct type_args){ 1, 0 };
   case SpvOpImageQuerySamples: return (struct type_args){ 1, 0 };
   case SpvOpConvertFToU: return (struct type_args){ 1, 0 };
   case SpvOpConvertFToS: return (struct type_args){ 1, 0 };
   case SpvOpConvertSToF: return (struct type_args){ 1, 0 };
   case SpvOpConvertUToF: return (struct type_args){ 1, 0 };
   case SpvOpUConvert: return (struct type_args){ 1, 0 };
   case SpvOpSConvert: return (struct type_args){ 1, 0 };
   case SpvOpFConvert: return (struct type_args){ 1, 0 };
   case SpvOpQuantizeToF16: return (struct type_args){ 1, 0 };
   case SpvOpConvertPtrToU: return (struct type_args){ 1, 0 };
   case SpvOpSatConvertSToU: return (struct type_args){ 1, 0 };
   case SpvOpSatConvertUToS: return (struct type_args){ 1, 0 };
   case SpvOpConvertUToPtr: return (struct type_args){ 1, 0 };
   case SpvOpPtrCastToGeneric: return (struct type_args){ 1, 0 };
   case SpvOpGenericCastToPtr: return (struct type_args){ 1, 0 };
   case SpvOpGenericCastToPtrExplicit: return (struct type_args){ 1, 0 };
   case SpvOpBitcast: return (struct type_args){ 1, 0 };
   case SpvOpSNegate: return (struct type_args){ 1, 0 };
   case SpvOpFNegate: return (struct type_args){ 1, 0 };
   case SpvOpIAdd: return (struct type_args){ 1, 0 };
   case SpvOpFAdd: return (struct type_args){ 1, 0 };
   case SpvOpISub: return (struct type_args){ 1, 0 };
   case SpvOpFSub: return (struct type_args){ 1, 0 };
   case SpvOpIMul: return (struct type_args){ 1, 0 };
   case SpvOpFMul: return (struct type_args){ 1, 0 };
   case SpvOpUDiv: return (struct type_args){ 1, 0 };
   case SpvOpSDiv: return (struct type_args){ 1, 0 };
   case SpvOpFDiv: return (struct type_args){ 1, 0 };
   case SpvOpUMod: return (struct type_args){ 1, 0 };
   case SpvOpSRem: return (struct type_args){ 1, 0 };
   case SpvOpSMod: return (struct type_args){ 1, 0 };
   case SpvOpFRem: return (struct type_args){ 1, 0 };
   case SpvOpFMod: return (struct type_args){ 1, 0 };
   case SpvOpVectorTimesScalar: return (struct type_args){ 1, 0 };
   case SpvOpMatrixTimesScalar: return (struct type_args){ 1, 0 };
   case SpvOpVectorTimesMatrix: return (struct type_args){ 1, 0 };
   case SpvOpMatrixTimesVector: return (struct type_args){ 1, 0 };
   case SpvOpMatrixTimesMatrix: return (struct type_args){ 1, 0 };
   case SpvOpOuterProduct: return (struct type_args){ 1, 0 };
   case SpvOpDot: return (struct type_args){ 1, 0 };
   case SpvOpIAddCarry: return (struct type_args){ 1, 0 };
   case SpvOpISubBorrow: return (struct type_args){ 1, 0 };
   case SpvOpUMulExtended: return (struct type_args){ 1, 0 };
   case SpvOpSMulExtended: return (struct type_args){ 1, 0 };
   case SpvOpAny: return (struct type_args){ 1, 0 };
   case SpvOpAll: return (struct type_args){ 1, 0 };
   case SpvOpIsNan: return (struct type_args){ 1, 0 };
   case SpvOpIsInf: return (struct type_args){ 1, 0 };
   case SpvOpIsFinite: return (struct type_args){ 1, 0 };
   case SpvOpIsNormal: return (struct type_args){ 1, 0 };
   case SpvOpSignBitSet: return (struct type_args){ 1, 0 };
   case SpvOpLessOrGreater: return (struct type_args){ 1, 0 };
   case SpvOpOrdered: return (struct type_args){ 1, 0 };
   case SpvOpUnordered: return (struct type_args){ 1, 0 };
   case SpvOpLogicalEqual: return (struct type_args){ 1, 0 };
   case SpvOpLogicalNotEqual: return (struct type_args){ 1, 0 };
   case SpvOpLogicalOr: return (struct type_args){ 1, 0 };
   case SpvOpLogicalAnd: return (struct type_args){ 1, 0 };
   case SpvOpLogicalNot: return (struct type_args){ 1, 0 };
   case SpvOpSelect: return (struct type_args){ 1, 0 };
   case SpvOpIEqual: return (struct type_args){ 1, 0 };
   case SpvOpINotEqual: return (struct type_args){ 1, 0 };
   case SpvOpUGreaterThan: return (struct type_args){ 1, 0 };
   case SpvOpSGreaterThan: return (struct type_args){ 1, 0 };
   case SpvOpUGreaterThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpSGreaterThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpULessThan: return (struct type_args){ 1, 0 };
   case SpvOpSLessThan: return (struct type_args){ 1, 0 };
   case SpvOpULessThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpSLessThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpFOrdEqual: return (struct type_args){ 1, 0 };
   case SpvOpFUnordEqual: return (struct type_args){ 1, 0 };
   case SpvOpFOrdNotEqual: return (struct type_args){ 1, 0 };
   case SpvOpFUnordNotEqual: return (struct type_args){ 1, 0 };
   case SpvOpFOrdLessThan: return (struct type_args){ 1, 0 };
   case SpvOpFUnordLessThan: return (struct type_args){ 1, 0 };
   case SpvOpFOrdGreaterThan: return (struct type_args){ 1, 0 };
   case SpvOpFUnordGreaterThan: return (struct type_args){ 1, 0 };
   case SpvOpFOrdLessThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpFUnordLessThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpFOrdGreaterThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpFUnordGreaterThanEqual: return (struct type_args){ 1, 0 };
   case SpvOpShiftRightLogical: return (struct type_args){ 1, 0 };
   case SpvOpShiftRightArithmetic: return (struct type_args){ 1, 0 };
   case SpvOpShiftLeftLogical: return (struct type_args){ 1, 0 };
   case SpvOpBitwiseOr: return (struct type_args){ 1, 0 };
   case SpvOpBitwiseXor: return (struct type_args){ 1, 0 };
   case SpvOpBitwiseAnd: return (struct type_args){ 1, 0 };
   case SpvOpNot: return (struct type_args){ 1, 0 };
   case SpvOpBitFieldInsert: return (struct type_args){ 1, 0 };
   case SpvOpBitFieldSExtract: return (struct type_args){ 1, 0 };
   case SpvOpBitFieldUExtract: return (struct type_args){ 1, 0 };
   case SpvOpBitReverse: return (struct type_args){ 1, 0 };
   case SpvOpBitCount: return (struct type_args){ 1, 0 };
   case SpvOpDPdx: return (struct type_args){ 1, 0 };
   case SpvOpDPdy: return (struct type_args){ 1, 0 };
   case SpvOpFwidth: return (struct type_args){ 1, 0 };
   case SpvOpDPdxFine: return (struct type_args){ 1, 0 };
   case SpvOpDPdyFine: return (struct type_args){ 1, 0 };
   case SpvOpFwidthFine: return (struct type_args){ 1, 0 };
   case SpvOpDPdxCoarse: return (struct type_args){ 1, 0 };
   case SpvOpDPdyCoarse: return (struct type_args){ 1, 0 };
   case SpvOpFwidthCoarse: return (struct type_args){ 1, 0 };
   case SpvOpAtomicLoad: return (struct type_args){ 1, 0 };
   case SpvOpAtomicExchange: return (struct type_args){ 1, 0 };
   case SpvOpAtomicCompareExchange: return (struct type_args){ 1, 0 };
   case SpvOpAtomicCompareExchangeWeak: return (struct type_args){ 1, 0 };
   case SpvOpAtomicIIncrement: return (struct type_args){ 1, 0 };
   case SpvOpAtomicIDecrement: return (struct type_args){ 1, 0 };
   case SpvOpAtomicIAdd: return (struct type_args){ 1, 0 };
   case SpvOpAtomicISub: return (struct type_args){ 1, 0 };
   case SpvOpAtomicSMin: return (struct type_args){ 1, 0 };
   case SpvOpAtomicUMin: return (struct type_args){ 1, 0 };
   case SpvOpAtomicSMax: return (struct type_args){ 1, 0 };
   case SpvOpAtomicUMax: return (struct type_args){ 1, 0 };
   case SpvOpAtomicAnd: return (struct type_args){ 1, 0 };
   case SpvOpAtomicOr: return (struct type_args){ 1, 0 };
   case SpvOpAtomicXor: return (struct type_args){ 1, 0 };
   case SpvOpPhi: return (struct type_args){ 1, 0 };
   case SpvOpLabel: return (struct type_args){ 0, -1 };
   case SpvOpGroupAsyncCopy: return (struct type_args){ 1, 0 };
   case SpvOpGroupAll: return (struct type_args){ 1, 0 };
   case SpvOpGroupAny: return (struct type_args){ 1, 0 };
   case SpvOpGroupBroadcast: return (struct type_args){ 1, 0 };
   case SpvOpGroupIAdd: return (struct type_args){ 1, 0 };
   case SpvOpGroupFAdd: return (struct type_args){ 1, 0 };
   case SpvOpGroupFMin: return (struct type_args){ 1, 0 };
   case SpvOpGroupUMin: return (struct type_args){ 1, 0 };
   case SpvOpGroupSMin: return (struct type_args){ 1, 0 };
   case SpvOpGroupFMax: return (struct type_args){ 1, 0 };
   case SpvOpGroupUMax: return (struct type_args){ 1, 0 };
   case SpvOpGroupSMax: return (struct type_args){ 1, 0 };
   case SpvOpReadPipe: return (struct type_args){ 1, 0 };
   case SpvOpWritePipe: return (struct type_args){ 1, 0 };
   case SpvOpReservedReadPipe: return (struct type_args){ 1, 0 };
   case SpvOpReservedWritePipe: return (struct type_args){ 1, 0 };
   case SpvOpReserveReadPipePackets: return (struct type_args){ 1, 0 };
   case SpvOpReserveWritePipePackets: return (struct type_args){ 1, 0 };
   case SpvOpIsValidReserveId: return (struct type_args){ 1, 0 };
   case SpvOpGetNumPipePackets: return (struct type_args){ 1, 0 };
   case SpvOpGetMaxPipePackets: return (struct type_args){ 1, 0 };
   case SpvOpGroupReserveReadPipePackets: return (struct type_args){ 1, 0 };
   case SpvOpGroupReserveWritePipePackets: return (struct type_args){ 1, 0 };
   case SpvOpEnqueueMarker: return (struct type_args){ 1, 0 };
   case SpvOpEnqueueKernel: return (struct type_args){ 1, 0 };
   case SpvOpGetKernelNDrangeSubGroupCount: return (struct type_args){ 1, 0 };
   case SpvOpGetKernelNDrangeMaxSubGroupSize: return (struct type_args){ 1, 0 };
   case SpvOpGetKernelWorkGroupSize: return (struct type_args){ 1, 0 };
   case SpvOpGetKernelPreferredWorkGroupSizeMultiple: return (struct type_args){ 1, 0 };
   case SpvOpCreateUserEvent: return (struct type_args){ 1, 0 };
   case SpvOpIsValidEvent: return (struct type_args){ 1, 0 };
   case SpvOpGetDefaultQueue: return (struct type_args){ 1, 0 };
   case SpvOpBuildNDRange: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleDrefImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleDrefExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleProjImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleProjExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleProjDrefImplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseSampleProjDrefExplicitLod: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseFetch: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseGather: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseDrefGather: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseTexelsResident: return (struct type_args){ 1, 0 };
   case SpvOpAtomicFlagTestAndSet: return (struct type_args){ 1, 0 };
   case SpvOpImageSparseRead: return (struct type_args){ 1, 0 };
   case SpvOpSizeOf: return (struct type_args){ 1, 0 };
   case SpvOpTypePipeStorage: return (struct type_args){ 0, -1 };
   case SpvOpConstantPipeStorage: return (struct type_args){ 1, 0 };
   case SpvOpCreatePipeFromPipeStorage: return (struct type_args){ 1, 0 };
   case SpvOpGetKernelLocalSizeForSubgroupCount: return (struct type_args){ 1, 0 };
   case SpvOpGetKernelMaxNumSubgroups: return (struct type_args){ 1, 0 };
   case SpvOpTypeNamedBarrier: return (struct type_args){ 0, -1 };
   case SpvOpNamedBarrierInitialize: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformElect: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformAll: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformAny: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformAllEqual: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBroadcast: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBroadcastFirst: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBallot: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformInverseBallot: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBallotBitExtract: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBallotBitCount: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBallotFindLSB: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBallotFindMSB: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformShuffle: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformShuffleXor: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformShuffleUp: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformShuffleDown: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformIAdd: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformFAdd: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformIMul: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformFMul: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformSMin: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformUMin: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformFMin: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformSMax: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformUMax: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformFMax: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBitwiseAnd: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBitwiseOr: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformBitwiseXor: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformLogicalAnd: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformLogicalOr: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformLogicalXor: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformQuadBroadcast: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformQuadSwap: return (struct type_args){ 1, 0 };
   case SpvOpCopyLogical: return (struct type_args){ 1, 0 };
   case SpvOpPtrEqual: return (struct type_args){ 1, 0 };
   case SpvOpPtrNotEqual: return (struct type_args){ 1, 0 };
   case SpvOpPtrDiff: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupBallotKHR: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupFirstInvocationKHR: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAllKHR: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAnyKHR: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAllEqualKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformRotateKHR: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupReadInvocationKHR: return (struct type_args){ 1, 0 };
   case SpvOpConvertUToAccelerationStructureKHR: return (struct type_args){ 1, 0 };
   case SpvOpSDot: return (struct type_args){ 1, 0 };
   case SpvOpUDot: return (struct type_args){ 1, 0 };
   case SpvOpSUDot: return (struct type_args){ 1, 0 };
   case SpvOpSDotAccSat: return (struct type_args){ 1, 0 };
   case SpvOpUDotAccSat: return (struct type_args){ 1, 0 };
   case SpvOpSUDotAccSat: return (struct type_args){ 1, 0 };
   case SpvOpTypeRayQueryKHR: return (struct type_args){ 0, -1 };
   case SpvOpRayQueryProceedKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionTypeKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupIAddNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpGroupFAddNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpGroupFMinNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpGroupUMinNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpGroupSMinNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpGroupFMaxNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpGroupUMaxNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpGroupSMaxNonUniformAMD: return (struct type_args){ 1, 0 };
   case SpvOpFragmentMaskFetchAMD: return (struct type_args){ 1, 0 };
   case SpvOpFragmentFetchAMD: return (struct type_args){ 1, 0 };
   case SpvOpReadClockKHR: return (struct type_args){ 1, 0 };
   case SpvOpImageSampleFootprintNV: return (struct type_args){ 1, 0 };
   case SpvOpGroupNonUniformPartitionNV: return (struct type_args){ 1, 0 };
   case SpvOpReportIntersectionNV: return (struct type_args){ 1, 0 };
   case SpvOpTypeAccelerationStructureNV: return (struct type_args){ 0, -1 };
   case SpvOpTypeCooperativeMatrixNV: return (struct type_args){ 0, -1 };
   case SpvOpCooperativeMatrixLoadNV: return (struct type_args){ 1, 0 };
   case SpvOpCooperativeMatrixMulAddNV: return (struct type_args){ 1, 0 };
   case SpvOpCooperativeMatrixLengthNV: return (struct type_args){ 1, 0 };
   case SpvOpIsHelperInvocationEXT: return (struct type_args){ 1, 0 };
   case SpvOpConvertUToImageNV: return (struct type_args){ 1, 0 };
   case SpvOpConvertUToSamplerNV: return (struct type_args){ 1, 0 };
   case SpvOpConvertImageToUNV: return (struct type_args){ 1, 0 };
   case SpvOpConvertSamplerToUNV: return (struct type_args){ 1, 0 };
   case SpvOpConvertUToSampledImageNV: return (struct type_args){ 1, 0 };
   case SpvOpConvertSampledImageToUNV: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupShuffleINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupShuffleDownINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupShuffleUpINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupShuffleXorINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupBlockReadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupImageBlockReadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupImageMediaBlockReadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpUCountLeadingZerosINTEL: return (struct type_args){ 1, 0 };
   case SpvOpUCountTrailingZerosINTEL: return (struct type_args){ 1, 0 };
   case SpvOpAbsISubINTEL: return (struct type_args){ 1, 0 };
   case SpvOpAbsUSubINTEL: return (struct type_args){ 1, 0 };
   case SpvOpIAddSatINTEL: return (struct type_args){ 1, 0 };
   case SpvOpUAddSatINTEL: return (struct type_args){ 1, 0 };
   case SpvOpIAverageINTEL: return (struct type_args){ 1, 0 };
   case SpvOpUAverageINTEL: return (struct type_args){ 1, 0 };
   case SpvOpIAverageRoundedINTEL: return (struct type_args){ 1, 0 };
   case SpvOpUAverageRoundedINTEL: return (struct type_args){ 1, 0 };
   case SpvOpISubSatINTEL: return (struct type_args){ 1, 0 };
   case SpvOpUSubSatINTEL: return (struct type_args){ 1, 0 };
   case SpvOpIMul32x16INTEL: return (struct type_args){ 1, 0 };
   case SpvOpUMul32x16INTEL: return (struct type_args){ 1, 0 };
   case SpvOpConstantFunctionPointerINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFunctionPointerCallINTEL: return (struct type_args){ 1, 0 };
   case SpvOpAsmTargetINTEL: return (struct type_args){ 1, 0 };
   case SpvOpAsmINTEL: return (struct type_args){ 1, 0 };
   case SpvOpAsmCallINTEL: return (struct type_args){ 1, 0 };
   case SpvOpAtomicFMinEXT: return (struct type_args){ 1, 0 };
   case SpvOpAtomicFMaxEXT: return (struct type_args){ 1, 0 };
   case SpvOpExpectKHR: return (struct type_args){ 1, 0 };
   case SpvOpVmeImageINTEL: return (struct type_args){ 1, 0 };
   case SpvOpTypeVmeImageINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcImePayloadINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcRefPayloadINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcSicPayloadINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcMcePayloadINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcMceResultINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcImeResultINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcImeDualReferenceStreaminINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcRefResultINTEL: return (struct type_args){ 0, -1 };
   case SpvOpTypeAvcSicResultINTEL: return (struct type_args){ 0, -1 };
   case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceConvertToImeResultINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceConvertToRefResultINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceConvertToSicResultINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeInitializeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeSetDualReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeRefWindowSizeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeSetWeightedSadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeConvertToMceResultINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetBorderReachedINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcFmeInitializeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcBmeInitializeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcRefConvertToMceResultINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicInitializeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicConfigureSkcINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicEvaluateIpeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicConvertToMceResultINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: return (struct type_args){ 1, 0 };
   case SpvOpVariableLengthArrayINTEL: return (struct type_args){ 1, 0 };
   case SpvOpSaveMemoryINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatSinCosPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatCastINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatCastFromIntINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatCastToIntINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatAddINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatSubINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatMulINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatDivINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatGTINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatGEINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatLTINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatLEINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatEQINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatRecipINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatRSqrtINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatCbrtINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatHypotINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatSqrtINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatLogINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatLog2INTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatLog10INTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatLog1pINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatExpINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatExp2INTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatExp10INTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatExpm1INTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatSinINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatCosINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatSinCosINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatSinPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatCosPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatASinINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatASinPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatACosINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatACosPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatATanINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatATanPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatATan2INTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatPowINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatPowRINTEL: return (struct type_args){ 1, 0 };
   case SpvOpArbitraryFloatPowNINTEL: return (struct type_args){ 1, 0 };
   case SpvOpAliasDomainDeclINTEL: return (struct type_args){ 0, -1 };
   case SpvOpAliasScopeDeclINTEL: return (struct type_args){ 0, -1 };
   case SpvOpAliasScopeListDeclINTEL: return (struct type_args){ 0, -1 };
   case SpvOpFixedSqrtINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedRecipINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedRsqrtINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedSinINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedCosINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedSinCosINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedSinPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedCosPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedSinCosPiINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedLogINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFixedExpINTEL: return (struct type_args){ 1, 0 };
   case SpvOpPtrCastToCrossWorkgroupINTEL: return (struct type_args){ 1, 0 };
   case SpvOpCrossWorkgroupCastToPtrINTEL: return (struct type_args){ 1, 0 };
   case SpvOpReadPipeBlockingINTEL: return (struct type_args){ 1, 0 };
   case SpvOpWritePipeBlockingINTEL: return (struct type_args){ 1, 0 };
   case SpvOpFPGARegINTEL: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetRayTMinKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetRayFlagsKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionTKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionInstanceIdKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionGeometryIndexKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionBarycentricsKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionFrontFaceKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetWorldRayDirectionKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetWorldRayOriginKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionObjectToWorldKHR: return (struct type_args){ 1, 0 };
   case SpvOpRayQueryGetIntersectionWorldToObjectKHR: return (struct type_args){ 1, 0 };
   case SpvOpAtomicFAddEXT: return (struct type_args){ 1, 0 };
   case SpvOpTypeBufferSurfaceINTEL: return (struct type_args){ 0, -1 };
   case SpvOpGroupIMulKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupFMulKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupBitwiseAndKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupBitwiseOrKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupBitwiseXorKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupLogicalAndKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupLogicalOrKHR: return (struct type_args){ 1, 0 };
   case SpvOpGroupLogicalXorKHR: return (struct type_args){ 1, 0 };
   default: return (struct type_args){ -1, -1 };
   }
}

bool
vtn_set_instruction_result_type(struct vtn_builder *b, SpvOp opcode,
                                const uint32_t *w, unsigned count)
{
   struct type_args args = result_type_args_for_opcode(opcode);

   if (args.res_idx >= 0 && args.res_type_idx >= 0) {
      struct vtn_value *val = vtn_untyped_value(b, w[1 + args.res_idx]);
      val->type = vtn_value(b, w[1 + args.res_type_idx],
                            vtn_value_type_type)->type;
   }

   return true;
}

