1 // Copyright (c) 2016 Google Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef SOURCE_OPT_REFLECT_H_ 16 #define SOURCE_OPT_REFLECT_H_ 17 18 #include "source/latest_version_spirv_header.h" 19 #include "source/opcode.h" 20 21 namespace spvtools { 22 namespace opt { 23 24 // Note that as SPIR-V evolves over time, new opcodes may appear. So the 25 // following functions tend to be outdated and should be updated when SPIR-V 26 // version bumps. 27 IsDebug1Inst(spv::Op opcode)28inline bool IsDebug1Inst(spv::Op opcode) { 29 return (opcode >= spv::Op::OpSourceContinued && 30 opcode <= spv::Op::OpSourceExtension) || 31 opcode == spv::Op::OpString; 32 } IsDebug2Inst(spv::Op opcode)33inline bool IsDebug2Inst(spv::Op opcode) { 34 return opcode == spv::Op::OpName || opcode == spv::Op::OpMemberName; 35 } IsDebug3Inst(spv::Op opcode)36inline bool IsDebug3Inst(spv::Op opcode) { 37 return opcode == spv::Op::OpModuleProcessed; 38 } IsOpLineInst(spv::Op opcode)39inline bool IsOpLineInst(spv::Op opcode) { 40 return opcode == spv::Op::OpLine || opcode == spv::Op::OpNoLine; 41 } IsAnnotationInst(spv::Op opcode)42inline bool IsAnnotationInst(spv::Op opcode) { 43 return (opcode >= spv::Op::OpDecorate && 44 opcode <= spv::Op::OpGroupMemberDecorate) || 45 opcode == spv::Op::OpDecorateId || 46 opcode == spv::Op::OpDecorateStringGOOGLE || 47 opcode == spv::Op::OpMemberDecorateStringGOOGLE; 48 } IsTypeInst(spv::Op opcode)49inline bool IsTypeInst(spv::Op opcode) { 50 return spvOpcodeGeneratesType(opcode) || 51 opcode == spv::Op::OpTypeForwardPointer; 52 } IsConstantInst(spv::Op opcode)53inline bool IsConstantInst(spv::Op opcode) { 54 return spvOpcodeIsConstant(opcode); 55 } IsSpecConstantInst(spv::Op opcode)56inline bool IsSpecConstantInst(spv::Op opcode) { 57 return spvOpcodeIsSpecConstant(opcode); 58 } 59 60 } // namespace opt 61 } // namespace spvtools 62 63 #endif // SOURCE_OPT_REFLECT_H_ 64