LLVMFuzzerTestOneInput:
   16|  1.23k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   17|  1.23k|  glslang::InitializeProcess();
   18|  1.23k|  EShMessages controls;
   19|  1.23k|  glslang::TShader shader(EShLangVertex);
   20|       |
   21|  1.23k|  const char *dataPtr = (const char*)data;
   22|  1.23k|  const int dataSize = (const int)size;
   23|       |
   24|  1.23k|  shader.setStringsWithLengths(&dataPtr, &dataSize, 1);
   25|  1.23k|  shader.setEntryPoint("ep");
   26|       |
   27|       |  // Parse the shader
   28|  1.23k|  shader.parse(GetDefaultResources(), 100, false, controls);
   29|       |
   30|  1.23k|  glslang::FinalizeProcess();
   31|  1.23k|  return 0;
   32|  1.23k|}

_ZN7glslang19TFunctionDeclaratorC2Ev:
   50|   480k|        TFunctionDeclarator() : function(nullptr), body(nullptr) { }

_ZN7glslang11HlslGrammar5parseEv:
   65|    240|{
   66|    240|    advanceToken();
   67|    240|    return acceptCompilationUnit();
   68|    240|}
_ZN7glslang11HlslGrammar8expectedEPKc:
   71|  1.74k|{
   72|  1.74k|    parseContext.error(token.loc, "Expected", syntax, "");
   73|  1.74k|}
_ZN7glslang11HlslGrammar16acceptIdentifierERNS_9HlslTokenE:
   87|  2.04M|{
   88|       |    // IDENTIFIER
   89|  2.04M|    if (peekTokenClass(EHTokIdentifier)) {
  ------------------
  |  Branch (89:9): [True: 480k, False: 1.56M]
  ------------------
   90|   480k|        idToken = token;
   91|   480k|        advanceToken();
   92|   480k|        return true;
   93|   480k|    }
   94|       |
   95|       |    // THIS
   96|       |    // -> maps to the IDENTIFIER spelled with the internal special name for 'this'
   97|  1.56M|    if (peekTokenClass(EHTokThis)) {
  ------------------
  |  Branch (97:9): [True: 0, False: 1.56M]
  ------------------
   98|      0|        idToken = token;
   99|      0|        advanceToken();
  100|      0|        idToken.tokenClass = EHTokIdentifier;
  101|      0|        idToken.string = NewPoolTString(intermediate.implicitThisName);
  102|      0|        return true;
  103|      0|    }
  104|       |
  105|       |    // type that can be used as IDENTIFIER
  106|       |
  107|       |    // Even though "sample", "bool", "float", etc keywords (for types, interpolation modifiers),
  108|       |    // they ARE still accepted as identifiers.  This is not a dense space: e.g, "void" is not a
  109|       |    // valid identifier, nor is "linear".  This code special cases the known instances of this, so
  110|       |    // e.g, "int sample;" or "float float;" is accepted.  Other cases can be added here if needed.
  111|       |
  112|  1.56M|    const char* idString = getTypeString(peek());
  113|  1.56M|    if (idString == nullptr)
  ------------------
  |  Branch (113:9): [True: 1.56M, False: 1]
  ------------------
  114|  1.56M|        return false;
  115|       |
  116|      1|    token.string     = NewPoolTString(idString);
  117|      1|    token.tokenClass = EHTokIdentifier;
  118|      1|    idToken = token;
  119|      1|    typeIdentifiers = true;
  120|       |
  121|      1|    advanceToken();
  122|       |
  123|      1|    return true;
  124|  1.56M|}
_ZN7glslang11HlslGrammar21acceptCompilationUnitEv:
  130|    240|{
  131|    240|    if (! acceptDeclarationList(unitNode))
  ------------------
  |  Branch (131:9): [True: 29, False: 211]
  ------------------
  132|     29|        return false;
  133|       |
  134|    211|    if (! peekTokenClass(EHTokNone))
  ------------------
  |  Branch (134:9): [True: 0, False: 211]
  ------------------
  135|      0|        return false;
  136|       |
  137|       |    // set root of AST
  138|    211|    if (unitNode && !unitNode->getAsAggregate())
  ------------------
  |  Branch (138:9): [True: 0, False: 211]
  |  Branch (138:21): [True: 0, False: 0]
  ------------------
  139|      0|        unitNode = intermediate.growAggregate(nullptr, unitNode);
  140|    211|    intermediate.setTreeRoot(unitNode);
  141|       |
  142|    211|    return true;
  143|    211|}
_ZN7glslang11HlslGrammar21acceptDeclarationListERP11TIntermNode:
  156|    240|{
  157|   480k|    do {
  158|       |        // HLSL allows extra semicolons between global declarations
  159|   480k|        do { } while (acceptTokenClass(EHTokSemicolon));
  ------------------
  |  Branch (159:23): [True: 0, False: 480k]
  ------------------
  160|       |
  161|       |        // EOF or RIGHT_BRACE
  162|   480k|        if (peekTokenClass(EHTokNone) || peekTokenClass(EHTokRightBrace))
  ------------------
  |  Branch (162:13): [True: 211, False: 480k]
  |  Branch (162:42): [True: 0, False: 480k]
  ------------------
  163|    211|            return true;
  164|       |
  165|       |        // declaration
  166|   480k|        if (! acceptDeclaration(nodeList)) {
  ------------------
  |  Branch (166:13): [True: 29, False: 480k]
  ------------------
  167|     29|            expected("declaration");
  168|     29|            return false;
  169|     29|        }
  170|   480k|    } while (true);
  ------------------
  |  Branch (170:14): [True: 480k, Folded]
  ------------------
  171|       |
  172|      0|    return true;
  173|    240|}
_ZN7glslang11HlslGrammar18acceptSamplerStateEv:
  193|      5|{
  194|       |    // TODO: this should be genericized to accept a list of valid tokens and
  195|       |    // return token/value pairs.  Presently it is specific to texture values.
  196|       |
  197|      5|    if (! acceptTokenClass(EHTokLeftBrace))
  ------------------
  |  Branch (197:9): [True: 5, False: 0]
  ------------------
  198|      5|        return true;
  199|       |
  200|      0|    parseContext.warn(token.loc, "unimplemented", "immediate sampler state", "");
  201|       |
  202|      0|    do {
  203|       |        // read state name
  204|      0|        HlslToken state;
  205|      0|        if (! acceptIdentifier(state))
  ------------------
  |  Branch (205:13): [True: 0, False: 0]
  ------------------
  206|      0|            break;  // end of list
  207|       |
  208|       |        // FXC accepts any case
  209|      0|        TString stateName = *state.string;
  210|      0|        std::transform(stateName.begin(), stateName.end(), stateName.begin(), ::tolower);
  211|       |
  212|      0|        if (! acceptTokenClass(EHTokAssign)) {
  ------------------
  |  Branch (212:13): [True: 0, False: 0]
  ------------------
  213|      0|            expected("assign");
  214|      0|            return false;
  215|      0|        }
  216|       |
  217|      0|        if (stateName == "minlod" || stateName == "maxlod") {
  ------------------
  |  Branch (217:13): [True: 0, False: 0]
  |  Branch (217:38): [True: 0, False: 0]
  ------------------
  218|      0|            if (! peekTokenClass(EHTokIntConstant)) {
  ------------------
  |  Branch (218:17): [True: 0, False: 0]
  ------------------
  219|      0|                expected("integer");
  220|      0|                return false;
  221|      0|            }
  222|       |
  223|      0|            TIntermTyped* lod = nullptr;
  224|      0|            if (! acceptLiteral(lod))  // should never fail, since we just looked for an integer
  ------------------
  |  Branch (224:17): [True: 0, False: 0]
  ------------------
  225|      0|                return false;
  226|      0|        } else if (stateName == "maxanisotropy") {
  ------------------
  |  Branch (226:20): [True: 0, False: 0]
  ------------------
  227|      0|            if (! peekTokenClass(EHTokIntConstant)) {
  ------------------
  |  Branch (227:17): [True: 0, False: 0]
  ------------------
  228|      0|                expected("integer");
  229|      0|                return false;
  230|      0|            }
  231|       |
  232|      0|            TIntermTyped* maxAnisotropy = nullptr;
  233|      0|            if (! acceptLiteral(maxAnisotropy))  // should never fail, since we just looked for an integer
  ------------------
  |  Branch (233:17): [True: 0, False: 0]
  ------------------
  234|      0|                return false;
  235|      0|        } else if (stateName == "filter") {
  ------------------
  |  Branch (235:20): [True: 0, False: 0]
  ------------------
  236|      0|            HlslToken filterMode;
  237|      0|            if (! acceptIdentifier(filterMode)) {
  ------------------
  |  Branch (237:17): [True: 0, False: 0]
  ------------------
  238|      0|                expected("filter mode");
  239|      0|                return false;
  240|      0|            }
  241|      0|        } else if (stateName == "addressu" || stateName == "addressv" || stateName == "addressw") {
  ------------------
  |  Branch (241:20): [True: 0, False: 0]
  |  Branch (241:47): [True: 0, False: 0]
  |  Branch (241:74): [True: 0, False: 0]
  ------------------
  242|      0|            HlslToken addrMode;
  243|      0|            if (! acceptIdentifier(addrMode)) {
  ------------------
  |  Branch (243:17): [True: 0, False: 0]
  ------------------
  244|      0|                expected("texture address mode");
  245|      0|                return false;
  246|      0|            }
  247|      0|        } else if (stateName == "miplodbias") {
  ------------------
  |  Branch (247:20): [True: 0, False: 0]
  ------------------
  248|      0|            TIntermTyped* lodBias = nullptr;
  249|      0|            if (! acceptLiteral(lodBias)) {
  ------------------
  |  Branch (249:17): [True: 0, False: 0]
  ------------------
  250|      0|                expected("lod bias");
  251|      0|                return false;
  252|      0|            }
  253|      0|        } else if (stateName == "bordercolor") {
  ------------------
  |  Branch (253:20): [True: 0, False: 0]
  ------------------
  254|      0|            return false;
  255|      0|        } else {
  256|      0|            expected("texture state");
  257|      0|            return false;
  258|      0|        }
  259|       |
  260|       |        // SEMICOLON
  261|      0|        if (! acceptTokenClass(EHTokSemicolon)) {
  ------------------
  |  Branch (261:13): [True: 0, False: 0]
  ------------------
  262|      0|            expected("semicolon");
  263|      0|            return false;
  264|      0|        }
  265|      0|    } while (true);
  ------------------
  |  Branch (265:14): [True: 0, Folded]
  ------------------
  266|       |
  267|      0|    if (! acceptTokenClass(EHTokRightBrace))
  ------------------
  |  Branch (267:9): [True: 0, False: 0]
  ------------------
  268|      0|        return false;
  269|       |
  270|      0|    return true;
  271|      0|}
_ZN7glslang11HlslGrammar17acceptDeclarationERP11TIntermNode:
  334|   480k|{
  335|       |    // NAMESPACE IDENTIFIER LEFT_BRACE declaration_list RIGHT_BRACE
  336|   480k|    if (acceptTokenClass(EHTokNamespace)) {
  ------------------
  |  Branch (336:9): [True: 0, False: 480k]
  ------------------
  337|      0|        HlslToken namespaceToken;
  338|      0|        if (!acceptIdentifier(namespaceToken)) {
  ------------------
  |  Branch (338:13): [True: 0, False: 0]
  ------------------
  339|      0|            expected("namespace name");
  340|      0|            return false;
  341|      0|        }
  342|      0|        parseContext.pushNamespace(*namespaceToken.string);
  343|      0|        if (!acceptTokenClass(EHTokLeftBrace)) {
  ------------------
  |  Branch (343:13): [True: 0, False: 0]
  ------------------
  344|      0|            expected("{");
  345|      0|            return false;
  346|      0|        }
  347|      0|        if (!acceptDeclarationList(nodeList)) {
  ------------------
  |  Branch (347:13): [True: 0, False: 0]
  ------------------
  348|      0|            expected("declaration list");
  349|      0|            return false;
  350|      0|        }
  351|      0|        if (!acceptTokenClass(EHTokRightBrace)) {
  ------------------
  |  Branch (351:13): [True: 0, False: 0]
  ------------------
  352|      0|            expected("}");
  353|      0|            return false;
  354|      0|        }
  355|      0|        parseContext.popNamespace();
  356|      0|        return true;
  357|      0|    }
  358|       |
  359|   480k|    bool declarator_list = false; // true when processing comma separation
  360|       |
  361|       |    // attributes
  362|   480k|    TFunctionDeclarator declarator;
  363|   480k|    acceptAttributes(declarator.attributes);
  364|       |
  365|       |    // typedef
  366|   480k|    bool typedefDecl = acceptTokenClass(EHTokTypedef);
  367|       |
  368|   480k|    TType declaredType;
  369|       |
  370|       |    // DX9 sampler declaration use a different syntax
  371|       |    // DX9 shaders need to run through HLSL compiler (fxc) via a back compat mode, it isn't going to
  372|       |    // be possible to simultaneously compile D3D10+ style shaders and DX9 shaders. If we want to compile DX9
  373|       |    // HLSL shaders, this will have to be a master level switch
  374|       |    // As such, the sampler keyword in D3D10+ turns into an automatic sampler type, and is commonly used
  375|       |    // For that reason, this line is commented out
  376|       |    // if (acceptSamplerDeclarationDX9(declaredType))
  377|       |    //     return true;
  378|       |
  379|   480k|    bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
  ------------------
  |  Branch (379:31): [True: 0, False: 480k]
  |  Branch (379:63): [True: 0, False: 480k]
  ------------------
  380|       |    // fully_specified_type
  381|   480k|    if (! acceptFullySpecifiedType(declaredType, nodeList, declarator.attributes, forbidDeclarators))
  ------------------
  |  Branch (381:9): [True: 23, False: 480k]
  ------------------
  382|     23|        return false;
  383|       |
  384|       |    // cbuffer and tbuffer end with the closing '}'.
  385|       |    // No semicolon is included.
  386|   480k|    if (forbidDeclarators)
  ------------------
  |  Branch (386:9): [True: 0, False: 480k]
  ------------------
  387|      0|        return true;
  388|       |
  389|       |    // Check if there are invalid in/out qualifiers
  390|   480k|    switch (declaredType.getQualifier().storage) {
  391|      0|    case EvqIn:
  ------------------
  |  Branch (391:5): [True: 0, False: 480k]
  ------------------
  392|      1|    case EvqOut:
  ------------------
  |  Branch (392:5): [True: 1, False: 480k]
  ------------------
  393|      1|    case EvqInOut:
  ------------------
  |  Branch (393:5): [True: 0, False: 480k]
  ------------------
  394|      1|        parseContext.error(token.loc, "in/out qualifiers are only valid on parameters", token.getCStrOrEmpty(), "");
  395|      1|        break;
  396|   480k|    default:
  ------------------
  |  Branch (396:5): [True: 480k, False: 1]
  ------------------
  397|   480k|        break;
  398|   480k|    }
  399|       |
  400|       |    // declarator_list
  401|       |    //    : declarator
  402|       |    //         : identifier
  403|   480k|    HlslToken idToken;
  404|   480k|    TIntermAggregate* initializers = nullptr;
  405|   960k|    while (acceptIdentifier(idToken)) {
  ------------------
  |  Branch (405:12): [True: 480k, False: 480k]
  ------------------
  406|   480k|        TString *fullName = idToken.string;
  407|   480k|        if (parseContext.symbolTable.atGlobalLevel())
  ------------------
  |  Branch (407:13): [True: 480k, False: 0]
  ------------------
  408|   480k|            parseContext.getFullNamespaceName(fullName);
  409|   480k|        if (peekTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (409:13): [True: 480k, False: 12]
  ------------------
  410|       |            // looks like function parameters
  411|       |
  412|       |            // merge in the attributes into the return type
  413|   480k|            parseContext.transferTypeAttributes(token.loc, declarator.attributes, declaredType, true);
  414|       |
  415|       |            // Potentially rename shader entry point function.  No-op most of the time.
  416|   480k|            parseContext.renameShaderFunction(fullName);
  417|       |
  418|       |            // function_parameters
  419|   480k|            declarator.function = new TFunction(fullName, declaredType);
  420|   480k|            if (!acceptFunctionParameters(*declarator.function)) {
  ------------------
  |  Branch (420:17): [True: 0, False: 480k]
  ------------------
  421|      0|                expected("function parameter list");
  422|      0|                return false;
  423|      0|            }
  424|       |
  425|       |            // post_decls
  426|   480k|            acceptPostDecls(declarator.function->getWritableType().getQualifier());
  427|       |
  428|       |            // compound_statement (function body definition) or just a prototype?
  429|   480k|            declarator.loc = token.loc;
  430|   480k|            if (peekTokenClass(EHTokLeftBrace)) {
  ------------------
  |  Branch (430:17): [True: 2, False: 480k]
  ------------------
  431|      2|                if (declarator_list)
  ------------------
  |  Branch (431:21): [True: 0, False: 2]
  ------------------
  432|      0|                    parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", "");
  433|      2|                if (typedefDecl)
  ------------------
  |  Branch (433:21): [True: 0, False: 2]
  ------------------
  434|      0|                    parseContext.error(idToken.loc, "function body can't be in a typedef", "{", "");
  435|      2|                return acceptFunctionDefinition(declarator, nodeList, nullptr);
  436|   480k|            } else {
  437|   480k|                if (typedefDecl)
  ------------------
  |  Branch (437:21): [True: 0, False: 480k]
  ------------------
  438|      0|                    parseContext.error(idToken.loc, "function typedefs not implemented", "{", "");
  439|   480k|                parseContext.handleFunctionDeclarator(declarator.loc, *declarator.function, true);
  440|   480k|            }
  441|   480k|        } else {
  442|       |            // A variable declaration.
  443|       |
  444|       |            // merge in the attributes, the first time around, into the shared type
  445|     12|            if (! declarator_list)
  ------------------
  |  Branch (445:17): [True: 10, False: 2]
  ------------------
  446|     10|                parseContext.transferTypeAttributes(token.loc, declarator.attributes, declaredType);
  447|       |
  448|       |            // Fix the storage qualifier if it's a global.
  449|     12|            if (declaredType.getQualifier().storage == EvqTemporary && parseContext.symbolTable.atGlobalLevel())
  ------------------
  |  Branch (449:17): [True: 8, False: 4]
  |  Branch (449:72): [True: 8, False: 0]
  ------------------
  450|      8|                declaredType.getQualifier().storage = EvqUniform;
  451|       |
  452|       |            // recognize array_specifier
  453|     12|            TArraySizes* arraySizes = nullptr;
  454|     12|            acceptArraySpecifier(arraySizes);
  455|       |
  456|       |            // We can handle multiple variables per type declaration, so
  457|       |            // the number of types can expand when arrayness is different.
  458|     12|            TType variableType;
  459|     12|            variableType.shallowCopy(declaredType);
  460|       |
  461|       |            // In the most general case, arrayness is potentially coming both from the
  462|       |            // declared type and from the variable: "int[] a[];" or just one or the other.
  463|       |            // Merge it all to the variableType, so all arrayness is part of the variableType.
  464|     12|            variableType.transferArraySizes(arraySizes);
  465|     12|            variableType.copyArrayInnerSizes(declaredType.getArraySizes());
  466|       |
  467|       |            // samplers accept immediate sampler state
  468|     12|            if (variableType.getBasicType() == EbtSampler) {
  ------------------
  |  Branch (468:17): [True: 5, False: 7]
  ------------------
  469|      5|                if (! acceptSamplerState())
  ------------------
  |  Branch (469:21): [True: 0, False: 5]
  ------------------
  470|      0|                    return false;
  471|      5|            }
  472|       |
  473|       |            // post_decls
  474|     12|            acceptPostDecls(variableType.getQualifier());
  475|       |
  476|       |            // EQUAL assignment_expression
  477|     12|            TIntermTyped* expressionNode = nullptr;
  478|     12|            if (acceptTokenClass(EHTokAssign)) {
  ------------------
  |  Branch (478:17): [True: 0, False: 12]
  ------------------
  479|      0|                if (typedefDecl)
  ------------------
  |  Branch (479:21): [True: 0, False: 0]
  ------------------
  480|      0|                    parseContext.error(idToken.loc, "can't have an initializer", "typedef", "");
  481|      0|                if (! acceptAssignmentExpression(expressionNode)) {
  ------------------
  |  Branch (481:21): [True: 0, False: 0]
  ------------------
  482|      0|                    expected("initializer");
  483|      0|                    return false;
  484|      0|                }
  485|      0|            }
  486|       |
  487|       |            // TODO: things scoped within an annotation need their own name space;
  488|       |            // TODO: non-constant strings are not yet handled.
  489|     12|            if (!(variableType.getBasicType() == EbtString && !variableType.getQualifier().isConstant()) &&
  ------------------
  |  Branch (489:19): [True: 0, False: 12]
  |  Branch (489:63): [True: 0, False: 0]
  ------------------
  490|     12|                parseContext.getAnnotationNestingLevel() == 0) {
  ------------------
  |  Branch (490:17): [True: 12, False: 0]
  ------------------
  491|     12|                if (typedefDecl)
  ------------------
  |  Branch (491:21): [True: 0, False: 12]
  ------------------
  492|      0|                    parseContext.declareTypedef(idToken.loc, *fullName, variableType);
  493|     12|                else if (variableType.getBasicType() == EbtBlock) {
  ------------------
  |  Branch (493:26): [True: 0, False: 12]
  ------------------
  494|      0|                    if (expressionNode)
  ------------------
  |  Branch (494:25): [True: 0, False: 0]
  ------------------
  495|      0|                        parseContext.error(idToken.loc, "buffer aliasing not yet supported", "block initializer", "");
  496|      0|                    parseContext.declareBlock(idToken.loc, variableType, fullName);
  497|      0|                    parseContext.declareStructBufferCounter(idToken.loc, variableType, *fullName);
  498|     12|                } else {
  499|     12|                    if (variableType.getQualifier().storage == EvqUniform && ! variableType.containsOpaque()) {
  ------------------
  |  Branch (499:25): [True: 11, False: 1]
  |  Branch (499:78): [True: 6, False: 5]
  ------------------
  500|       |                        // this isn't really an individual variable, but a member of the $Global buffer
  501|      6|                        parseContext.growGlobalUniformBlock(idToken.loc, variableType, *fullName);
  502|      6|                    } else {
  503|       |                        // Declare the variable and add any initializer code to the AST.
  504|       |                        // The top-level node is always made into an aggregate, as that's
  505|       |                        // historically how the AST has been.
  506|      6|                        initializers = intermediate.growAggregate(initializers, 
  507|      6|                            parseContext.declareVariable(idToken.loc, *fullName, variableType, expressionNode),
  508|      6|                            idToken.loc);
  509|      6|                    }
  510|     12|                }
  511|     12|            }
  512|     12|        }
  513|       |
  514|       |        // COMMA
  515|   480k|        if (acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (515:13): [True: 2, False: 480k]
  ------------------
  516|      2|            declarator_list = true;
  517|   480k|    }
  518|       |
  519|       |    // The top-level initializer node is a sequence.
  520|   480k|    if (initializers != nullptr)
  ------------------
  |  Branch (520:9): [True: 0, False: 480k]
  ------------------
  521|      0|        initializers->setOperator(EOpSequence);
  522|       |
  523|       |    // if we have a locally scoped static, it needs a globally scoped initializer
  524|   480k|    if (declaredType.getQualifier().storage == EvqGlobal && !parseContext.symbolTable.atGlobalLevel()) {
  ------------------
  |  Branch (524:9): [True: 0, False: 480k]
  |  Branch (524:61): [True: 0, False: 0]
  ------------------
  525|      0|        unitNode = intermediate.growAggregate(unitNode, initializers, idToken.loc);
  526|   480k|    } else {
  527|       |        // Add the initializers' aggregate to the nodeList we were handed.
  528|   480k|        if (nodeList)
  ------------------
  |  Branch (528:13): [True: 0, False: 480k]
  ------------------
  529|      0|            nodeList = intermediate.growAggregate(nodeList, initializers);
  530|   480k|        else
  531|   480k|            nodeList = initializers;
  532|   480k|    }
  533|       |
  534|       |    // SEMICOLON
  535|   480k|    if (! acceptTokenClass(EHTokSemicolon)) {
  ------------------
  |  Branch (535:9): [True: 6, False: 480k]
  ------------------
  536|       |        // This may have been a false detection of what appeared to be a declaration, but
  537|       |        // was actually an assignment such as "float = 4", where "float" is an identifier.
  538|       |        // We put the token back to let further parsing happen for cases where that may
  539|       |        // happen.  This errors on the side of caution, and mostly triggers the error.
  540|      6|        if (peek() == EHTokAssign || peek() == EHTokLeftBracket || peek() == EHTokDot || peek() == EHTokComma)
  ------------------
  |  Branch (540:13): [True: 0, False: 6]
  |  Branch (540:38): [True: 0, False: 6]
  |  Branch (540:68): [True: 0, False: 6]
  |  Branch (540:90): [True: 0, False: 6]
  ------------------
  541|      0|            recedeToken();
  542|      6|        else
  543|      6|            expected(";");
  544|      6|        return false;
  545|      6|    }
  546|       |
  547|   480k|    return true;
  548|   480k|}
_ZN7glslang11HlslGrammar24acceptFullySpecifiedTypeERNS_5TTypeERKNS_5TListINS_14TAttributeArgsEEE:
  603|  1.07M|{
  604|  1.07M|    TIntermNode* nodeList = nullptr;
  605|  1.07M|    return acceptFullySpecifiedType(type, nodeList, attributes);
  606|  1.07M|}
_ZN7glslang11HlslGrammar24acceptFullySpecifiedTypeERNS_5TTypeERP11TIntermNodeRKNS_5TListINS_14TAttributeArgsEEEb:
  608|  1.55M|{
  609|       |    // type_qualifier
  610|  1.55M|    TQualifier qualifier;
  611|  1.55M|    qualifier.clear();
  612|  1.55M|    if (! acceptPreQualifier(qualifier))
  ------------------
  |  Branch (612:9): [True: 0, False: 1.55M]
  ------------------
  613|      0|        return false;
  614|  1.55M|    TSourceLoc loc = token.loc;
  615|       |
  616|       |    // type_specifier
  617|  1.55M|    if (! acceptType(type, nodeList)) {
  ------------------
  |  Branch (617:9): [True: 25, False: 1.55M]
  ------------------
  618|       |        // If this is not a type, we may have inadvertently gone down a wrong path
  619|       |        // by parsing "sample", which can be treated like either an identifier or a
  620|       |        // qualifier.  Back it out, if we did.
  621|     25|        if (qualifier.sample)
  ------------------
  |  Branch (621:13): [True: 0, False: 25]
  ------------------
  622|      0|            recedeToken();
  623|       |
  624|     25|        return false;
  625|     25|    }
  626|       |
  627|       |    // type_qualifier
  628|  1.55M|    if (! acceptPostQualifier(qualifier))
  ------------------
  |  Branch (628:9): [True: 0, False: 1.55M]
  ------------------
  629|      0|       return false;
  630|       |
  631|  1.55M|    if (type.getBasicType() == EbtBlock) {
  ------------------
  |  Branch (631:9): [True: 0, False: 1.55M]
  ------------------
  632|       |        // the type was a block, which set some parts of the qualifier
  633|      0|        parseContext.mergeQualifiers(type.getQualifier(), qualifier);
  634|       |    
  635|       |        // merge in the attributes
  636|      0|        parseContext.transferTypeAttributes(token.loc, attributes, type);
  637|       |
  638|       |        // further, it can create an anonymous instance of the block
  639|       |        // (cbuffer and tbuffer don't consume the next identifier, and
  640|       |        // should set forbidDeclarators)
  641|      0|        if (forbidDeclarators || peek() != EHTokIdentifier)
  ------------------
  |  Branch (641:13): [True: 0, False: 0]
  |  Branch (641:34): [True: 0, False: 0]
  ------------------
  642|      0|            parseContext.declareBlock(loc, type);
  643|  1.55M|    } else {
  644|       |        // Some qualifiers are set when parsing the type.  Merge those with
  645|       |        // whatever comes from acceptPreQualifier and acceptPostQualifier.
  646|  1.55M|        assert(qualifier.layoutFormat == ElfNone);
  647|       |
  648|  1.55M|        qualifier.layoutFormat = type.getQualifier().layoutFormat;
  649|  1.55M|        qualifier.precision    = type.getQualifier().precision;
  650|       |
  651|  1.55M|        if (type.getQualifier().storage == EvqOut ||
  ------------------
  |  Branch (651:13): [True: 0, False: 1.55M]
  ------------------
  652|  1.55M|            type.getQualifier().storage == EvqBuffer) {
  ------------------
  |  Branch (652:13): [True: 0, False: 1.55M]
  ------------------
  653|      0|            qualifier.storage      = type.getQualifier().storage;
  654|      0|            qualifier.readonly     = type.getQualifier().readonly;
  655|      0|        }
  656|       |
  657|  1.55M|        if (type.isBuiltIn())
  ------------------
  |  Branch (657:13): [True: 0, False: 1.55M]
  ------------------
  658|      0|            qualifier.builtIn = type.getQualifier().builtIn;
  659|       |
  660|  1.55M|        type.getQualifier() = qualifier;
  661|  1.55M|    }
  662|       |
  663|  1.55M|    return true;
  664|  1.55M|}
_ZN7glslang11HlslGrammar18acceptPreQualifierERNS_10TQualifierE:
  672|  1.55M|{
  673|  1.66M|    do {
  674|  1.66M|        switch (peek()) {
  675|      0|        case EHTokStatic:
  ------------------
  |  Branch (675:9): [True: 0, False: 1.66M]
  ------------------
  676|      0|            qualifier.storage = EvqGlobal;
  677|      0|            break;
  678|      0|        case EHTokExtern:
  ------------------
  |  Branch (678:9): [True: 0, False: 1.66M]
  ------------------
  679|       |            // TODO: no meaning in glslang?
  680|      0|            break;
  681|      0|        case EHTokShared:
  ------------------
  |  Branch (681:9): [True: 0, False: 1.66M]
  ------------------
  682|       |            // TODO: hint
  683|      0|            break;
  684|      0|        case EHTokGroupShared:
  ------------------
  |  Branch (684:9): [True: 0, False: 1.66M]
  ------------------
  685|      0|            qualifier.storage = EvqShared;
  686|      0|            break;
  687|      0|        case EHTokUniform:
  ------------------
  |  Branch (687:9): [True: 0, False: 1.66M]
  ------------------
  688|      0|            qualifier.storage = EvqUniform;
  689|      0|            break;
  690|      1|        case EHTokConst:
  ------------------
  |  Branch (690:9): [True: 1, False: 1.66M]
  ------------------
  691|      1|            qualifier.storage = EvqConst;
  692|      1|            break;
  693|      0|        case EHTokVolatile:
  ------------------
  |  Branch (693:9): [True: 0, False: 1.66M]
  ------------------
  694|      0|            qualifier.volatil = true;
  695|      0|            break;
  696|      0|        case EHTokLinear:
  ------------------
  |  Branch (696:9): [True: 0, False: 1.66M]
  ------------------
  697|      0|            qualifier.smooth = true;
  698|      0|            break;
  699|      0|        case EHTokCentroid:
  ------------------
  |  Branch (699:9): [True: 0, False: 1.66M]
  ------------------
  700|      0|            qualifier.centroid = true;
  701|      0|            break;
  702|      0|        case EHTokNointerpolation:
  ------------------
  |  Branch (702:9): [True: 0, False: 1.66M]
  ------------------
  703|      0|            qualifier.flat = true;
  704|      0|            break;
  705|      0|        case EHTokNoperspective:
  ------------------
  |  Branch (705:9): [True: 0, False: 1.66M]
  ------------------
  706|      0|            qualifier.nopersp = true;
  707|      0|            break;
  708|      0|        case EHTokSample:
  ------------------
  |  Branch (708:9): [True: 0, False: 1.66M]
  ------------------
  709|      0|            qualifier.sample = true;
  710|      0|            break;
  711|      0|        case EHTokRowMajor:
  ------------------
  |  Branch (711:9): [True: 0, False: 1.66M]
  ------------------
  712|      0|            qualifier.layoutMatrix = ElmColumnMajor;
  713|      0|            break;
  714|      0|        case EHTokColumnMajor:
  ------------------
  |  Branch (714:9): [True: 0, False: 1.66M]
  ------------------
  715|      0|            qualifier.layoutMatrix = ElmRowMajor;
  716|      0|            break;
  717|      0|        case EHTokPrecise:
  ------------------
  |  Branch (717:9): [True: 0, False: 1.66M]
  ------------------
  718|      0|            qualifier.noContraction = true;
  719|      0|            break;
  720|      0|        case EHTokIn:
  ------------------
  |  Branch (720:9): [True: 0, False: 1.66M]
  ------------------
  721|      0|            if (qualifier.storage != EvqUniform) {
  ------------------
  |  Branch (721:17): [True: 0, False: 0]
  ------------------
  722|      0|                qualifier.storage = (qualifier.storage == EvqOut) ? EvqInOut : EvqIn;
  ------------------
  |  Branch (722:37): [True: 0, False: 0]
  ------------------
  723|      0|            }
  724|      0|            break;
  725|   104k|        case EHTokOut:
  ------------------
  |  Branch (725:9): [True: 104k, False: 1.55M]
  ------------------
  726|   104k|            qualifier.storage = (qualifier.storage == EvqIn) ? EvqInOut : EvqOut;
  ------------------
  |  Branch (726:33): [True: 1, False: 104k]
  ------------------
  727|   104k|            break;
  728|      0|        case EHTokInOut:
  ------------------
  |  Branch (728:9): [True: 0, False: 1.66M]
  ------------------
  729|      0|            qualifier.storage = EvqInOut;
  730|      0|            break;
  731|      0|        case EHTokLayout:
  ------------------
  |  Branch (731:9): [True: 0, False: 1.66M]
  ------------------
  732|      0|            if (! acceptLayoutQualifierList(qualifier))
  ------------------
  |  Branch (732:17): [True: 0, False: 0]
  ------------------
  733|      0|                return false;
  734|      0|            continue;
  735|      0|        case EHTokGloballyCoherent:
  ------------------
  |  Branch (735:9): [True: 0, False: 1.66M]
  ------------------
  736|      0|            qualifier.coherent = true;
  737|      0|            break;
  738|      0|        case EHTokInline:
  ------------------
  |  Branch (738:9): [True: 0, False: 1.66M]
  ------------------
  739|       |            // TODO: map this to SPIR-V function control
  740|      0|            break;
  741|       |
  742|       |        // GS geometries: these are specified on stage input variables, and are an error (not verified here)
  743|       |        // for output variables.
  744|      0|        case EHTokPoint:
  ------------------
  |  Branch (744:9): [True: 0, False: 1.66M]
  ------------------
  745|      0|            qualifier.storage = EvqIn;
  746|      0|            if (!parseContext.handleInputGeometry(token.loc, ElgPoints))
  ------------------
  |  Branch (746:17): [True: 0, False: 0]
  ------------------
  747|      0|                return false;
  748|      0|            break;
  749|      0|        case EHTokLine:
  ------------------
  |  Branch (749:9): [True: 0, False: 1.66M]
  ------------------
  750|      0|            qualifier.storage = EvqIn;
  751|      0|            if (!parseContext.handleInputGeometry(token.loc, ElgLines))
  ------------------
  |  Branch (751:17): [True: 0, False: 0]
  ------------------
  752|      0|                return false;
  753|      0|            break;
  754|      0|        case EHTokTriangle:
  ------------------
  |  Branch (754:9): [True: 0, False: 1.66M]
  ------------------
  755|      0|            qualifier.storage = EvqIn;
  756|      0|            if (!parseContext.handleInputGeometry(token.loc, ElgTriangles))
  ------------------
  |  Branch (756:17): [True: 0, False: 0]
  ------------------
  757|      0|                return false;
  758|      0|            break;
  759|      1|        case EHTokLineAdj:
  ------------------
  |  Branch (759:9): [True: 1, False: 1.66M]
  ------------------
  760|      1|            qualifier.storage = EvqIn;
  761|      1|            if (!parseContext.handleInputGeometry(token.loc, ElgLinesAdjacency))
  ------------------
  |  Branch (761:17): [True: 0, False: 1]
  ------------------
  762|      0|                return false;
  763|      1|            break;
  764|      1|        case EHTokTriangleAdj:
  ------------------
  |  Branch (764:9): [True: 0, False: 1.66M]
  ------------------
  765|      0|            qualifier.storage = EvqIn;
  766|      0|            if (!parseContext.handleInputGeometry(token.loc, ElgTrianglesAdjacency))
  ------------------
  |  Branch (766:17): [True: 0, False: 0]
  ------------------
  767|      0|                return false;
  768|      0|            break;
  769|       |
  770|  1.55M|        default:
  ------------------
  |  Branch (770:9): [True: 1.55M, False: 104k]
  ------------------
  771|  1.55M|            return true;
  772|  1.66M|        }
  773|   104k|        advanceToken();
  774|   104k|    } while (true);
  ------------------
  |  Branch (774:14): [True: 104k, Folded]
  ------------------
  775|  1.55M|}
_ZN7glslang11HlslGrammar19acceptPostQualifierERNS_10TQualifierE:
  783|  1.55M|{
  784|  1.55M|    do {
  785|  1.55M|        switch (peek()) {
  786|      0|        case EHTokConst:
  ------------------
  |  Branch (786:9): [True: 0, False: 1.55M]
  ------------------
  787|      0|            qualifier.storage = EvqConst;
  788|      0|            break;
  789|  1.55M|        default:
  ------------------
  |  Branch (789:9): [True: 1.55M, False: 0]
  ------------------
  790|  1.55M|            return true;
  791|  1.55M|        }
  792|      0|        advanceToken();
  793|      0|    } while (true);
  ------------------
  |  Branch (793:14): [True: 0, Folded]
  ------------------
  794|  1.55M|}
_ZN7glslang11HlslGrammar22acceptSubpassInputTypeERNS_5TTypeE:
 1172|  2.88k|{
 1173|       |    // read subpass type
 1174|  2.88k|    const EHlslTokenClass subpassInputType = peek();
 1175|       |
 1176|  2.88k|    bool multisample;
 1177|       |
 1178|  2.88k|    switch (subpassInputType) {
 1179|  1.44k|    case EHTokSubpassInput:   multisample = false; break;
  ------------------
  |  Branch (1179:5): [True: 1.44k, False: 1.44k]
  ------------------
 1180|  1.44k|    case EHTokSubpassInputMS: multisample = true;  break;
  ------------------
  |  Branch (1180:5): [True: 1.44k, False: 1.44k]
  ------------------
 1181|      0|    default:
  ------------------
  |  Branch (1181:5): [True: 0, False: 2.88k]
  ------------------
 1182|      0|        return false;  // not a subpass input declaration
 1183|  2.88k|    }
 1184|       |
 1185|  2.88k|    advanceToken();  // consume the sampler type keyword
 1186|       |
 1187|  2.88k|    TType subpassType(EbtFloat, EvqUniform, 4); // default type is float4
 1188|       |
 1189|  2.88k|    if (acceptTokenClass(EHTokLeftAngle)) {
  ------------------
  |  Branch (1189:9): [True: 2.88k, False: 0]
  ------------------
 1190|  2.88k|        if (! acceptType(subpassType)) {
  ------------------
  |  Branch (1190:13): [True: 0, False: 2.88k]
  ------------------
 1191|      0|            expected("scalar or vector type");
 1192|      0|            return false;
 1193|      0|        }
 1194|       |
 1195|  2.88k|        const TBasicType basicRetType = subpassType.getBasicType() ;
 1196|       |
 1197|  2.88k|        switch (basicRetType) {
 1198|    960|        case EbtFloat:
  ------------------
  |  Branch (1198:9): [True: 960, False: 1.92k]
  ------------------
 1199|  1.92k|        case EbtUint:
  ------------------
  |  Branch (1199:9): [True: 960, False: 1.92k]
  ------------------
 1200|  2.88k|        case EbtInt:
  ------------------
  |  Branch (1200:9): [True: 960, False: 1.92k]
  ------------------
 1201|  2.88k|        case EbtStruct:
  ------------------
  |  Branch (1201:9): [True: 0, False: 2.88k]
  ------------------
 1202|  2.88k|            break;
 1203|      0|        default:
  ------------------
  |  Branch (1203:9): [True: 0, False: 2.88k]
  ------------------
 1204|      0|            unimplemented("basic type in subpass input");
 1205|      0|            return false;
 1206|  2.88k|        }
 1207|       |
 1208|  2.88k|        if (! acceptTokenClass(EHTokRightAngle)) {
  ------------------
  |  Branch (1208:13): [True: 0, False: 2.88k]
  ------------------
 1209|      0|            expected("right angle bracket");
 1210|      0|            return false;
 1211|      0|        }
 1212|  2.88k|    }
 1213|       |
 1214|  2.88k|    const TBasicType subpassBasicType = (subpassType.isStruct() && !subpassType.getStruct()->empty())
  ------------------
  |  Branch (1214:42): [True: 0, False: 2.88k]
  |  Branch (1214:68): [True: 0, False: 0]
  ------------------
 1215|  2.88k|        ? (*subpassType.getStruct())[0].type->getBasicType()
 1216|  2.88k|        : subpassType.getBasicType();
 1217|       |
 1218|  2.88k|    TSampler sampler;
 1219|  2.88k|    sampler.setSubpass(subpassBasicType, multisample);
 1220|       |
 1221|       |    // Remember the declared return type.  Function returns false on error.
 1222|  2.88k|    if (!parseContext.setTextureReturnType(sampler, subpassType, token.loc))
  ------------------
  |  Branch (1222:9): [True: 0, False: 2.88k]
  ------------------
 1223|      0|        return false;
 1224|       |
 1225|  2.88k|    type.shallowCopy(TType(sampler, EvqUniform));
 1226|       |
 1227|  2.88k|    return true;
 1228|  2.88k|}
_ZN7glslang11HlslGrammar20acceptSamplerTypeDX9ERNS_5TTypeE:
 1237|      1|{
 1238|       |    // read sampler type
 1239|      1|    const EHlslTokenClass samplerType = peek();
 1240|       |
 1241|      1|    TSamplerDim dim = EsdNone;
 1242|      1|    TType txType(EbtFloat, EvqUniform, 4); // default type is float4
 1243|       |
 1244|      1|    bool isShadow = false;
 1245|       |
 1246|      1|    switch (samplerType)
 1247|      1|    {
 1248|      0|    case EHTokSampler:		dim = Esd2D;	break;
  ------------------
  |  Branch (1248:5): [True: 0, False: 1]
  ------------------
 1249|      0|    case EHTokSampler1d:	dim = Esd1D;	break;
  ------------------
  |  Branch (1249:5): [True: 0, False: 1]
  ------------------
 1250|      1|    case EHTokSampler2d:	dim = Esd2D;	break;
  ------------------
  |  Branch (1250:5): [True: 1, False: 0]
  ------------------
 1251|      0|    case EHTokSampler3d:	dim = Esd3D;	break;
  ------------------
  |  Branch (1251:5): [True: 0, False: 1]
  ------------------
 1252|      0|    case EHTokSamplerCube:	dim = EsdCube;	break;
  ------------------
  |  Branch (1252:5): [True: 0, False: 1]
  ------------------
 1253|      0|    default:
  ------------------
  |  Branch (1253:5): [True: 0, False: 1]
  ------------------
 1254|      0|        return false; // not a dx9 sampler declaration
 1255|      1|    }
 1256|       |
 1257|      1|    advanceToken(); // consume the sampler type keyword
 1258|       |
 1259|      1|    TArraySizes *arraySizes = nullptr; // TODO: array
 1260|       |
 1261|      1|    TSampler sampler;
 1262|      1|    sampler.set(txType.getBasicType(), dim, false, isShadow, false);
 1263|       |
 1264|      1|    if (!parseContext.setTextureReturnType(sampler, txType, token.loc))
  ------------------
  |  Branch (1264:9): [True: 0, False: 1]
  ------------------
 1265|      0|        return false;
 1266|       |
 1267|      1|    type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
 1268|      1|    type.getQualifier().layoutFormat = ElfNone;
 1269|       |
 1270|      1|    return true;
 1271|      1|}
_ZN7glslang11HlslGrammar17acceptSamplerTypeERNS_5TTypeE:
 1282|  74.8k|{
 1283|       |    // read sampler type
 1284|  74.8k|    const EHlslTokenClass samplerType = peek();
 1285|       |
 1286|       |    // TODO: for DX9
 1287|       |    // TSamplerDim dim = EsdNone;
 1288|       |
 1289|  74.8k|    bool isShadow = false;
 1290|       |
 1291|  74.8k|    switch (samplerType) {
 1292|  43.9k|    case EHTokSampler:      break;
  ------------------
  |  Branch (1292:5): [True: 43.9k, False: 30.9k]
  ------------------
 1293|      0|    case EHTokSampler1d:    /*dim = Esd1D*/; break;
  ------------------
  |  Branch (1293:5): [True: 0, False: 74.8k]
  ------------------
 1294|    723|    case EHTokSampler2d:    /*dim = Esd2D*/; break;
  ------------------
  |  Branch (1294:5): [True: 723, False: 74.1k]
  ------------------
 1295|    720|    case EHTokSampler3d:    /*dim = Esd3D*/; break;
  ------------------
  |  Branch (1295:5): [True: 720, False: 74.1k]
  ------------------
 1296|    720|    case EHTokSamplerCube:  /*dim = EsdCube*/; break;
  ------------------
  |  Branch (1296:5): [True: 720, False: 74.1k]
  ------------------
 1297|      0|    case EHTokSamplerState: break;
  ------------------
  |  Branch (1297:5): [True: 0, False: 74.8k]
  ------------------
 1298|  28.8k|    case EHTokSamplerComparisonState: isShadow = true; break;
  ------------------
  |  Branch (1298:5): [True: 28.8k, False: 46.0k]
  ------------------
 1299|      0|    default:
  ------------------
  |  Branch (1299:5): [True: 0, False: 74.8k]
  ------------------
 1300|      0|        return false;  // not a sampler declaration
 1301|  74.8k|    }
 1302|       |
 1303|  74.8k|    advanceToken();  // consume the sampler type keyword
 1304|       |
 1305|  74.8k|    TArraySizes* arraySizes = nullptr; // TODO: array
 1306|       |
 1307|  74.8k|    TSampler sampler;
 1308|  74.8k|    sampler.setPureSampler(isShadow);
 1309|       |
 1310|  74.8k|    type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
 1311|       |
 1312|  74.8k|    return true;
 1313|  74.8k|}
_ZN7glslang11HlslGrammar17acceptTextureTypeERNS_5TTypeE:
 1334|  94.6k|{
 1335|  94.6k|    const EHlslTokenClass textureType = peek();
 1336|       |
 1337|  94.6k|    TSamplerDim dim = EsdNone;
 1338|  94.6k|    bool array = false;
 1339|  94.6k|    bool ms    = false;
 1340|  94.6k|    bool image = false;
 1341|  94.6k|    bool combined = true;
 1342|       |
 1343|  94.6k|    switch (textureType) {
 1344|    360|    case EHTokBuffer:            dim = EsdBuffer; combined = false;    break;
  ------------------
  |  Branch (1344:5): [True: 360, False: 94.3k]
  ------------------
 1345|  7.20k|    case EHTokTexture1d:         dim = Esd1D;                          break;
  ------------------
  |  Branch (1345:5): [True: 7.20k, False: 87.4k]
  ------------------
 1346|  7.20k|    case EHTokTexture1darray:    dim = Esd1D; array = true;            break;
  ------------------
  |  Branch (1346:5): [True: 7.20k, False: 87.4k]
  ------------------
 1347|  24.1k|    case EHTokTexture2d:         dim = Esd2D;                          break;
  ------------------
  |  Branch (1347:5): [True: 24.1k, False: 70.5k]
  ------------------
 1348|  24.1k|    case EHTokTexture2darray:    dim = Esd2D; array = true;            break;
  ------------------
  |  Branch (1348:5): [True: 24.1k, False: 70.5k]
  ------------------
 1349|  5.76k|    case EHTokTexture3d:         dim = Esd3D;                          break;
  ------------------
  |  Branch (1349:5): [True: 5.76k, False: 88.9k]
  ------------------
 1350|  7.92k|    case EHTokTextureCube:       dim = EsdCube;                        break;
  ------------------
  |  Branch (1350:5): [True: 7.92k, False: 86.7k]
  ------------------
 1351|  7.92k|    case EHTokTextureCubearray:  dim = EsdCube; array = true;          break;
  ------------------
  |  Branch (1351:5): [True: 7.92k, False: 86.7k]
  ------------------
 1352|  1.80k|    case EHTokTexture2DMS:       dim = Esd2D; ms = true;               break;
  ------------------
  |  Branch (1352:5): [True: 1.80k, False: 92.8k]
  ------------------
 1353|  1.80k|    case EHTokTexture2DMSarray:  dim = Esd2D; array = true; ms = true; break;
  ------------------
  |  Branch (1353:5): [True: 1.80k, False: 92.8k]
  ------------------
 1354|  1.08k|    case EHTokRWBuffer:          dim = EsdBuffer; image=true;          break;
  ------------------
  |  Branch (1354:5): [True: 1.08k, False: 93.6k]
  ------------------
 1355|  1.08k|    case EHTokRWTexture1d:       dim = Esd1D; array=false; image=true; break;
  ------------------
  |  Branch (1355:5): [True: 1.08k, False: 93.6k]
  ------------------
 1356|  1.08k|    case EHTokRWTexture1darray:  dim = Esd1D; array=true;  image=true; break;
  ------------------
  |  Branch (1356:5): [True: 1.08k, False: 93.6k]
  ------------------
 1357|  1.08k|    case EHTokRWTexture2d:       dim = Esd2D; array=false; image=true; break;
  ------------------
  |  Branch (1357:5): [True: 1.08k, False: 93.6k]
  ------------------
 1358|  1.08k|    case EHTokRWTexture2darray:  dim = Esd2D; array=true;  image=true; break;
  ------------------
  |  Branch (1358:5): [True: 1.08k, False: 93.6k]
  ------------------
 1359|  1.08k|    case EHTokRWTexture3d:       dim = Esd3D; array=false; image=true; break;
  ------------------
  |  Branch (1359:5): [True: 1.08k, False: 93.6k]
  ------------------
 1360|      0|    default:
  ------------------
  |  Branch (1360:5): [True: 0, False: 94.6k]
  ------------------
 1361|      0|        return false;  // not a texture declaration
 1362|  94.6k|    }
 1363|       |
 1364|  94.6k|    advanceToken();  // consume the texture object keyword
 1365|       |
 1366|  94.6k|    TType txType(EbtFloat, EvqUniform, 4); // default type is float4
 1367|       |
 1368|  94.6k|    TIntermTyped* msCount = nullptr;
 1369|       |
 1370|       |    // texture type: required for multisample types and RWBuffer/RWTextures!
 1371|  94.6k|    if (acceptTokenClass(EHTokLeftAngle)) {
  ------------------
  |  Branch (1371:9): [True: 94.6k, False: 0]
  ------------------
 1372|  94.6k|        if (! acceptType(txType)) {
  ------------------
  |  Branch (1372:13): [True: 0, False: 94.6k]
  ------------------
 1373|      0|            expected("scalar or vector type");
 1374|      0|            return false;
 1375|      0|        }
 1376|       |
 1377|  94.6k|        const TBasicType basicRetType = txType.getBasicType() ;
 1378|       |
 1379|  94.6k|        switch (basicRetType) {
 1380|  31.5k|        case EbtFloat:
  ------------------
  |  Branch (1380:9): [True: 31.5k, False: 63.1k]
  ------------------
 1381|  63.1k|        case EbtUint:
  ------------------
  |  Branch (1381:9): [True: 31.5k, False: 63.1k]
  ------------------
 1382|  94.6k|        case EbtInt:
  ------------------
  |  Branch (1382:9): [True: 31.5k, False: 63.1k]
  ------------------
 1383|  94.6k|        case EbtStruct:
  ------------------
  |  Branch (1383:9): [True: 0, False: 94.6k]
  ------------------
 1384|  94.6k|            break;
 1385|      0|        default:
  ------------------
  |  Branch (1385:9): [True: 0, False: 94.6k]
  ------------------
 1386|      0|            unimplemented("basic type in texture");
 1387|      0|            return false;
 1388|  94.6k|        }
 1389|       |
 1390|       |        // Buffers can handle small mats if they fit in 4 components
 1391|  94.6k|        if (dim == EsdBuffer && txType.isMatrix()) {
  ------------------
  |  Branch (1391:13): [True: 1.44k, False: 93.2k]
  |  Branch (1391:33): [True: 0, False: 1.44k]
  ------------------
 1392|      0|            if ((txType.getMatrixCols() * txType.getMatrixRows()) > 4) {
  ------------------
  |  Branch (1392:17): [True: 0, False: 0]
  ------------------
 1393|      0|                expected("components < 4 in matrix buffer type");
 1394|      0|                return false;
 1395|      0|            }
 1396|       |
 1397|       |            // TODO: except we don't handle it yet...
 1398|      0|            unimplemented("matrix type in buffer");
 1399|      0|            return false;
 1400|      0|        }
 1401|       |
 1402|  94.6k|        if (!txType.isScalar() && !txType.isVector() && !txType.isStruct()) {
  ------------------
  |  Branch (1402:13): [True: 94.6k, False: 0]
  |  Branch (1402:35): [True: 0, False: 94.6k]
  |  Branch (1402:57): [True: 0, False: 0]
  ------------------
 1403|      0|            expected("scalar, vector, or struct type");
 1404|      0|            return false;
 1405|      0|        }
 1406|       |
 1407|  94.6k|        if (ms && acceptTokenClass(EHTokComma)) {
  ------------------
  |  Branch (1407:13): [True: 3.60k, False: 91.0k]
  |  Branch (1407:19): [True: 0, False: 3.60k]
  ------------------
 1408|       |            // read sample count for multisample types, if given
 1409|      0|            if (! peekTokenClass(EHTokIntConstant)) {
  ------------------
  |  Branch (1409:17): [True: 0, False: 0]
  ------------------
 1410|      0|                expected("multisample count");
 1411|      0|                return false;
 1412|      0|            }
 1413|       |
 1414|      0|            if (! acceptLiteral(msCount))  // should never fail, since we just found an integer
  ------------------
  |  Branch (1414:17): [True: 0, False: 0]
  ------------------
 1415|      0|                return false;
 1416|      0|        }
 1417|       |
 1418|  94.6k|        if (! acceptTokenClass(EHTokRightAngle)) {
  ------------------
  |  Branch (1418:13): [True: 0, False: 94.6k]
  ------------------
 1419|      0|            expected("right angle bracket");
 1420|      0|            return false;
 1421|      0|        }
 1422|  94.6k|    } else if (ms) {
  ------------------
  |  Branch (1422:16): [True: 0, False: 0]
  ------------------
 1423|      0|        expected("texture type for multisample");
 1424|      0|        return false;
 1425|      0|    } else if (image) {
  ------------------
  |  Branch (1425:16): [True: 0, False: 0]
  ------------------
 1426|      0|        expected("type for RWTexture/RWBuffer");
 1427|      0|        return false;
 1428|      0|    }
 1429|       |
 1430|  94.6k|    TArraySizes* arraySizes = nullptr;
 1431|  94.6k|    const bool shadow = false; // declared on the sampler
 1432|       |
 1433|  94.6k|    TSampler sampler;
 1434|  94.6k|    TLayoutFormat format = ElfNone;
 1435|       |
 1436|       |    // Buffer, RWBuffer and RWTexture (images) require a TLayoutFormat.  We handle only a limit set.
 1437|  94.6k|    if (image || dim == EsdBuffer)
  ------------------
  |  Branch (1437:9): [True: 6.48k, False: 88.2k]
  |  Branch (1437:18): [True: 360, False: 87.8k]
  ------------------
 1438|  6.84k|        format = parseContext.getLayoutFromTxType(token.loc, txType);
 1439|       |
 1440|  94.6k|    const TBasicType txBasicType = (txType.isStruct() && !txType.getStruct()->empty())
  ------------------
  |  Branch (1440:37): [True: 0, False: 94.6k]
  |  Branch (1440:58): [True: 0, False: 0]
  ------------------
 1441|  94.6k|        ? (*txType.getStruct())[0].type->getBasicType()
 1442|  94.6k|        : txType.getBasicType();
 1443|       |
 1444|       |    // Non-image Buffers are combined
 1445|  94.6k|    if (dim == EsdBuffer && !image) {
  ------------------
  |  Branch (1445:9): [True: 1.44k, False: 93.2k]
  |  Branch (1445:29): [True: 360, False: 1.08k]
  ------------------
 1446|    360|        sampler.set(txType.getBasicType(), dim, array);
 1447|  94.3k|    } else {
 1448|       |        // DX10 textures are separated.  TODO: DX9.
 1449|  94.3k|        if (image) {
  ------------------
  |  Branch (1449:13): [True: 6.48k, False: 87.8k]
  ------------------
 1450|  6.48k|            sampler.setImage(txBasicType, dim, array, shadow, ms);
 1451|  87.8k|        } else {
 1452|  87.8k|            sampler.setTexture(txBasicType, dim, array, shadow, ms);
 1453|  87.8k|        }
 1454|  94.3k|    }
 1455|       |
 1456|       |    // Remember the declared return type.  Function returns false on error.
 1457|  94.6k|    if (!parseContext.setTextureReturnType(sampler, txType, token.loc))
  ------------------
  |  Branch (1457:9): [True: 0, False: 94.6k]
  ------------------
 1458|      0|        return false;
 1459|       |
 1460|       |    // Force uncombined, if necessary
 1461|  94.6k|    if (!combined)
  ------------------
  |  Branch (1461:9): [True: 360, False: 94.3k]
  ------------------
 1462|    360|        sampler.combined = false;
 1463|       |
 1464|  94.6k|    type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
 1465|  94.6k|    type.getQualifier().layoutFormat = format;
 1466|       |
 1467|  94.6k|    return true;
 1468|  94.6k|}
_ZN7glslang11HlslGrammar10acceptTypeERNS_5TTypeE:
 1474|  99.5k|{
 1475|  99.5k|    TIntermNode* nodeList = nullptr;
 1476|  99.5k|    return acceptType(type, nodeList);
 1477|  99.5k|}
_ZN7glslang11HlslGrammar10acceptTypeERNS_5TTypeERP11TIntermNode:
 1479|  1.65M|{
 1480|       |    // Basic types for min* types, use native halfs if the option allows them.
 1481|  1.65M|    bool enable16BitTypes = parseContext.hlslEnable16BitTypes();
 1482|       |
 1483|  1.65M|    const TBasicType min16float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
  ------------------
  |  Branch (1483:38): [True: 2.04k, False: 1.65M]
  ------------------
 1484|  1.65M|    const TBasicType min10float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
  ------------------
  |  Branch (1484:38): [True: 2.04k, False: 1.65M]
  ------------------
 1485|  1.65M|    const TBasicType half_bt       = enable16BitTypes ? EbtFloat16 : EbtFloat;
  ------------------
  |  Branch (1485:38): [True: 2.04k, False: 1.65M]
  ------------------
 1486|  1.65M|    const TBasicType min16int_bt   = enable16BitTypes ? EbtInt16   : EbtInt;
  ------------------
  |  Branch (1486:38): [True: 2.04k, False: 1.65M]
  ------------------
 1487|  1.65M|    const TBasicType min12int_bt   = enable16BitTypes ? EbtInt16   : EbtInt;
  ------------------
  |  Branch (1487:38): [True: 2.04k, False: 1.65M]
  ------------------
 1488|  1.65M|    const TBasicType min16uint_bt  = enable16BitTypes ? EbtUint16  : EbtUint;
  ------------------
  |  Branch (1488:38): [True: 2.04k, False: 1.65M]
  ------------------
 1489|       |
 1490|       |    // Some types might have turned into identifiers. Take the hit for checking
 1491|       |    // when this has happened.
 1492|  1.65M|    if (typeIdentifiers) {
  ------------------
  |  Branch (1492:9): [True: 0, False: 1.65M]
  ------------------
 1493|      0|        const char* identifierString = getTypeString(peek());
 1494|      0|        if (identifierString != nullptr) {
  ------------------
  |  Branch (1494:13): [True: 0, False: 0]
  ------------------
 1495|      0|            TString name = identifierString;
 1496|       |            // if it's an identifier, it's not a type
 1497|      0|            if (parseContext.symbolTable.find(name) != nullptr)
  ------------------
  |  Branch (1497:17): [True: 0, False: 0]
  ------------------
 1498|      0|                return false;
 1499|      0|        }
 1500|      0|    }
 1501|       |
 1502|  1.65M|    bool isUnorm = false;
 1503|  1.65M|    bool isSnorm = false;
 1504|       |
 1505|       |    // Accept snorm and unorm.  Presently, this is ignored, save for an error check below.
 1506|  1.65M|    switch (peek()) {
 1507|      0|    case EHTokUnorm:
  ------------------
  |  Branch (1507:5): [True: 0, False: 1.65M]
  ------------------
 1508|      0|        isUnorm = true;
 1509|      0|        advanceToken();  // eat the token
 1510|      0|        break;
 1511|      0|    case EHTokSNorm:
  ------------------
  |  Branch (1511:5): [True: 0, False: 1.65M]
  ------------------
 1512|      0|        isSnorm = true;
 1513|      0|        advanceToken();  // eat the token
 1514|      0|        break;
 1515|  1.65M|    default:
  ------------------
  |  Branch (1515:5): [True: 1.65M, False: 0]
  ------------------
 1516|  1.65M|        break;
 1517|  1.65M|    }
 1518|       |
 1519|  1.65M|    switch (peek()) {
 1520|      0|    case EHTokVector:
  ------------------
  |  Branch (1520:5): [True: 0, False: 1.65M]
  ------------------
 1521|      0|        return acceptVectorTemplateType(type);
 1522|      0|        break;
 1523|       |
 1524|      0|    case EHTokMatrix:
  ------------------
  |  Branch (1524:5): [True: 0, False: 1.65M]
  ------------------
 1525|      0|        return acceptMatrixTemplateType(type);
 1526|      0|        break;
 1527|       |
 1528|      0|    case EHTokPointStream:            // fall through
  ------------------
  |  Branch (1528:5): [True: 0, False: 1.65M]
  ------------------
 1529|      0|    case EHTokLineStream:             // ...
  ------------------
  |  Branch (1529:5): [True: 0, False: 1.65M]
  ------------------
 1530|      0|    case EHTokTriangleStream:         // ...
  ------------------
  |  Branch (1530:5): [True: 0, False: 1.65M]
  ------------------
 1531|      0|        {
 1532|      0|            TLayoutGeometry geometry;
 1533|      0|            if (! acceptStreamOutTemplateType(type, geometry))
  ------------------
  |  Branch (1533:17): [True: 0, False: 0]
  ------------------
 1534|      0|                return false;
 1535|       |
 1536|      0|            if (! parseContext.handleOutputGeometry(token.loc, geometry))
  ------------------
  |  Branch (1536:17): [True: 0, False: 0]
  ------------------
 1537|      0|                return false;
 1538|       |
 1539|      0|            return true;
 1540|      0|        }
 1541|       |
 1542|      0|    case EHTokInputPatch:             // fall through
  ------------------
  |  Branch (1542:5): [True: 0, False: 1.65M]
  ------------------
 1543|      0|    case EHTokOutputPatch:            // ...
  ------------------
  |  Branch (1543:5): [True: 0, False: 1.65M]
  ------------------
 1544|      0|        {
 1545|      0|            if (! acceptTessellationPatchTemplateType(type))
  ------------------
  |  Branch (1545:17): [True: 0, False: 0]
  ------------------
 1546|      0|                return false;
 1547|       |
 1548|      0|            return true;
 1549|      0|        }
 1550|       |
 1551|  43.9k|    case EHTokSampler:                // fall through
  ------------------
  |  Branch (1551:5): [True: 43.9k, False: 1.61M]
  ------------------
 1552|  43.9k|    case EHTokSampler1d:              // ...
  ------------------
  |  Branch (1552:5): [True: 0, False: 1.65M]
  ------------------
 1553|  44.6k|    case EHTokSampler2d:              // ...
  ------------------
  |  Branch (1553:5): [True: 724, False: 1.65M]
  ------------------
 1554|  45.3k|    case EHTokSampler3d:              // ...
  ------------------
  |  Branch (1554:5): [True: 720, False: 1.65M]
  ------------------
 1555|  46.0k|    case EHTokSamplerCube:            // ...
  ------------------
  |  Branch (1555:5): [True: 720, False: 1.65M]
  ------------------
 1556|  46.0k|        if (parseContext.hlslDX9Compatible())
  ------------------
  |  Branch (1556:13): [True: 1, False: 46.0k]
  ------------------
 1557|      1|            return acceptSamplerTypeDX9(type);
 1558|  46.0k|        else
 1559|  46.0k|            return acceptSamplerType(type);
 1560|      0|        break;
 1561|       |
 1562|      0|    case EHTokSamplerState:           // fall through
  ------------------
  |  Branch (1562:5): [True: 0, False: 1.65M]
  ------------------
 1563|  28.8k|    case EHTokSamplerComparisonState: // ...
  ------------------
  |  Branch (1563:5): [True: 28.8k, False: 1.63M]
  ------------------
 1564|  28.8k|        return acceptSamplerType(type);
 1565|      0|        break;
 1566|       |
 1567|  1.44k|    case EHTokSubpassInput:           // fall through
  ------------------
  |  Branch (1567:5): [True: 1.44k, False: 1.65M]
  ------------------
 1568|  2.88k|    case EHTokSubpassInputMS:         // ...
  ------------------
  |  Branch (1568:5): [True: 1.44k, False: 1.65M]
  ------------------
 1569|  2.88k|        return acceptSubpassInputType(type);
 1570|      0|        break;
 1571|       |
 1572|    360|    case EHTokBuffer:                 // fall through
  ------------------
  |  Branch (1572:5): [True: 360, False: 1.65M]
  ------------------
 1573|  7.56k|    case EHTokTexture1d:              // ...
  ------------------
  |  Branch (1573:5): [True: 7.20k, False: 1.65M]
  ------------------
 1574|  14.7k|    case EHTokTexture1darray:         // ...
  ------------------
  |  Branch (1574:5): [True: 7.20k, False: 1.65M]
  ------------------
 1575|  38.8k|    case EHTokTexture2d:              // ...
  ------------------
  |  Branch (1575:5): [True: 24.1k, False: 1.63M]
  ------------------
 1576|  63.0k|    case EHTokTexture2darray:         // ...
  ------------------
  |  Branch (1576:5): [True: 24.1k, False: 1.63M]
  ------------------
 1577|  68.7k|    case EHTokTexture3d:              // ...
  ------------------
  |  Branch (1577:5): [True: 5.76k, False: 1.65M]
  ------------------
 1578|  76.6k|    case EHTokTextureCube:            // ...
  ------------------
  |  Branch (1578:5): [True: 7.92k, False: 1.65M]
  ------------------
 1579|  84.6k|    case EHTokTextureCubearray:       // ...
  ------------------
  |  Branch (1579:5): [True: 7.92k, False: 1.65M]
  ------------------
 1580|  86.4k|    case EHTokTexture2DMS:            // ...
  ------------------
  |  Branch (1580:5): [True: 1.80k, False: 1.65M]
  ------------------
 1581|  88.2k|    case EHTokTexture2DMSarray:       // ...
  ------------------
  |  Branch (1581:5): [True: 1.80k, False: 1.65M]
  ------------------
 1582|  89.2k|    case EHTokRWTexture1d:            // ...
  ------------------
  |  Branch (1582:5): [True: 1.08k, False: 1.65M]
  ------------------
 1583|  90.3k|    case EHTokRWTexture1darray:       // ...
  ------------------
  |  Branch (1583:5): [True: 1.08k, False: 1.65M]
  ------------------
 1584|  91.4k|    case EHTokRWTexture2d:            // ...
  ------------------
  |  Branch (1584:5): [True: 1.08k, False: 1.65M]
  ------------------
 1585|  92.5k|    case EHTokRWTexture2darray:       // ...
  ------------------
  |  Branch (1585:5): [True: 1.08k, False: 1.65M]
  ------------------
 1586|  93.6k|    case EHTokRWTexture3d:            // ...
  ------------------
  |  Branch (1586:5): [True: 1.08k, False: 1.65M]
  ------------------
 1587|  94.6k|    case EHTokRWBuffer:               // ...
  ------------------
  |  Branch (1587:5): [True: 1.08k, False: 1.65M]
  ------------------
 1588|  94.6k|        return acceptTextureType(type);
 1589|      0|        break;
 1590|       |
 1591|      0|    case EHTokAppendStructuredBuffer:
  ------------------
  |  Branch (1591:5): [True: 0, False: 1.65M]
  ------------------
 1592|      0|    case EHTokByteAddressBuffer:
  ------------------
  |  Branch (1592:5): [True: 0, False: 1.65M]
  ------------------
 1593|      0|    case EHTokConsumeStructuredBuffer:
  ------------------
  |  Branch (1593:5): [True: 0, False: 1.65M]
  ------------------
 1594|      0|    case EHTokRWByteAddressBuffer:
  ------------------
  |  Branch (1594:5): [True: 0, False: 1.65M]
  ------------------
 1595|      0|    case EHTokRWStructuredBuffer:
  ------------------
  |  Branch (1595:5): [True: 0, False: 1.65M]
  ------------------
 1596|      0|    case EHTokStructuredBuffer:
  ------------------
  |  Branch (1596:5): [True: 0, False: 1.65M]
  ------------------
 1597|      0|        return acceptStructBufferType(type);
 1598|      0|        break;
 1599|       |
 1600|      0|    case EHTokTextureBuffer:
  ------------------
  |  Branch (1600:5): [True: 0, False: 1.65M]
  ------------------
 1601|      0|        return acceptTextureBufferType(type);
 1602|      0|        break;
 1603|       |
 1604|      0|    case EHTokConstantBuffer:
  ------------------
  |  Branch (1604:5): [True: 0, False: 1.65M]
  ------------------
 1605|      0|        return acceptConstantBufferType(type);
 1606|       |
 1607|      0|    case EHTokClass:
  ------------------
  |  Branch (1607:5): [True: 0, False: 1.65M]
  ------------------
 1608|      2|    case EHTokStruct:
  ------------------
  |  Branch (1608:5): [True: 2, False: 1.65M]
  ------------------
 1609|      2|    case EHTokCBuffer:
  ------------------
  |  Branch (1609:5): [True: 0, False: 1.65M]
  ------------------
 1610|      2|    case EHTokTBuffer:
  ------------------
  |  Branch (1610:5): [True: 0, False: 1.65M]
  ------------------
 1611|      2|        return acceptStruct(type, nodeList);
 1612|       |
 1613|    683|    case EHTokIdentifier:
  ------------------
  |  Branch (1613:5): [True: 683, False: 1.65M]
  ------------------
 1614|       |        // An identifier could be for a user-defined type.
 1615|       |        // Note we cache the symbol table lookup, to save for a later rule
 1616|       |        // when this is not a type.
 1617|    683|        if (parseContext.lookupUserType(*token.string, type) != nullptr) {
  ------------------
  |  Branch (1617:13): [True: 3, False: 680]
  ------------------
 1618|      3|            advanceToken();
 1619|      3|            return true;
 1620|      3|        } else
 1621|    680|            return false;
 1622|       |
 1623|   107k|    case EHTokVoid:
  ------------------
  |  Branch (1623:5): [True: 107k, False: 1.55M]
  ------------------
 1624|   107k|        new(&type) TType(EbtVoid);
 1625|   107k|        break;
 1626|       |
 1627|      0|    case EHTokString:
  ------------------
  |  Branch (1627:5): [True: 0, False: 1.65M]
  ------------------
 1628|      0|        new(&type) TType(EbtString);
 1629|      0|        break;
 1630|       |
 1631|   113k|    case EHTokFloat:
  ------------------
  |  Branch (1631:5): [True: 113k, False: 1.54M]
  ------------------
 1632|   113k|        new(&type) TType(EbtFloat);
 1633|   113k|        break;
 1634|  9.36k|    case EHTokFloat1:
  ------------------
  |  Branch (1634:5): [True: 9.36k, False: 1.65M]
  ------------------
 1635|  9.36k|        new(&type) TType(EbtFloat);
 1636|  9.36k|        type.makeVector();
 1637|  9.36k|        break;
 1638|  77.1k|    case EHTokFloat2:
  ------------------
  |  Branch (1638:5): [True: 77.1k, False: 1.58M]
  ------------------
 1639|  77.1k|        new(&type) TType(EbtFloat, EvqTemporary, 2);
 1640|  77.1k|        break;
 1641|  65.8k|    case EHTokFloat3:
  ------------------
  |  Branch (1641:5): [True: 65.8k, False: 1.59M]
  ------------------
 1642|  65.8k|        new(&type) TType(EbtFloat, EvqTemporary, 3);
 1643|  65.8k|        break;
 1644|  68.7k|    case EHTokFloat4:
  ------------------
  |  Branch (1644:5): [True: 68.7k, False: 1.59M]
  ------------------
 1645|  68.7k|        new(&type) TType(EbtFloat, EvqTemporary, 4);
 1646|  68.7k|        break;
 1647|       |
 1648|  5.40k|    case EHTokDouble:
  ------------------
  |  Branch (1648:5): [True: 5.40k, False: 1.65M]
  ------------------
 1649|  5.40k|        new(&type) TType(EbtDouble);
 1650|  5.40k|        break;
 1651|      0|    case EHTokDouble1:
  ------------------
  |  Branch (1651:5): [True: 0, False: 1.65M]
  ------------------
 1652|      0|        new(&type) TType(EbtDouble);
 1653|      0|        type.makeVector();
 1654|      0|        break;
 1655|  5.40k|    case EHTokDouble2:
  ------------------
  |  Branch (1655:5): [True: 5.40k, False: 1.65M]
  ------------------
 1656|  5.40k|        new(&type) TType(EbtDouble, EvqTemporary, 2);
 1657|  5.40k|        break;
 1658|  5.16k|    case EHTokDouble3:
  ------------------
  |  Branch (1658:5): [True: 5.16k, False: 1.65M]
  ------------------
 1659|  5.16k|        new(&type) TType(EbtDouble, EvqTemporary, 3);
 1660|  5.16k|        break;
 1661|  5.16k|    case EHTokDouble4:
  ------------------
  |  Branch (1661:5): [True: 5.16k, False: 1.65M]
  ------------------
 1662|  5.16k|        new(&type) TType(EbtDouble, EvqTemporary, 4);
 1663|  5.16k|        break;
 1664|       |
 1665|  30.9k|    case EHTokInt:
  ------------------
  |  Branch (1665:5): [True: 30.9k, False: 1.62M]
  ------------------
 1666|  30.9k|    case EHTokDword:
  ------------------
  |  Branch (1666:5): [True: 0, False: 1.65M]
  ------------------
 1667|  30.9k|        new(&type) TType(EbtInt);
 1668|  30.9k|        break;
 1669|  6.48k|    case EHTokInt1:
  ------------------
  |  Branch (1669:5): [True: 6.48k, False: 1.65M]
  ------------------
 1670|  6.48k|        new(&type) TType(EbtInt);
 1671|  6.48k|        type.makeVector();
 1672|  6.48k|        break;
 1673|   107k|    case EHTokInt2:
  ------------------
  |  Branch (1673:5): [True: 107k, False: 1.55M]
  ------------------
 1674|   107k|        new(&type) TType(EbtInt, EvqTemporary, 2);
 1675|   107k|        break;
 1676|  21.2k|    case EHTokInt3:
  ------------------
  |  Branch (1676:5): [True: 21.2k, False: 1.63M]
  ------------------
 1677|  21.2k|        new(&type) TType(EbtInt, EvqTemporary, 3);
 1678|  21.2k|        break;
 1679|  44.0k|    case EHTokInt4:
  ------------------
  |  Branch (1679:5): [True: 44.0k, False: 1.61M]
  ------------------
 1680|  44.0k|        new(&type) TType(EbtInt, EvqTemporary, 4);
 1681|  44.0k|        break;
 1682|       |
 1683|  60.7k|    case EHTokUint:
  ------------------
  |  Branch (1683:5): [True: 60.7k, False: 1.59M]
  ------------------
 1684|  60.7k|        new(&type) TType(EbtUint);
 1685|  60.7k|        break;
 1686|  6.24k|    case EHTokUint1:
  ------------------
  |  Branch (1686:5): [True: 6.24k, False: 1.65M]
  ------------------
 1687|  6.24k|        new(&type) TType(EbtUint);
 1688|  6.24k|        type.makeVector();
 1689|  6.24k|        break;
 1690|  32.0k|    case EHTokUint2:
  ------------------
  |  Branch (1690:5): [True: 32.0k, False: 1.62M]
  ------------------
 1691|  32.0k|        new(&type) TType(EbtUint, EvqTemporary, 2);
 1692|  32.0k|        break;
 1693|  15.6k|    case EHTokUint3:
  ------------------
  |  Branch (1693:5): [True: 15.6k, False: 1.64M]
  ------------------
 1694|  15.6k|        new(&type) TType(EbtUint, EvqTemporary, 3);
 1695|  15.6k|        break;
 1696|  42.6k|    case EHTokUint4:
  ------------------
  |  Branch (1696:5): [True: 42.6k, False: 1.61M]
  ------------------
 1697|  42.6k|        new(&type) TType(EbtUint, EvqTemporary, 4);
 1698|  42.6k|        break;
 1699|       |
 1700|      9|    case EHTokUint64:
  ------------------
  |  Branch (1700:5): [True: 9, False: 1.65M]
  ------------------
 1701|      9|        new(&type) TType(EbtUint64);
 1702|      9|        break;
 1703|       |
 1704|  23.1k|    case EHTokBool:
  ------------------
  |  Branch (1704:5): [True: 23.1k, False: 1.63M]
  ------------------
 1705|  23.1k|        new(&type) TType(EbtBool);
 1706|  23.1k|        break;
 1707|      0|    case EHTokBool1:
  ------------------
  |  Branch (1707:5): [True: 0, False: 1.65M]
  ------------------
 1708|      0|        new(&type) TType(EbtBool);
 1709|      0|        type.makeVector();
 1710|      0|        break;
 1711|    720|    case EHTokBool2:
  ------------------
  |  Branch (1711:5): [True: 720, False: 1.65M]
  ------------------
 1712|    720|        new(&type) TType(EbtBool, EvqTemporary, 2);
 1713|    720|        break;
 1714|    720|    case EHTokBool3:
  ------------------
  |  Branch (1714:5): [True: 720, False: 1.65M]
  ------------------
 1715|    720|        new(&type) TType(EbtBool, EvqTemporary, 3);
 1716|    720|        break;
 1717|    720|    case EHTokBool4:
  ------------------
  |  Branch (1717:5): [True: 720, False: 1.65M]
  ------------------
 1718|    720|        new(&type) TType(EbtBool, EvqTemporary, 4);
 1719|    720|        break;
 1720|       |
 1721|      0|    case EHTokHalf:
  ------------------
  |  Branch (1721:5): [True: 0, False: 1.65M]
  ------------------
 1722|      0|        new(&type) TType(half_bt, EvqTemporary);
 1723|      0|        break;
 1724|      0|    case EHTokHalf1:
  ------------------
  |  Branch (1724:5): [True: 0, False: 1.65M]
  ------------------
 1725|      0|        new(&type) TType(half_bt, EvqTemporary);
 1726|      0|        type.makeVector();
 1727|      0|        break;
 1728|      0|    case EHTokHalf2:
  ------------------
  |  Branch (1728:5): [True: 0, False: 1.65M]
  ------------------
 1729|      0|        new(&type) TType(half_bt, EvqTemporary, 2);
 1730|      0|        break;
 1731|      0|    case EHTokHalf3:
  ------------------
  |  Branch (1731:5): [True: 0, False: 1.65M]
  ------------------
 1732|      0|        new(&type) TType(half_bt, EvqTemporary, 3);
 1733|      0|        break;
 1734|      0|    case EHTokHalf4:
  ------------------
  |  Branch (1734:5): [True: 0, False: 1.65M]
  ------------------
 1735|      0|        new(&type) TType(half_bt, EvqTemporary, 4);
 1736|      0|        break;
 1737|       |
 1738|      0|    case EHTokMin16float:
  ------------------
  |  Branch (1738:5): [True: 0, False: 1.65M]
  ------------------
 1739|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
 1740|      0|        break;
 1741|      0|    case EHTokMin16float1:
  ------------------
  |  Branch (1741:5): [True: 0, False: 1.65M]
  ------------------
 1742|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
 1743|      0|        type.makeVector();
 1744|      0|        break;
 1745|      0|    case EHTokMin16float2:
  ------------------
  |  Branch (1745:5): [True: 0, False: 1.65M]
  ------------------
 1746|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 2);
 1747|      0|        break;
 1748|      0|    case EHTokMin16float3:
  ------------------
  |  Branch (1748:5): [True: 0, False: 1.65M]
  ------------------
 1749|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 3);
 1750|      0|        break;
 1751|      0|    case EHTokMin16float4:
  ------------------
  |  Branch (1751:5): [True: 0, False: 1.65M]
  ------------------
 1752|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 4);
 1753|      0|        break;
 1754|       |
 1755|      0|    case EHTokMin10float:
  ------------------
  |  Branch (1755:5): [True: 0, False: 1.65M]
  ------------------
 1756|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
 1757|      0|        break;
 1758|      0|    case EHTokMin10float1:
  ------------------
  |  Branch (1758:5): [True: 0, False: 1.65M]
  ------------------
 1759|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
 1760|      0|        type.makeVector();
 1761|      0|        break;
 1762|      0|    case EHTokMin10float2:
  ------------------
  |  Branch (1762:5): [True: 0, False: 1.65M]
  ------------------
 1763|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 2);
 1764|      0|        break;
 1765|      0|    case EHTokMin10float3:
  ------------------
  |  Branch (1765:5): [True: 0, False: 1.65M]
  ------------------
 1766|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 3);
 1767|      0|        break;
 1768|      0|    case EHTokMin10float4:
  ------------------
  |  Branch (1768:5): [True: 0, False: 1.65M]
  ------------------
 1769|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 4);
 1770|      0|        break;
 1771|       |
 1772|      0|    case EHTokMin16int:
  ------------------
  |  Branch (1772:5): [True: 0, False: 1.65M]
  ------------------
 1773|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
 1774|      0|        break;
 1775|      0|    case EHTokMin16int1:
  ------------------
  |  Branch (1775:5): [True: 0, False: 1.65M]
  ------------------
 1776|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
 1777|      0|        type.makeVector();
 1778|      0|        break;
 1779|      0|    case EHTokMin16int2:
  ------------------
  |  Branch (1779:5): [True: 0, False: 1.65M]
  ------------------
 1780|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 2);
 1781|      0|        break;
 1782|      0|    case EHTokMin16int3:
  ------------------
  |  Branch (1782:5): [True: 0, False: 1.65M]
  ------------------
 1783|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 3);
 1784|      0|        break;
 1785|      0|    case EHTokMin16int4:
  ------------------
  |  Branch (1785:5): [True: 0, False: 1.65M]
  ------------------
 1786|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 4);
 1787|      0|        break;
 1788|       |
 1789|      0|    case EHTokMin12int:
  ------------------
  |  Branch (1789:5): [True: 0, False: 1.65M]
  ------------------
 1790|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
 1791|      0|        break;
 1792|      0|    case EHTokMin12int1:
  ------------------
  |  Branch (1792:5): [True: 0, False: 1.65M]
  ------------------
 1793|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
 1794|      0|        type.makeVector();
 1795|      0|        break;
 1796|      0|    case EHTokMin12int2:
  ------------------
  |  Branch (1796:5): [True: 0, False: 1.65M]
  ------------------
 1797|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 2);
 1798|      0|        break;
 1799|      0|    case EHTokMin12int3:
  ------------------
  |  Branch (1799:5): [True: 0, False: 1.65M]
  ------------------
 1800|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 3);
 1801|      0|        break;
 1802|      0|    case EHTokMin12int4:
  ------------------
  |  Branch (1802:5): [True: 0, False: 1.65M]
  ------------------
 1803|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 4);
 1804|      0|        break;
 1805|       |
 1806|      0|    case EHTokMin16uint:
  ------------------
  |  Branch (1806:5): [True: 0, False: 1.65M]
  ------------------
 1807|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
 1808|      0|        break;
 1809|      0|    case EHTokMin16uint1:
  ------------------
  |  Branch (1809:5): [True: 0, False: 1.65M]
  ------------------
 1810|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
 1811|      0|        type.makeVector();
 1812|      0|        break;
 1813|      0|    case EHTokMin16uint2:
  ------------------
  |  Branch (1813:5): [True: 0, False: 1.65M]
  ------------------
 1814|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 2);
 1815|      0|        break;
 1816|      0|    case EHTokMin16uint3:
  ------------------
  |  Branch (1816:5): [True: 0, False: 1.65M]
  ------------------
 1817|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 3);
 1818|      0|        break;
 1819|      0|    case EHTokMin16uint4:
  ------------------
  |  Branch (1819:5): [True: 0, False: 1.65M]
  ------------------
 1820|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 4);
 1821|      0|        break;
 1822|       |
 1823|  9.12k|    case EHTokInt1x1:
  ------------------
  |  Branch (1823:5): [True: 9.12k, False: 1.65M]
  ------------------
 1824|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 1);
 1825|  9.12k|        break;
 1826|  9.12k|    case EHTokInt1x2:
  ------------------
  |  Branch (1826:5): [True: 9.12k, False: 1.65M]
  ------------------
 1827|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 2);
 1828|  9.12k|        break;
 1829|  9.12k|    case EHTokInt1x3:
  ------------------
  |  Branch (1829:5): [True: 9.12k, False: 1.65M]
  ------------------
 1830|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 3);
 1831|  9.12k|        break;
 1832|  9.12k|    case EHTokInt1x4:
  ------------------
  |  Branch (1832:5): [True: 9.12k, False: 1.65M]
  ------------------
 1833|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 4);
 1834|  9.12k|        break;
 1835|  9.12k|    case EHTokInt2x1:
  ------------------
  |  Branch (1835:5): [True: 9.12k, False: 1.65M]
  ------------------
 1836|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 1);
 1837|  9.12k|        break;
 1838|  9.12k|    case EHTokInt2x2:
  ------------------
  |  Branch (1838:5): [True: 9.12k, False: 1.65M]
  ------------------
 1839|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 2);
 1840|  9.12k|        break;
 1841|  9.12k|    case EHTokInt2x3:
  ------------------
  |  Branch (1841:5): [True: 9.12k, False: 1.65M]
  ------------------
 1842|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 3);
 1843|  9.12k|        break;
 1844|  9.12k|    case EHTokInt2x4:
  ------------------
  |  Branch (1844:5): [True: 9.12k, False: 1.65M]
  ------------------
 1845|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 4);
 1846|  9.12k|        break;
 1847|  9.12k|    case EHTokInt3x1:
  ------------------
  |  Branch (1847:5): [True: 9.12k, False: 1.65M]
  ------------------
 1848|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 1);
 1849|  9.12k|        break;
 1850|  9.12k|    case EHTokInt3x2:
  ------------------
  |  Branch (1850:5): [True: 9.12k, False: 1.65M]
  ------------------
 1851|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 2);
 1852|  9.12k|        break;
 1853|  9.12k|    case EHTokInt3x3:
  ------------------
  |  Branch (1853:5): [True: 9.12k, False: 1.65M]
  ------------------
 1854|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 3);
 1855|  9.12k|        break;
 1856|  9.12k|    case EHTokInt3x4:
  ------------------
  |  Branch (1856:5): [True: 9.12k, False: 1.65M]
  ------------------
 1857|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 4);
 1858|  9.12k|        break;
 1859|  9.12k|    case EHTokInt4x1:
  ------------------
  |  Branch (1859:5): [True: 9.12k, False: 1.65M]
  ------------------
 1860|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 1);
 1861|  9.12k|        break;
 1862|  9.12k|    case EHTokInt4x2:
  ------------------
  |  Branch (1862:5): [True: 9.12k, False: 1.65M]
  ------------------
 1863|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 2);
 1864|  9.12k|        break;
 1865|  9.12k|    case EHTokInt4x3:
  ------------------
  |  Branch (1865:5): [True: 9.12k, False: 1.65M]
  ------------------
 1866|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 3);
 1867|  9.12k|        break;
 1868|  9.12k|    case EHTokInt4x4:
  ------------------
  |  Branch (1868:5): [True: 9.12k, False: 1.65M]
  ------------------
 1869|  9.12k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 4);
 1870|  9.12k|        break;
 1871|       |
 1872|  8.40k|    case EHTokUint1x1:
  ------------------
  |  Branch (1872:5): [True: 8.40k, False: 1.65M]
  ------------------
 1873|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 1);
 1874|  8.40k|        break;
 1875|  8.40k|    case EHTokUint1x2:
  ------------------
  |  Branch (1875:5): [True: 8.40k, False: 1.65M]
  ------------------
 1876|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 2);
 1877|  8.40k|        break;
 1878|  8.40k|    case EHTokUint1x3:
  ------------------
  |  Branch (1878:5): [True: 8.40k, False: 1.65M]
  ------------------
 1879|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 3);
 1880|  8.40k|        break;
 1881|  8.40k|    case EHTokUint1x4:
  ------------------
  |  Branch (1881:5): [True: 8.40k, False: 1.65M]
  ------------------
 1882|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 4);
 1883|  8.40k|        break;
 1884|  8.40k|    case EHTokUint2x1:
  ------------------
  |  Branch (1884:5): [True: 8.40k, False: 1.65M]
  ------------------
 1885|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 1);
 1886|  8.40k|        break;
 1887|  8.40k|    case EHTokUint2x2:
  ------------------
  |  Branch (1887:5): [True: 8.40k, False: 1.65M]
  ------------------
 1888|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 2);
 1889|  8.40k|        break;
 1890|  8.40k|    case EHTokUint2x3:
  ------------------
  |  Branch (1890:5): [True: 8.40k, False: 1.65M]
  ------------------
 1891|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 3);
 1892|  8.40k|        break;
 1893|  8.40k|    case EHTokUint2x4:
  ------------------
  |  Branch (1893:5): [True: 8.40k, False: 1.65M]
  ------------------
 1894|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 4);
 1895|  8.40k|        break;
 1896|  8.40k|    case EHTokUint3x1:
  ------------------
  |  Branch (1896:5): [True: 8.40k, False: 1.65M]
  ------------------
 1897|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 1);
 1898|  8.40k|        break;
 1899|  8.40k|    case EHTokUint3x2:
  ------------------
  |  Branch (1899:5): [True: 8.40k, False: 1.65M]
  ------------------
 1900|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 2);
 1901|  8.40k|        break;
 1902|  8.40k|    case EHTokUint3x3:
  ------------------
  |  Branch (1902:5): [True: 8.40k, False: 1.65M]
  ------------------
 1903|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 3);
 1904|  8.40k|        break;
 1905|  8.40k|    case EHTokUint3x4:
  ------------------
  |  Branch (1905:5): [True: 8.40k, False: 1.65M]
  ------------------
 1906|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 4);
 1907|  8.40k|        break;
 1908|  8.40k|    case EHTokUint4x1:
  ------------------
  |  Branch (1908:5): [True: 8.40k, False: 1.65M]
  ------------------
 1909|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 1);
 1910|  8.40k|        break;
 1911|  8.40k|    case EHTokUint4x2:
  ------------------
  |  Branch (1911:5): [True: 8.40k, False: 1.65M]
  ------------------
 1912|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 2);
 1913|  8.40k|        break;
 1914|  8.40k|    case EHTokUint4x3:
  ------------------
  |  Branch (1914:5): [True: 8.40k, False: 1.65M]
  ------------------
 1915|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 3);
 1916|  8.40k|        break;
 1917|  8.40k|    case EHTokUint4x4:
  ------------------
  |  Branch (1917:5): [True: 8.40k, False: 1.65M]
  ------------------
 1918|  8.40k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 4);
 1919|  8.40k|        break;
 1920|       |
 1921|    960|    case EHTokBool1x1:
  ------------------
  |  Branch (1921:5): [True: 960, False: 1.65M]
  ------------------
 1922|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 1);
 1923|    960|        break;
 1924|    960|    case EHTokBool1x2:
  ------------------
  |  Branch (1924:5): [True: 960, False: 1.65M]
  ------------------
 1925|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 2);
 1926|    960|        break;
 1927|    960|    case EHTokBool1x3:
  ------------------
  |  Branch (1927:5): [True: 960, False: 1.65M]
  ------------------
 1928|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 3);
 1929|    960|        break;
 1930|    960|    case EHTokBool1x4:
  ------------------
  |  Branch (1930:5): [True: 960, False: 1.65M]
  ------------------
 1931|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 4);
 1932|    960|        break;
 1933|    960|    case EHTokBool2x1:
  ------------------
  |  Branch (1933:5): [True: 960, False: 1.65M]
  ------------------
 1934|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 1);
 1935|    960|        break;
 1936|    960|    case EHTokBool2x2:
  ------------------
  |  Branch (1936:5): [True: 960, False: 1.65M]
  ------------------
 1937|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 2);
 1938|    960|        break;
 1939|    960|    case EHTokBool2x3:
  ------------------
  |  Branch (1939:5): [True: 960, False: 1.65M]
  ------------------
 1940|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 3);
 1941|    960|        break;
 1942|    960|    case EHTokBool2x4:
  ------------------
  |  Branch (1942:5): [True: 960, False: 1.65M]
  ------------------
 1943|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 4);
 1944|    960|        break;
 1945|    960|    case EHTokBool3x1:
  ------------------
  |  Branch (1945:5): [True: 960, False: 1.65M]
  ------------------
 1946|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 1);
 1947|    960|        break;
 1948|    960|    case EHTokBool3x2:
  ------------------
  |  Branch (1948:5): [True: 960, False: 1.65M]
  ------------------
 1949|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 2);
 1950|    960|        break;
 1951|    960|    case EHTokBool3x3:
  ------------------
  |  Branch (1951:5): [True: 960, False: 1.65M]
  ------------------
 1952|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 3);
 1953|    960|        break;
 1954|    960|    case EHTokBool3x4:
  ------------------
  |  Branch (1954:5): [True: 960, False: 1.65M]
  ------------------
 1955|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 4);
 1956|    960|        break;
 1957|    960|    case EHTokBool4x1:
  ------------------
  |  Branch (1957:5): [True: 960, False: 1.65M]
  ------------------
 1958|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 1);
 1959|    960|        break;
 1960|    960|    case EHTokBool4x2:
  ------------------
  |  Branch (1960:5): [True: 960, False: 1.65M]
  ------------------
 1961|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 2);
 1962|    960|        break;
 1963|    960|    case EHTokBool4x3:
  ------------------
  |  Branch (1963:5): [True: 960, False: 1.65M]
  ------------------
 1964|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 3);
 1965|    960|        break;
 1966|    960|    case EHTokBool4x4:
  ------------------
  |  Branch (1966:5): [True: 960, False: 1.65M]
  ------------------
 1967|    960|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 4);
 1968|    960|        break;
 1969|       |
 1970|  19.4k|    case EHTokFloat1x1:
  ------------------
  |  Branch (1970:5): [True: 19.4k, False: 1.63M]
  ------------------
 1971|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 1);
 1972|  19.4k|        break;
 1973|  19.4k|    case EHTokFloat1x2:
  ------------------
  |  Branch (1973:5): [True: 19.4k, False: 1.63M]
  ------------------
 1974|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 2);
 1975|  19.4k|        break;
 1976|  19.4k|    case EHTokFloat1x3:
  ------------------
  |  Branch (1976:5): [True: 19.4k, False: 1.63M]
  ------------------
 1977|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 3);
 1978|  19.4k|        break;
 1979|  19.4k|    case EHTokFloat1x4:
  ------------------
  |  Branch (1979:5): [True: 19.4k, False: 1.63M]
  ------------------
 1980|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 4);
 1981|  19.4k|        break;
 1982|  19.4k|    case EHTokFloat2x1:
  ------------------
  |  Branch (1982:5): [True: 19.4k, False: 1.63M]
  ------------------
 1983|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 1);
 1984|  19.4k|        break;
 1985|  19.4k|    case EHTokFloat2x2:
  ------------------
  |  Branch (1985:5): [True: 19.4k, False: 1.63M]
  ------------------
 1986|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 2);
 1987|  19.4k|        break;
 1988|  19.4k|    case EHTokFloat2x3:
  ------------------
  |  Branch (1988:5): [True: 19.4k, False: 1.63M]
  ------------------
 1989|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 3);
 1990|  19.4k|        break;
 1991|  19.4k|    case EHTokFloat2x4:
  ------------------
  |  Branch (1991:5): [True: 19.4k, False: 1.63M]
  ------------------
 1992|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 4);
 1993|  19.4k|        break;
 1994|  19.4k|    case EHTokFloat3x1:
  ------------------
  |  Branch (1994:5): [True: 19.4k, False: 1.63M]
  ------------------
 1995|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 1);
 1996|  19.4k|        break;
 1997|  19.4k|    case EHTokFloat3x2:
  ------------------
  |  Branch (1997:5): [True: 19.4k, False: 1.63M]
  ------------------
 1998|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 2);
 1999|  19.4k|        break;
 2000|  19.4k|    case EHTokFloat3x3:
  ------------------
  |  Branch (2000:5): [True: 19.4k, False: 1.63M]
  ------------------
 2001|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 3);
 2002|  19.4k|        break;
 2003|  19.4k|    case EHTokFloat3x4:
  ------------------
  |  Branch (2003:5): [True: 19.4k, False: 1.63M]
  ------------------
 2004|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 4);
 2005|  19.4k|        break;
 2006|  19.4k|    case EHTokFloat4x1:
  ------------------
  |  Branch (2006:5): [True: 19.4k, False: 1.63M]
  ------------------
 2007|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 1);
 2008|  19.4k|        break;
 2009|  19.4k|    case EHTokFloat4x2:
  ------------------
  |  Branch (2009:5): [True: 19.4k, False: 1.63M]
  ------------------
 2010|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 2);
 2011|  19.4k|        break;
 2012|  19.4k|    case EHTokFloat4x3:
  ------------------
  |  Branch (2012:5): [True: 19.4k, False: 1.63M]
  ------------------
 2013|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 3);
 2014|  19.4k|        break;
 2015|  19.4k|    case EHTokFloat4x4:
  ------------------
  |  Branch (2015:5): [True: 19.4k, False: 1.63M]
  ------------------
 2016|  19.4k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 4);
 2017|  19.4k|        break;
 2018|       |
 2019|      0|    case EHTokHalf1x1:
  ------------------
  |  Branch (2019:5): [True: 0, False: 1.65M]
  ------------------
 2020|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 1);
 2021|      0|        break;
 2022|      0|    case EHTokHalf1x2:
  ------------------
  |  Branch (2022:5): [True: 0, False: 1.65M]
  ------------------
 2023|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 2);
 2024|      0|        break;
 2025|      0|    case EHTokHalf1x3:
  ------------------
  |  Branch (2025:5): [True: 0, False: 1.65M]
  ------------------
 2026|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 3);
 2027|      0|        break;
 2028|      0|    case EHTokHalf1x4:
  ------------------
  |  Branch (2028:5): [True: 0, False: 1.65M]
  ------------------
 2029|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 4);
 2030|      0|        break;
 2031|      0|    case EHTokHalf2x1:
  ------------------
  |  Branch (2031:5): [True: 0, False: 1.65M]
  ------------------
 2032|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 1);
 2033|      0|        break;
 2034|      0|    case EHTokHalf2x2:
  ------------------
  |  Branch (2034:5): [True: 0, False: 1.65M]
  ------------------
 2035|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 2);
 2036|      0|        break;
 2037|      0|    case EHTokHalf2x3:
  ------------------
  |  Branch (2037:5): [True: 0, False: 1.65M]
  ------------------
 2038|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 3);
 2039|      0|        break;
 2040|      0|    case EHTokHalf2x4:
  ------------------
  |  Branch (2040:5): [True: 0, False: 1.65M]
  ------------------
 2041|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 4);
 2042|      0|        break;
 2043|      0|    case EHTokHalf3x1:
  ------------------
  |  Branch (2043:5): [True: 0, False: 1.65M]
  ------------------
 2044|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 1);
 2045|      0|        break;
 2046|      0|    case EHTokHalf3x2:
  ------------------
  |  Branch (2046:5): [True: 0, False: 1.65M]
  ------------------
 2047|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 2);
 2048|      0|        break;
 2049|      0|    case EHTokHalf3x3:
  ------------------
  |  Branch (2049:5): [True: 0, False: 1.65M]
  ------------------
 2050|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 3);
 2051|      0|        break;
 2052|      0|    case EHTokHalf3x4:
  ------------------
  |  Branch (2052:5): [True: 0, False: 1.65M]
  ------------------
 2053|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 4);
 2054|      0|        break;
 2055|      0|    case EHTokHalf4x1:
  ------------------
  |  Branch (2055:5): [True: 0, False: 1.65M]
  ------------------
 2056|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 1);
 2057|      0|        break;
 2058|      0|    case EHTokHalf4x2:
  ------------------
  |  Branch (2058:5): [True: 0, False: 1.65M]
  ------------------
 2059|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 2);
 2060|      0|        break;
 2061|      0|    case EHTokHalf4x3:
  ------------------
  |  Branch (2061:5): [True: 0, False: 1.65M]
  ------------------
 2062|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 3);
 2063|      0|        break;
 2064|      0|    case EHTokHalf4x4:
  ------------------
  |  Branch (2064:5): [True: 0, False: 1.65M]
  ------------------
 2065|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 4);
 2066|      0|        break;
 2067|       |
 2068|  1.44k|    case EHTokDouble1x1:
  ------------------
  |  Branch (2068:5): [True: 1.44k, False: 1.65M]
  ------------------
 2069|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 1);
 2070|  1.44k|        break;
 2071|  1.44k|    case EHTokDouble1x2:
  ------------------
  |  Branch (2071:5): [True: 1.44k, False: 1.65M]
  ------------------
 2072|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 2);
 2073|  1.44k|        break;
 2074|  1.44k|    case EHTokDouble1x3:
  ------------------
  |  Branch (2074:5): [True: 1.44k, False: 1.65M]
  ------------------
 2075|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 3);
 2076|  1.44k|        break;
 2077|  1.44k|    case EHTokDouble1x4:
  ------------------
  |  Branch (2077:5): [True: 1.44k, False: 1.65M]
  ------------------
 2078|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 4);
 2079|  1.44k|        break;
 2080|  1.44k|    case EHTokDouble2x1:
  ------------------
  |  Branch (2080:5): [True: 1.44k, False: 1.65M]
  ------------------
 2081|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 1);
 2082|  1.44k|        break;
 2083|  1.44k|    case EHTokDouble2x2:
  ------------------
  |  Branch (2083:5): [True: 1.44k, False: 1.65M]
  ------------------
 2084|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 2);
 2085|  1.44k|        break;
 2086|  1.44k|    case EHTokDouble2x3:
  ------------------
  |  Branch (2086:5): [True: 1.44k, False: 1.65M]
  ------------------
 2087|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 3);
 2088|  1.44k|        break;
 2089|  1.44k|    case EHTokDouble2x4:
  ------------------
  |  Branch (2089:5): [True: 1.44k, False: 1.65M]
  ------------------
 2090|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 4);
 2091|  1.44k|        break;
 2092|  1.44k|    case EHTokDouble3x1:
  ------------------
  |  Branch (2092:5): [True: 1.44k, False: 1.65M]
  ------------------
 2093|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 1);
 2094|  1.44k|        break;
 2095|  1.44k|    case EHTokDouble3x2:
  ------------------
  |  Branch (2095:5): [True: 1.44k, False: 1.65M]
  ------------------
 2096|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 2);
 2097|  1.44k|        break;
 2098|  1.44k|    case EHTokDouble3x3:
  ------------------
  |  Branch (2098:5): [True: 1.44k, False: 1.65M]
  ------------------
 2099|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 3);
 2100|  1.44k|        break;
 2101|  1.44k|    case EHTokDouble3x4:
  ------------------
  |  Branch (2101:5): [True: 1.44k, False: 1.65M]
  ------------------
 2102|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 4);
 2103|  1.44k|        break;
 2104|  1.44k|    case EHTokDouble4x1:
  ------------------
  |  Branch (2104:5): [True: 1.44k, False: 1.65M]
  ------------------
 2105|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 1);
 2106|  1.44k|        break;
 2107|  1.44k|    case EHTokDouble4x2:
  ------------------
  |  Branch (2107:5): [True: 1.44k, False: 1.65M]
  ------------------
 2108|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 2);
 2109|  1.44k|        break;
 2110|  1.44k|    case EHTokDouble4x3:
  ------------------
  |  Branch (2110:5): [True: 1.44k, False: 1.65M]
  ------------------
 2111|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 3);
 2112|  1.44k|        break;
 2113|  1.44k|    case EHTokDouble4x4:
  ------------------
  |  Branch (2113:5): [True: 1.44k, False: 1.65M]
  ------------------
 2114|  1.44k|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 4);
 2115|  1.44k|        break;
 2116|       |
 2117|      0|    case EHTokMin16float1x1:
  ------------------
  |  Branch (2117:5): [True: 0, False: 1.65M]
  ------------------
 2118|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2119|      0|        break;
 2120|      0|    case EHTokMin16float1x2:
  ------------------
  |  Branch (2120:5): [True: 0, False: 1.65M]
  ------------------
 2121|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2122|      0|        break;
 2123|      0|    case EHTokMin16float1x3:
  ------------------
  |  Branch (2123:5): [True: 0, False: 1.65M]
  ------------------
 2124|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2125|      0|        break;
 2126|      0|    case EHTokMin16float1x4:
  ------------------
  |  Branch (2126:5): [True: 0, False: 1.65M]
  ------------------
 2127|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2128|      0|        break;
 2129|      0|    case EHTokMin16float2x1:
  ------------------
  |  Branch (2129:5): [True: 0, False: 1.65M]
  ------------------
 2130|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2131|      0|        break;
 2132|      0|    case EHTokMin16float2x2:
  ------------------
  |  Branch (2132:5): [True: 0, False: 1.65M]
  ------------------
 2133|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2134|      0|        break;
 2135|      0|    case EHTokMin16float2x3:
  ------------------
  |  Branch (2135:5): [True: 0, False: 1.65M]
  ------------------
 2136|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2137|      0|        break;
 2138|      0|    case EHTokMin16float2x4:
  ------------------
  |  Branch (2138:5): [True: 0, False: 1.65M]
  ------------------
 2139|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2140|      0|        break;
 2141|      0|    case EHTokMin16float3x1:
  ------------------
  |  Branch (2141:5): [True: 0, False: 1.65M]
  ------------------
 2142|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2143|      0|        break;
 2144|      0|    case EHTokMin16float3x2:
  ------------------
  |  Branch (2144:5): [True: 0, False: 1.65M]
  ------------------
 2145|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2146|      0|        break;
 2147|      0|    case EHTokMin16float3x3:
  ------------------
  |  Branch (2147:5): [True: 0, False: 1.65M]
  ------------------
 2148|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2149|      0|        break;
 2150|      0|    case EHTokMin16float3x4:
  ------------------
  |  Branch (2150:5): [True: 0, False: 1.65M]
  ------------------
 2151|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2152|      0|        break;
 2153|      0|    case EHTokMin16float4x1:
  ------------------
  |  Branch (2153:5): [True: 0, False: 1.65M]
  ------------------
 2154|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2155|      0|        break;
 2156|      0|    case EHTokMin16float4x2:
  ------------------
  |  Branch (2156:5): [True: 0, False: 1.65M]
  ------------------
 2157|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2158|      0|        break;
 2159|      0|    case EHTokMin16float4x3:
  ------------------
  |  Branch (2159:5): [True: 0, False: 1.65M]
  ------------------
 2160|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2161|      0|        break;
 2162|      0|    case EHTokMin16float4x4:
  ------------------
  |  Branch (2162:5): [True: 0, False: 1.65M]
  ------------------
 2163|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2164|      0|        break;
 2165|       |
 2166|      0|    case EHTokMin10float1x1:
  ------------------
  |  Branch (2166:5): [True: 0, False: 1.65M]
  ------------------
 2167|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2168|      0|        break;
 2169|      0|    case EHTokMin10float1x2:
  ------------------
  |  Branch (2169:5): [True: 0, False: 1.65M]
  ------------------
 2170|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2171|      0|        break;
 2172|      0|    case EHTokMin10float1x3:
  ------------------
  |  Branch (2172:5): [True: 0, False: 1.65M]
  ------------------
 2173|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2174|      0|        break;
 2175|      0|    case EHTokMin10float1x4:
  ------------------
  |  Branch (2175:5): [True: 0, False: 1.65M]
  ------------------
 2176|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2177|      0|        break;
 2178|      0|    case EHTokMin10float2x1:
  ------------------
  |  Branch (2178:5): [True: 0, False: 1.65M]
  ------------------
 2179|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2180|      0|        break;
 2181|      0|    case EHTokMin10float2x2:
  ------------------
  |  Branch (2181:5): [True: 0, False: 1.65M]
  ------------------
 2182|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2183|      0|        break;
 2184|      0|    case EHTokMin10float2x3:
  ------------------
  |  Branch (2184:5): [True: 0, False: 1.65M]
  ------------------
 2185|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2186|      0|        break;
 2187|      0|    case EHTokMin10float2x4:
  ------------------
  |  Branch (2187:5): [True: 0, False: 1.65M]
  ------------------
 2188|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2189|      0|        break;
 2190|      0|    case EHTokMin10float3x1:
  ------------------
  |  Branch (2190:5): [True: 0, False: 1.65M]
  ------------------
 2191|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2192|      0|        break;
 2193|      0|    case EHTokMin10float3x2:
  ------------------
  |  Branch (2193:5): [True: 0, False: 1.65M]
  ------------------
 2194|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2195|      0|        break;
 2196|      0|    case EHTokMin10float3x3:
  ------------------
  |  Branch (2196:5): [True: 0, False: 1.65M]
  ------------------
 2197|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2198|      0|        break;
 2199|      0|    case EHTokMin10float3x4:
  ------------------
  |  Branch (2199:5): [True: 0, False: 1.65M]
  ------------------
 2200|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2201|      0|        break;
 2202|      0|    case EHTokMin10float4x1:
  ------------------
  |  Branch (2202:5): [True: 0, False: 1.65M]
  ------------------
 2203|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2204|      0|        break;
 2205|      0|    case EHTokMin10float4x2:
  ------------------
  |  Branch (2205:5): [True: 0, False: 1.65M]
  ------------------
 2206|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2207|      0|        break;
 2208|      0|    case EHTokMin10float4x3:
  ------------------
  |  Branch (2208:5): [True: 0, False: 1.65M]
  ------------------
 2209|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2210|      0|        break;
 2211|      0|    case EHTokMin10float4x4:
  ------------------
  |  Branch (2211:5): [True: 0, False: 1.65M]
  ------------------
 2212|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2213|      0|        break;
 2214|       |
 2215|      0|    case EHTokMin16int1x1:
  ------------------
  |  Branch (2215:5): [True: 0, False: 1.65M]
  ------------------
 2216|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2217|      0|        break;
 2218|      0|    case EHTokMin16int1x2:
  ------------------
  |  Branch (2218:5): [True: 0, False: 1.65M]
  ------------------
 2219|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2220|      0|        break;
 2221|      0|    case EHTokMin16int1x3:
  ------------------
  |  Branch (2221:5): [True: 0, False: 1.65M]
  ------------------
 2222|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2223|      0|        break;
 2224|      0|    case EHTokMin16int1x4:
  ------------------
  |  Branch (2224:5): [True: 0, False: 1.65M]
  ------------------
 2225|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2226|      0|        break;
 2227|      0|    case EHTokMin16int2x1:
  ------------------
  |  Branch (2227:5): [True: 0, False: 1.65M]
  ------------------
 2228|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2229|      0|        break;
 2230|      0|    case EHTokMin16int2x2:
  ------------------
  |  Branch (2230:5): [True: 0, False: 1.65M]
  ------------------
 2231|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2232|      0|        break;
 2233|      0|    case EHTokMin16int2x3:
  ------------------
  |  Branch (2233:5): [True: 0, False: 1.65M]
  ------------------
 2234|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2235|      0|        break;
 2236|      0|    case EHTokMin16int2x4:
  ------------------
  |  Branch (2236:5): [True: 0, False: 1.65M]
  ------------------
 2237|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2238|      0|        break;
 2239|      0|    case EHTokMin16int3x1:
  ------------------
  |  Branch (2239:5): [True: 0, False: 1.65M]
  ------------------
 2240|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2241|      0|        break;
 2242|      0|    case EHTokMin16int3x2:
  ------------------
  |  Branch (2242:5): [True: 0, False: 1.65M]
  ------------------
 2243|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2244|      0|        break;
 2245|      0|    case EHTokMin16int3x3:
  ------------------
  |  Branch (2245:5): [True: 0, False: 1.65M]
  ------------------
 2246|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2247|      0|        break;
 2248|      0|    case EHTokMin16int3x4:
  ------------------
  |  Branch (2248:5): [True: 0, False: 1.65M]
  ------------------
 2249|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2250|      0|        break;
 2251|      0|    case EHTokMin16int4x1:
  ------------------
  |  Branch (2251:5): [True: 0, False: 1.65M]
  ------------------
 2252|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2253|      0|        break;
 2254|      0|    case EHTokMin16int4x2:
  ------------------
  |  Branch (2254:5): [True: 0, False: 1.65M]
  ------------------
 2255|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2256|      0|        break;
 2257|      0|    case EHTokMin16int4x3:
  ------------------
  |  Branch (2257:5): [True: 0, False: 1.65M]
  ------------------
 2258|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2259|      0|        break;
 2260|      0|    case EHTokMin16int4x4:
  ------------------
  |  Branch (2260:5): [True: 0, False: 1.65M]
  ------------------
 2261|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2262|      0|        break;
 2263|       |
 2264|      0|    case EHTokMin12int1x1:
  ------------------
  |  Branch (2264:5): [True: 0, False: 1.65M]
  ------------------
 2265|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2266|      0|        break;
 2267|      0|    case EHTokMin12int1x2:
  ------------------
  |  Branch (2267:5): [True: 0, False: 1.65M]
  ------------------
 2268|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2269|      0|        break;
 2270|      0|    case EHTokMin12int1x3:
  ------------------
  |  Branch (2270:5): [True: 0, False: 1.65M]
  ------------------
 2271|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2272|      0|        break;
 2273|      0|    case EHTokMin12int1x4:
  ------------------
  |  Branch (2273:5): [True: 0, False: 1.65M]
  ------------------
 2274|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2275|      0|        break;
 2276|      0|    case EHTokMin12int2x1:
  ------------------
  |  Branch (2276:5): [True: 0, False: 1.65M]
  ------------------
 2277|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2278|      0|        break;
 2279|      0|    case EHTokMin12int2x2:
  ------------------
  |  Branch (2279:5): [True: 0, False: 1.65M]
  ------------------
 2280|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2281|      0|        break;
 2282|      0|    case EHTokMin12int2x3:
  ------------------
  |  Branch (2282:5): [True: 0, False: 1.65M]
  ------------------
 2283|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2284|      0|        break;
 2285|      0|    case EHTokMin12int2x4:
  ------------------
  |  Branch (2285:5): [True: 0, False: 1.65M]
  ------------------
 2286|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2287|      0|        break;
 2288|      0|    case EHTokMin12int3x1:
  ------------------
  |  Branch (2288:5): [True: 0, False: 1.65M]
  ------------------
 2289|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2290|      0|        break;
 2291|      0|    case EHTokMin12int3x2:
  ------------------
  |  Branch (2291:5): [True: 0, False: 1.65M]
  ------------------
 2292|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2293|      0|        break;
 2294|      0|    case EHTokMin12int3x3:
  ------------------
  |  Branch (2294:5): [True: 0, False: 1.65M]
  ------------------
 2295|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2296|      0|        break;
 2297|      0|    case EHTokMin12int3x4:
  ------------------
  |  Branch (2297:5): [True: 0, False: 1.65M]
  ------------------
 2298|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2299|      0|        break;
 2300|      0|    case EHTokMin12int4x1:
  ------------------
  |  Branch (2300:5): [True: 0, False: 1.65M]
  ------------------
 2301|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2302|      0|        break;
 2303|      0|    case EHTokMin12int4x2:
  ------------------
  |  Branch (2303:5): [True: 0, False: 1.65M]
  ------------------
 2304|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2305|      0|        break;
 2306|      0|    case EHTokMin12int4x3:
  ------------------
  |  Branch (2306:5): [True: 0, False: 1.65M]
  ------------------
 2307|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2308|      0|        break;
 2309|      0|    case EHTokMin12int4x4:
  ------------------
  |  Branch (2309:5): [True: 0, False: 1.65M]
  ------------------
 2310|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2311|      0|        break;
 2312|       |
 2313|      0|    case EHTokMin16uint1x1:
  ------------------
  |  Branch (2313:5): [True: 0, False: 1.65M]
  ------------------
 2314|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2315|      0|        break;
 2316|      0|    case EHTokMin16uint1x2:
  ------------------
  |  Branch (2316:5): [True: 0, False: 1.65M]
  ------------------
 2317|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2318|      0|        break;
 2319|      0|    case EHTokMin16uint1x3:
  ------------------
  |  Branch (2319:5): [True: 0, False: 1.65M]
  ------------------
 2320|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2321|      0|        break;
 2322|      0|    case EHTokMin16uint1x4:
  ------------------
  |  Branch (2322:5): [True: 0, False: 1.65M]
  ------------------
 2323|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2324|      0|        break;
 2325|      0|    case EHTokMin16uint2x1:
  ------------------
  |  Branch (2325:5): [True: 0, False: 1.65M]
  ------------------
 2326|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2327|      0|        break;
 2328|      0|    case EHTokMin16uint2x2:
  ------------------
  |  Branch (2328:5): [True: 0, False: 1.65M]
  ------------------
 2329|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2330|      0|        break;
 2331|      0|    case EHTokMin16uint2x3:
  ------------------
  |  Branch (2331:5): [True: 0, False: 1.65M]
  ------------------
 2332|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2333|      0|        break;
 2334|      0|    case EHTokMin16uint2x4:
  ------------------
  |  Branch (2334:5): [True: 0, False: 1.65M]
  ------------------
 2335|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2336|      0|        break;
 2337|      0|    case EHTokMin16uint3x1:
  ------------------
  |  Branch (2337:5): [True: 0, False: 1.65M]
  ------------------
 2338|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2339|      0|        break;
 2340|      0|    case EHTokMin16uint3x2:
  ------------------
  |  Branch (2340:5): [True: 0, False: 1.65M]
  ------------------
 2341|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2342|      0|        break;
 2343|      0|    case EHTokMin16uint3x3:
  ------------------
  |  Branch (2343:5): [True: 0, False: 1.65M]
  ------------------
 2344|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2345|      0|        break;
 2346|      0|    case EHTokMin16uint3x4:
  ------------------
  |  Branch (2346:5): [True: 0, False: 1.65M]
  ------------------
 2347|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2348|      0|        break;
 2349|      0|    case EHTokMin16uint4x1:
  ------------------
  |  Branch (2349:5): [True: 0, False: 1.65M]
  ------------------
 2350|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2351|      0|        break;
 2352|      0|    case EHTokMin16uint4x2:
  ------------------
  |  Branch (2352:5): [True: 0, False: 1.65M]
  ------------------
 2353|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2354|      0|        break;
 2355|      0|    case EHTokMin16uint4x3:
  ------------------
  |  Branch (2355:5): [True: 0, False: 1.65M]
  ------------------
 2356|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2357|      0|        break;
 2358|      0|    case EHTokMin16uint4x4:
  ------------------
  |  Branch (2358:5): [True: 0, False: 1.65M]
  ------------------
 2359|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2360|      0|        break;
 2361|       |
 2362|  1.03k|    default:
  ------------------
  |  Branch (2362:5): [True: 1.03k, False: 1.65M]
  ------------------
 2363|  1.03k|        return false;
 2364|  1.65M|    }
 2365|       |
 2366|  1.48M|    advanceToken();
 2367|       |
 2368|  1.48M|    if ((isUnorm || isSnorm) && !type.isFloatingDomain()) {
  ------------------
  |  Branch (2368:10): [True: 0, False: 1.48M]
  |  Branch (2368:21): [True: 0, False: 1.48M]
  |  Branch (2368:33): [True: 0, False: 0]
  ------------------
 2369|      0|        parseContext.error(token.loc, "unorm and snorm only valid in floating point domain", "", "");
 2370|      0|        return false;
 2371|      0|    }
 2372|       |
 2373|  1.48M|    return true;
 2374|  1.48M|}
_ZN7glslang11HlslGrammar12acceptStructERNS_5TTypeERP11TIntermNode:
 2388|      2|{
 2389|       |    // This storage qualifier will tell us whether it's an AST
 2390|       |    // block type or just a generic structure type.
 2391|      2|    TStorageQualifier storageQualifier = EvqTemporary;
 2392|      2|    bool readonly = false;
 2393|       |
 2394|      2|    if (acceptTokenClass(EHTokCBuffer)) {
  ------------------
  |  Branch (2394:9): [True: 0, False: 2]
  ------------------
 2395|       |        // CBUFFER
 2396|      0|        storageQualifier = EvqUniform;
 2397|      2|    } else if (acceptTokenClass(EHTokTBuffer)) {
  ------------------
  |  Branch (2397:16): [True: 0, False: 2]
  ------------------
 2398|       |        // TBUFFER
 2399|      0|        storageQualifier = EvqBuffer;
 2400|      0|        readonly = true;
 2401|      2|    } else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) {
  ------------------
  |  Branch (2401:16): [True: 2, False: 0]
  |  Branch (2401:50): [True: 0, False: 2]
  ------------------
 2402|       |        // Neither CLASS nor STRUCT
 2403|      0|        return false;
 2404|      0|    }
 2405|       |
 2406|       |    // Now known to be one of CBUFFER, TBUFFER, CLASS, or STRUCT
 2407|       |
 2408|       |
 2409|       |    // IDENTIFIER.  It might also be a keyword which can double as an identifier.
 2410|       |    // For example:  'cbuffer ConstantBuffer' or 'struct ConstantBuffer' is legal.
 2411|       |    // 'cbuffer int' is also legal, and 'struct int' appears rejected only because
 2412|       |    // it attempts to redefine the 'int' type.
 2413|      2|    const char* idString = getTypeString(peek());
 2414|      2|    TString structName = "";
 2415|      2|    if (peekTokenClass(EHTokIdentifier) || idString != nullptr) {
  ------------------
  |  Branch (2415:9): [True: 2, False: 0]
  |  Branch (2415:44): [True: 0, False: 0]
  ------------------
 2416|      2|        if (idString != nullptr)
  ------------------
  |  Branch (2416:13): [True: 0, False: 2]
  ------------------
 2417|      0|            structName = *idString;
 2418|      2|        else
 2419|      2|            structName = *token.string;
 2420|      2|        advanceToken();
 2421|      2|    }
 2422|       |
 2423|       |    // post_decls
 2424|      2|    TQualifier postDeclQualifier;
 2425|      2|    postDeclQualifier.clear();
 2426|      2|    bool postDeclsFound = acceptPostDecls(postDeclQualifier);
 2427|       |
 2428|       |    // LEFT_BRACE, or
 2429|       |    // struct_type IDENTIFIER
 2430|      2|    if (! acceptTokenClass(EHTokLeftBrace)) {
  ------------------
  |  Branch (2430:9): [True: 0, False: 2]
  ------------------
 2431|      0|        if (structName.size() > 0 && !postDeclsFound && parseContext.lookupUserType(structName, type) != nullptr) {
  ------------------
  |  Branch (2431:13): [True: 0, False: 0]
  |  Branch (2431:38): [True: 0, False: 0]
  |  Branch (2431:57): [True: 0, False: 0]
  ------------------
 2432|       |            // struct_type IDENTIFIER
 2433|      0|            return true;
 2434|      0|        } else {
 2435|      0|            expected("{");
 2436|      0|            return false;
 2437|      0|        }
 2438|      0|    }
 2439|       |
 2440|       |
 2441|       |    // struct_declaration_list
 2442|      2|    TTypeList* typeList;
 2443|       |    // Save each member function so they can be processed after we have a fully formed 'this'.
 2444|      2|    TVector<TFunctionDeclarator> functionDeclarators;
 2445|       |
 2446|      2|    parseContext.pushNamespace(structName);
 2447|      2|    bool acceptedList = acceptStructDeclarationList(typeList, nodeList, functionDeclarators);
 2448|      2|    parseContext.popNamespace();
 2449|       |
 2450|      2|    if (! acceptedList) {
  ------------------
  |  Branch (2450:9): [True: 0, False: 2]
  ------------------
 2451|      0|        expected("struct member declarations");
 2452|      0|        return false;
 2453|      0|    }
 2454|       |
 2455|       |    // RIGHT_BRACE
 2456|      2|    if (! acceptTokenClass(EHTokRightBrace)) {
  ------------------
  |  Branch (2456:9): [True: 0, False: 2]
  ------------------
 2457|      0|        expected("}");
 2458|      0|        return false;
 2459|      0|    }
 2460|       |
 2461|       |    // create the user-defined type
 2462|      2|    if (storageQualifier == EvqTemporary)
  ------------------
  |  Branch (2462:9): [True: 2, False: 0]
  ------------------
 2463|      2|        new(&type) TType(typeList, structName);
 2464|      0|    else {
 2465|      0|        postDeclQualifier.storage = storageQualifier;
 2466|      0|        postDeclQualifier.readonly = readonly;
 2467|      0|        new(&type) TType(typeList, structName, postDeclQualifier); // sets EbtBlock
 2468|      0|    }
 2469|       |
 2470|      2|    parseContext.declareStruct(token.loc, structName, type);
 2471|       |
 2472|       |    // For member functions: now that we know the type of 'this', go back and
 2473|       |    // - add their implicit argument with 'this' (not to the mangling, just the argument list)
 2474|       |    // - parse the functions, their tokens were saved for deferred parsing (now)
 2475|      2|    for (int b = 0; b < (int)functionDeclarators.size(); ++b) {
  ------------------
  |  Branch (2475:21): [True: 0, False: 2]
  ------------------
 2476|       |        // update signature
 2477|      0|        if (functionDeclarators[b].function->hasImplicitThis())
  ------------------
  |  Branch (2477:13): [True: 0, False: 0]
  ------------------
 2478|      0|            functionDeclarators[b].function->addThisParameter(type, intermediate.implicitThisName);
 2479|      0|    }
 2480|       |
 2481|       |    // All member functions get parsed inside the class/struct namespace and with the
 2482|       |    // class/struct members in a symbol-table level.
 2483|      2|    parseContext.pushNamespace(structName);
 2484|      2|    parseContext.pushThisScope(type, functionDeclarators);
 2485|      2|    bool deferredSuccess = true;
 2486|      2|    for (int b = 0; b < (int)functionDeclarators.size() && deferredSuccess; ++b) {
  ------------------
  |  Branch (2486:21): [True: 0, False: 2]
  |  Branch (2486:60): [True: 0, False: 0]
  ------------------
 2487|       |        // parse body
 2488|      0|        pushTokenStream(functionDeclarators[b].body);
 2489|      0|        if (! acceptFunctionBody(functionDeclarators[b], nodeList))
  ------------------
  |  Branch (2489:13): [True: 0, False: 0]
  ------------------
 2490|      0|            deferredSuccess = false;
 2491|      0|        popTokenStream();
 2492|      0|    }
 2493|      2|    parseContext.popThisScope();
 2494|      2|    parseContext.popNamespace();
 2495|       |
 2496|      2|    return deferredSuccess;
 2497|      2|}
_ZN7glslang11HlslGrammar27acceptStructDeclarationListERPNS_7TVectorINS_8TTypeLocEEERP11TIntermNodeRNS1_INS_19TFunctionDeclaratorEEE:
 2691|      2|{
 2692|      2|    typeList = new TTypeList();
 2693|      2|    HlslToken idToken;
 2694|       |
 2695|      4|    do {
 2696|       |        // success on seeing the RIGHT_BRACE coming up
 2697|      4|        if (peekTokenClass(EHTokRightBrace))
  ------------------
  |  Branch (2697:13): [True: 2, False: 2]
  ------------------
 2698|      2|            break;
 2699|       |
 2700|       |        // struct_declaration
 2701|       |
 2702|       |        // attributes
 2703|      2|        TAttributes attributes;
 2704|      2|        acceptAttributes(attributes);
 2705|       |
 2706|      2|        bool declarator_list = false;
 2707|       |
 2708|       |        // fully_specified_type
 2709|      2|        TType memberType;
 2710|      2|        if (! acceptFullySpecifiedType(memberType, nodeList, attributes)) {
  ------------------
  |  Branch (2710:13): [True: 0, False: 2]
  ------------------
 2711|      0|            expected("member type");
 2712|      0|            return false;
 2713|      0|        }
 2714|       |        
 2715|       |        // merge in the attributes
 2716|      2|        parseContext.transferTypeAttributes(token.loc, attributes, memberType);
 2717|       |
 2718|       |        // struct_declarator COMMA struct_declarator ...
 2719|      2|        bool functionDefinitionAccepted = false;
 2720|      2|        do {
 2721|      2|            if (! acceptIdentifier(idToken)) {
  ------------------
  |  Branch (2721:17): [True: 0, False: 2]
  ------------------
 2722|      0|                expected("member name");
 2723|      0|                return false;
 2724|      0|            }
 2725|       |
 2726|      2|            if (peekTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (2726:17): [True: 0, False: 2]
  ------------------
 2727|       |                // function_parameters
 2728|      0|                if (!declarator_list) {
  ------------------
  |  Branch (2728:21): [True: 0, False: 0]
  ------------------
 2729|      0|                    declarators.resize(declarators.size() + 1);
 2730|       |                    // request a token stream for deferred processing
 2731|      0|                    functionDefinitionAccepted = acceptMemberFunctionDefinition(nodeList, memberType, *idToken.string,
 2732|      0|                                                                                declarators.back());
 2733|      0|                    if (functionDefinitionAccepted)
  ------------------
  |  Branch (2733:25): [True: 0, False: 0]
  ------------------
 2734|      0|                        break;
 2735|      0|                }
 2736|      0|                expected("member-function definition");
 2737|      0|                return false;
 2738|      2|            } else {
 2739|       |                // add it to the list of members
 2740|      2|                TTypeLoc member = { new TType(EbtVoid), token.loc };
 2741|      2|                member.type->shallowCopy(memberType);
 2742|      2|                member.type->setFieldName(*idToken.string);
 2743|      2|                typeList->push_back(member);
 2744|       |
 2745|       |                // array_specifier
 2746|      2|                TArraySizes* arraySizes = nullptr;
 2747|      2|                acceptArraySpecifier(arraySizes);
 2748|      2|                if (arraySizes)
  ------------------
  |  Branch (2748:21): [True: 1, False: 1]
  ------------------
 2749|      1|                    typeList->back().type->transferArraySizes(arraySizes);
 2750|       |
 2751|      2|                acceptPostDecls(member.type->getQualifier());
 2752|       |
 2753|       |                // EQUAL assignment_expression
 2754|      2|                if (acceptTokenClass(EHTokAssign)) {
  ------------------
  |  Branch (2754:21): [True: 0, False: 2]
  ------------------
 2755|      0|                    parseContext.warn(idToken.loc, "struct-member initializers ignored", "typedef", "");
 2756|      0|                    TIntermTyped* expressionNode = nullptr;
 2757|      0|                    if (! acceptAssignmentExpression(expressionNode)) {
  ------------------
  |  Branch (2757:25): [True: 0, False: 0]
  ------------------
 2758|      0|                        expected("initializer");
 2759|      0|                        return false;
 2760|      0|                    }
 2761|      0|                }
 2762|      2|            }
 2763|       |            // success on seeing the SEMICOLON coming up
 2764|      2|            if (peekTokenClass(EHTokSemicolon))
  ------------------
  |  Branch (2764:17): [True: 2, False: 0]
  ------------------
 2765|      2|                break;
 2766|       |
 2767|       |            // COMMA
 2768|      0|            if (acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (2768:17): [True: 0, False: 0]
  ------------------
 2769|      0|                declarator_list = true;
 2770|      0|            else {
 2771|      0|                expected(",");
 2772|      0|                return false;
 2773|      0|            }
 2774|       |
 2775|      0|        } while (true);
  ------------------
  |  Branch (2775:18): [True: 0, Folded]
  ------------------
 2776|       |
 2777|       |        // SEMI_COLON
 2778|      2|        if (! functionDefinitionAccepted && ! acceptTokenClass(EHTokSemicolon)) {
  ------------------
  |  Branch (2778:13): [True: 2, False: 0]
  |  Branch (2778:45): [True: 0, False: 2]
  ------------------
 2779|      0|            expected(";");
 2780|      0|            return false;
 2781|      0|        }
 2782|       |
 2783|      2|    } while (true);
  ------------------
  |  Branch (2783:14): [True: 2, Folded]
  ------------------
 2784|       |
 2785|      2|    return true;
 2786|      2|}
_ZN7glslang11HlslGrammar24acceptFunctionParametersERNS_9TFunctionE:
 2828|   480k|{
 2829|   480k|    parseContext.beginParameterParsing(function);
 2830|       |
 2831|       |    // LEFT_PAREN
 2832|   480k|    if (! acceptTokenClass(EHTokLeftParen))
  ------------------
  |  Branch (2832:9): [True: 0, False: 480k]
  ------------------
 2833|      0|        return false;
 2834|       |
 2835|       |    // VOID RIGHT_PAREN
 2836|   480k|    if (! acceptTokenClass(EHTokVoid)) {
  ------------------
  |  Branch (2836:9): [True: 476k, False: 4.20k]
  ------------------
 2837|  1.07M|        do {
 2838|       |            // parameter_declaration
 2839|  1.07M|            if (! acceptParameterDeclaration(function))
  ------------------
  |  Branch (2839:17): [True: 2, False: 1.07M]
  ------------------
 2840|      2|                break;
 2841|       |
 2842|       |            // COMMA
 2843|  1.07M|            if (! acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (2843:17): [True: 476k, False: 603k]
  ------------------
 2844|   476k|                break;
 2845|  1.07M|        } while (true);
  ------------------
  |  Branch (2845:18): [True: 603k, Folded]
  ------------------
 2846|   476k|    }
 2847|       |
 2848|       |    // RIGHT_PAREN
 2849|   480k|    if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (2849:9): [True: 0, False: 480k]
  ------------------
 2850|      0|        expected(")");
 2851|      0|        return false;
 2852|      0|    }
 2853|       |
 2854|   480k|    return true;
 2855|   480k|}
_ZN7glslang11HlslGrammar33acceptDefaultParameterDeclarationERKNS_5TTypeERPNS_12TIntermTypedE:
 2861|  1.07M|{
 2862|  1.07M|    node = nullptr;
 2863|       |
 2864|       |    // Valid not to have a default_parameter_declaration
 2865|  1.07M|    if (!acceptTokenClass(EHTokAssign))
  ------------------
  |  Branch (2865:9): [True: 1.07M, False: 0]
  ------------------
 2866|  1.07M|        return true;
 2867|       |
 2868|      0|    if (!acceptConditionalExpression(node)) {
  ------------------
  |  Branch (2868:9): [True: 0, False: 0]
  ------------------
 2869|      0|        if (!acceptInitializer(node))
  ------------------
  |  Branch (2869:13): [True: 0, False: 0]
  ------------------
 2870|      0|            return false;
 2871|       |
 2872|       |        // For initializer lists, we have to const-fold into a constructor for the type, so build
 2873|       |        // that.
 2874|      0|        TFunction* constructor = parseContext.makeConstructorCall(token.loc, type);
 2875|      0|        if (constructor == nullptr)  // cannot construct
  ------------------
  |  Branch (2875:13): [True: 0, False: 0]
  ------------------
 2876|      0|            return false;
 2877|       |
 2878|      0|        TIntermTyped* arguments = nullptr;
 2879|      0|        for (int i = 0; i < int(node->getAsAggregate()->getSequence().size()); i++)
  ------------------
  |  Branch (2879:25): [True: 0, False: 0]
  ------------------
 2880|      0|            parseContext.handleFunctionArgument(constructor, arguments, node->getAsAggregate()->getSequence()[i]->getAsTyped());
 2881|       |
 2882|      0|        node = parseContext.handleFunctionCall(token.loc, constructor, node);
 2883|      0|    }
 2884|       |
 2885|      0|    if (node == nullptr)
  ------------------
  |  Branch (2885:9): [True: 0, False: 0]
  ------------------
 2886|      0|        return false;
 2887|       |
 2888|       |    // If this is simply a constant, we can use it directly.
 2889|      0|    if (node->getAsConstantUnion())
  ------------------
  |  Branch (2889:9): [True: 0, False: 0]
  ------------------
 2890|      0|        return true;
 2891|       |
 2892|       |    // Otherwise, it has to be const-foldable.
 2893|      0|    TIntermTyped* origNode = node;
 2894|       |
 2895|      0|    node = intermediate.fold(node->getAsAggregate());
 2896|       |
 2897|      0|    if (node != nullptr && origNode != node)
  ------------------
  |  Branch (2897:9): [True: 0, False: 0]
  |  Branch (2897:28): [True: 0, False: 0]
  ------------------
 2898|      0|        return true;
 2899|       |
 2900|      0|    parseContext.error(token.loc, "invalid default parameter value", "", "");
 2901|       |
 2902|      0|    return false;
 2903|      0|}
_ZN7glslang11HlslGrammar26acceptParameterDeclarationERNS_9TFunctionE:
 2913|  1.07M|{
 2914|       |    // attributes
 2915|  1.07M|    TAttributes attributes;
 2916|  1.07M|    acceptAttributes(attributes);
 2917|       |
 2918|       |    // fully_specified_type
 2919|  1.07M|    TType* type = new TType;
 2920|  1.07M|    if (! acceptFullySpecifiedType(*type, attributes))
  ------------------
  |  Branch (2920:9): [True: 2, False: 1.07M]
  ------------------
 2921|      2|        return false;
 2922|       |
 2923|       |    // merge in the attributes
 2924|  1.07M|    parseContext.transferTypeAttributes(token.loc, attributes, *type);
 2925|       |
 2926|       |    // identifier
 2927|  1.07M|    HlslToken idToken;
 2928|  1.07M|    acceptIdentifier(idToken);
 2929|       |
 2930|       |    // array_specifier
 2931|  1.07M|    TArraySizes* arraySizes = nullptr;
 2932|  1.07M|    acceptArraySpecifier(arraySizes);
 2933|  1.07M|    if (arraySizes) {
  ------------------
  |  Branch (2933:9): [True: 0, False: 1.07M]
  ------------------
 2934|      0|        if (arraySizes->hasUnsized()) {
  ------------------
  |  Branch (2934:13): [True: 0, False: 0]
  ------------------
 2935|      0|            parseContext.error(token.loc, "function parameter requires array size", "[]", "");
 2936|      0|            return false;
 2937|      0|        }
 2938|       |
 2939|      0|        type->transferArraySizes(arraySizes);
 2940|      0|    }
 2941|       |
 2942|       |    // post_decls
 2943|  1.07M|    acceptPostDecls(type->getQualifier());
 2944|       |
 2945|  1.07M|    TIntermTyped* defaultValue;
 2946|  1.07M|    if (!acceptDefaultParameterDeclaration(*type, defaultValue))
  ------------------
  |  Branch (2946:9): [True: 0, False: 1.07M]
  ------------------
 2947|      0|        return false;
 2948|       |
 2949|  1.07M|    parseContext.paramFix(*type);
 2950|       |
 2951|       |    // If any prior parameters have default values, all the parameters after that must as well.
 2952|  1.07M|    if (defaultValue == nullptr && function.getDefaultParamCount() > 0) {
  ------------------
  |  Branch (2952:9): [True: 1.07M, False: 0]
  |  Branch (2952:36): [True: 0, False: 1.07M]
  ------------------
 2953|      0|        parseContext.error(idToken.loc, "invalid parameter after default value parameters", idToken.getCStrOrEmpty(), "");
 2954|      0|        return false;
 2955|      0|    }
 2956|       |
 2957|  1.07M|    TParameter param = { idToken.string, type, defaultValue };
 2958|  1.07M|    function.addParameter(param);
 2959|       |
 2960|  1.07M|    return true;
 2961|  1.07M|}
_ZN7glslang11HlslGrammar24acceptFunctionDefinitionERNS_19TFunctionDeclaratorERP11TIntermNodePNS_7TVectorINS_9HlslTokenEEE:
 2971|      2|{
 2972|      2|    parseContext.handleFunctionDeclarator(declarator.loc, *declarator.function, false /* not prototype */);
 2973|       |
 2974|      2|    if (deferredTokens)
  ------------------
  |  Branch (2974:9): [True: 0, False: 2]
  ------------------
 2975|      0|        return captureBlockTokens(*deferredTokens);
 2976|      2|    else
 2977|      2|        return acceptFunctionBody(declarator, nodeList);
 2978|      2|}
_ZN7glslang11HlslGrammar18acceptFunctionBodyERNS_19TFunctionDeclaratorERP11TIntermNode:
 2981|      2|{
 2982|       |    // we might get back an entry-point
 2983|      2|    TIntermNode* entryPointNode = nullptr;
 2984|       |
 2985|       |    // This does a pushScope()
 2986|      2|    TIntermNode* functionNode = parseContext.handleFunctionDefinition(declarator.loc, *declarator.function,
 2987|      2|                                                                      declarator.attributes, entryPointNode);
 2988|       |
 2989|       |    // compound_statement
 2990|      2|    TIntermNode* functionBody = nullptr;
 2991|      2|    if (! acceptCompoundStatement(functionBody)) {
  ------------------
  |  Branch (2991:9): [True: 2, False: 0]
  ------------------
 2992|      2|        parseContext.popScope();
 2993|      2|        return false;
 2994|      2|    }
 2995|       |
 2996|       |    // this does a popScope()
 2997|      0|    parseContext.handleFunctionBody(declarator.loc, *declarator.function, functionBody, functionNode);
 2998|       |
 2999|       |    // Hook up the 1 or 2 function definitions.
 3000|      0|    nodeList = intermediate.growAggregate(nodeList, functionNode);
 3001|      0|    nodeList = intermediate.growAggregate(nodeList, entryPointNode);
 3002|       |
 3003|      0|    return true;
 3004|      2|}
_ZN7glslang11HlslGrammar16acceptExpressionERPNS_12TIntermTypedE:
 3053|  1.34k|{
 3054|  1.34k|    node = nullptr;
 3055|       |
 3056|       |    // assignment_expression
 3057|  1.34k|    if (! acceptAssignmentExpression(node))
  ------------------
  |  Branch (3057:9): [True: 1.33k, False: 19]
  ------------------
 3058|  1.33k|        return false;
 3059|       |
 3060|     19|    if (! peekTokenClass(EHTokComma))
  ------------------
  |  Branch (3060:9): [True: 19, False: 0]
  ------------------
 3061|     19|        return true;
 3062|       |
 3063|      0|    do {
 3064|       |        // ... COMMA
 3065|      0|        TSourceLoc loc = token.loc;
 3066|      0|        advanceToken();
 3067|       |
 3068|       |        // ... assignment_expression
 3069|      0|        TIntermTyped* rightNode = nullptr;
 3070|      0|        if (! acceptAssignmentExpression(rightNode)) {
  ------------------
  |  Branch (3070:13): [True: 0, False: 0]
  ------------------
 3071|      0|            expected("assignment expression");
 3072|      0|            return false;
 3073|      0|        }
 3074|       |
 3075|      0|        node = intermediate.addComma(node, rightNode, loc);
 3076|       |
 3077|      0|        if (! peekTokenClass(EHTokComma))
  ------------------
  |  Branch (3077:13): [True: 0, False: 0]
  ------------------
 3078|      0|            return true;
 3079|      0|    } while (true);
  ------------------
  |  Branch (3079:14): [True: 0, Folded]
  ------------------
 3080|      0|}
_ZN7glslang11HlslGrammar26acceptAssignmentExpressionERPNS_12TIntermTypedE:
 3152|  2.02k|{
 3153|       |    // initializer
 3154|  2.02k|    if (peekTokenClass(EHTokLeftBrace)) {
  ------------------
  |  Branch (3154:9): [True: 0, False: 2.02k]
  ------------------
 3155|      0|        if (acceptInitializer(node))
  ------------------
  |  Branch (3155:13): [True: 0, False: 0]
  ------------------
 3156|      0|            return true;
 3157|       |
 3158|      0|        expected("initializer");
 3159|      0|        return false;
 3160|      0|    }
 3161|       |
 3162|       |    // conditional_expression
 3163|  2.02k|    if (! acceptConditionalExpression(node))
  ------------------
  |  Branch (3163:9): [True: 1.97k, False: 50]
  ------------------
 3164|  1.97k|        return false;
 3165|       |
 3166|       |    // assignment operation?
 3167|     50|    TOperator assignOp = HlslOpMap::assignment(peek());
 3168|     50|    if (assignOp == EOpNull)
  ------------------
  |  Branch (3168:9): [True: 49, False: 1]
  ------------------
 3169|     49|        return true;
 3170|       |
 3171|       |    // assign_op
 3172|      1|    TSourceLoc loc = token.loc;
 3173|      1|    advanceToken();
 3174|       |
 3175|       |    // conditional_expression assign_op conditional_expression ...
 3176|       |    // Done by recursing this function, which automatically
 3177|       |    // gets the right-to-left associativity.
 3178|      1|    TIntermTyped* rightNode = nullptr;
 3179|      1|    if (! acceptAssignmentExpression(rightNode)) {
  ------------------
  |  Branch (3179:9): [True: 0, False: 1]
  ------------------
 3180|      0|        expected("assignment expression");
 3181|      0|        return false;
 3182|      0|    }
 3183|       |
 3184|      1|    node = parseContext.handleAssign(loc, assignOp, node, rightNode);
 3185|      1|    node = parseContext.handleLvalue(loc, "assign", node);
 3186|       |
 3187|      1|    if (node == nullptr) {
  ------------------
  |  Branch (3187:9): [True: 1, False: 0]
  ------------------
 3188|      1|        parseContext.error(loc, "could not create assignment", "", "");
 3189|      1|        return false;
 3190|      1|    }
 3191|       |
 3192|      0|    if (! peekTokenClass(EHTokComma))
  ------------------
  |  Branch (3192:9): [True: 0, False: 0]
  ------------------
 3193|      0|        return true;
 3194|       |
 3195|      0|    return true;
 3196|      0|}
_ZN7glslang11HlslGrammar27acceptConditionalExpressionERPNS_12TIntermTypedE:
 3207|  2.02k|{
 3208|       |    // binary_expression
 3209|  2.02k|    if (! acceptBinaryExpression(node, PlLogicalOr))
  ------------------
  |  Branch (3209:9): [True: 1.97k, False: 50]
  ------------------
 3210|  1.97k|        return false;
 3211|       |
 3212|     50|    if (! acceptTokenClass(EHTokQuestion))
  ------------------
  |  Branch (3212:9): [True: 38, False: 12]
  ------------------
 3213|     38|        return true;
 3214|       |
 3215|     12|    node = parseContext.convertConditionalExpression(token.loc, node, false);
 3216|     12|    if (node == nullptr)
  ------------------
  |  Branch (3216:9): [True: 0, False: 12]
  ------------------
 3217|      0|        return false;
 3218|       |
 3219|     12|    ++parseContext.controlFlowNestingLevel;  // this only needs to work right if no errors
 3220|       |
 3221|     12|    TIntermTyped* trueNode = nullptr;
 3222|     12|    if (! acceptExpression(trueNode)) {
  ------------------
  |  Branch (3222:9): [True: 0, False: 12]
  ------------------
 3223|      0|        expected("expression after ?");
 3224|      0|        return false;
 3225|      0|    }
 3226|     12|    TSourceLoc loc = token.loc;
 3227|       |
 3228|     12|    if (! acceptTokenClass(EHTokColon)) {
  ------------------
  |  Branch (3228:9): [True: 0, False: 12]
  ------------------
 3229|      0|        expected(":");
 3230|      0|        return false;
 3231|      0|    }
 3232|       |
 3233|     12|    TIntermTyped* falseNode = nullptr;
 3234|     12|    if (! acceptAssignmentExpression(falseNode)) {
  ------------------
  |  Branch (3234:9): [True: 0, False: 12]
  ------------------
 3235|      0|        expected("expression after :");
 3236|      0|        return false;
 3237|      0|    }
 3238|       |
 3239|     12|    --parseContext.controlFlowNestingLevel;
 3240|       |
 3241|     12|    node = intermediate.addSelection(node, trueNode, falseNode, loc);
 3242|     12|    if (!node) {
  ------------------
  |  Branch (3242:9): [True: 0, False: 12]
  ------------------
 3243|      0|        parseContext.binaryOpError(loc, ":", trueNode->getCompleteString(), falseNode->getCompleteString());
 3244|      0|        return false;
 3245|      0|    }
 3246|       |
 3247|     12|    return true;
 3248|     12|}
_ZN7glslang11HlslGrammar22acceptBinaryExpressionERPNS_12TIntermTypedENS_15PrecedenceLevelE:
 3261|  24.3k|{
 3262|  24.3k|    if (precedenceLevel > PlMul)
  ------------------
  |  Branch (3262:9): [True: 2.06k, False: 22.2k]
  ------------------
 3263|  2.06k|        return acceptUnaryExpression(node);
 3264|       |
 3265|       |    // assignment_expression
 3266|  22.2k|    if (! acceptBinaryExpression(node, (PrecedenceLevel)(precedenceLevel + 1)))
  ------------------
  |  Branch (3266:9): [True: 21.6k, False: 600]
  ------------------
 3267|  21.6k|        return false;
 3268|       |
 3269|    606|    do {
 3270|    606|        TOperator op = HlslOpMap::binary(peek());
 3271|    606|        PrecedenceLevel tokenLevel = HlslOpMap::precedenceLevel(op);
 3272|    606|        if (tokenLevel < precedenceLevel)
  ------------------
  |  Branch (3272:13): [True: 562, False: 44]
  ------------------
 3273|    562|            return true;
 3274|       |
 3275|       |        // ... op
 3276|     44|        TSourceLoc loc = token.loc;
 3277|     44|        advanceToken();
 3278|       |
 3279|       |        // ... expression
 3280|     44|        TIntermTyped* rightNode = nullptr;
 3281|     44|        if (! acceptBinaryExpression(rightNode, (PrecedenceLevel)(precedenceLevel + 1))) {
  ------------------
  |  Branch (3281:13): [True: 37, False: 7]
  ------------------
 3282|     37|            expected("expression");
 3283|     37|            return false;
 3284|     37|        }
 3285|       |
 3286|      7|        node = intermediate.addBinaryMath(op, node, rightNode, loc);
 3287|      7|        if (node == nullptr) {
  ------------------
  |  Branch (3287:13): [True: 1, False: 6]
  ------------------
 3288|      1|            parseContext.error(loc, "Could not perform requested binary operation", "", "");
 3289|      1|            return false;
 3290|      1|        }
 3291|      7|    } while (true);
  ------------------
  |  Branch (3291:14): [True: 6, Folded]
  ------------------
 3292|    600|}
_ZN7glslang11HlslGrammar21acceptUnaryExpressionERPNS_12TIntermTypedE:
 3305|  2.10k|{
 3306|       |    // (type) unary_expression
 3307|       |    // Have to look two steps ahead, because this could be, e.g., a
 3308|       |    // postfix_expression instead, since that also starts with at "(".
 3309|  2.10k|    if (acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (3309:9): [True: 1.20k, False: 902]
  ------------------
 3310|  1.20k|        TType castType;
 3311|  1.20k|        if (acceptType(castType)) {
  ------------------
  |  Branch (3311:13): [True: 5, False: 1.20k]
  ------------------
 3312|       |            // recognize any array_specifier as part of the type
 3313|      5|            TArraySizes* arraySizes = nullptr;
 3314|      5|            acceptArraySpecifier(arraySizes);
 3315|      5|            if (arraySizes != nullptr)
  ------------------
  |  Branch (3315:17): [True: 0, False: 5]
  ------------------
 3316|      0|                castType.transferArraySizes(arraySizes);
 3317|      5|            TSourceLoc loc = token.loc;
 3318|      5|            if (acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (3318:17): [True: 1, False: 4]
  ------------------
 3319|       |                // We've matched "(type)" now, get the expression to cast
 3320|      1|                if (! acceptUnaryExpression(node))
  ------------------
  |  Branch (3320:21): [True: 1, False: 0]
  ------------------
 3321|      1|                    return false;
 3322|       |
 3323|       |                // Hook it up like a constructor
 3324|      0|                TFunction* constructorFunction = parseContext.makeConstructorCall(loc, castType);
 3325|      0|                if (constructorFunction == nullptr) {
  ------------------
  |  Branch (3325:21): [True: 0, False: 0]
  ------------------
 3326|      0|                    expected("type that can be constructed");
 3327|      0|                    return false;
 3328|      0|                }
 3329|      0|                TIntermTyped* arguments = nullptr;
 3330|      0|                parseContext.handleFunctionArgument(constructorFunction, arguments, node);
 3331|      0|                node = parseContext.handleFunctionCall(loc, constructorFunction, arguments);
 3332|       |
 3333|      0|                return node != nullptr;
 3334|      4|            } else {
 3335|       |                // This could be a parenthesized constructor, ala (int(3)), and we just accepted
 3336|       |                // the '(int' part.  We must back up twice.
 3337|      4|                recedeToken();
 3338|      4|                recedeToken();
 3339|       |
 3340|       |                // Note, there are no array constructors like
 3341|       |                //   (float[2](...))
 3342|      4|                if (arraySizes != nullptr)
  ------------------
  |  Branch (3342:21): [True: 0, False: 4]
  ------------------
 3343|      0|                    parseContext.error(loc, "parenthesized array constructor not allowed", "([]())", "", "");
 3344|      4|            }
 3345|  1.20k|        } else {
 3346|       |            // This isn't a type cast, but it still started "(", so if it is a
 3347|       |            // unary expression, it can only be a postfix_expression, so try that.
 3348|       |            // Back it up first.
 3349|  1.20k|            recedeToken();
 3350|  1.20k|            return acceptPostfixExpression(node);
 3351|  1.20k|        }
 3352|  1.20k|    }
 3353|       |
 3354|       |    // peek for "op unary_expression"
 3355|    906|    TOperator unaryOp = HlslOpMap::preUnary(peek());
 3356|       |
 3357|       |    // postfix_expression (if no unary operator)
 3358|    906|    if (unaryOp == EOpNull)
  ------------------
  |  Branch (3358:9): [True: 869, False: 37]
  ------------------
 3359|    869|        return acceptPostfixExpression(node);
 3360|       |
 3361|       |    // op unary_expression
 3362|     37|    TSourceLoc loc = token.loc;
 3363|     37|    advanceToken();
 3364|     37|    if (! acceptUnaryExpression(node))
  ------------------
  |  Branch (3364:9): [True: 11, False: 26]
  ------------------
 3365|     11|        return false;
 3366|       |
 3367|       |    // + is a no-op
 3368|     26|    if (unaryOp == EOpAdd)
  ------------------
  |  Branch (3368:9): [True: 6, False: 20]
  ------------------
 3369|      6|        return true;
 3370|       |
 3371|     20|    node = intermediate.addUnaryMath(unaryOp, node, loc);
 3372|       |
 3373|       |    // These unary ops require lvalues
 3374|     20|    if (unaryOp == EOpPreIncrement || unaryOp == EOpPreDecrement)
  ------------------
  |  Branch (3374:9): [True: 1, False: 19]
  |  Branch (3374:39): [True: 0, False: 19]
  ------------------
 3375|      1|        node = parseContext.handleLvalue(loc, "unary operator", node);
 3376|       |
 3377|     20|    return node != nullptr;
 3378|     26|}
_ZN7glslang11HlslGrammar23acceptPostfixExpressionERPNS_12TIntermTypedE:
 3394|  2.06k|{
 3395|       |    // Not implemented as self-recursive:
 3396|       |    // The logical "right recursion" is done with a loop at the end
 3397|       |
 3398|       |    // idToken will pick up either a variable or a function name in a function call
 3399|  2.06k|    HlslToken idToken;
 3400|       |
 3401|       |    // Find something before the postfix operations, as they can't operate
 3402|       |    // on nothing.  So, no "return true", they fall through, only "return false".
 3403|  2.06k|    if (acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (3403:9): [True: 1.20k, False: 865]
  ------------------
 3404|       |        // LEFT_PAREN expression RIGHT_PAREN
 3405|  1.20k|        if (! acceptExpression(node)) {
  ------------------
  |  Branch (3405:13): [True: 1.20k, False: 4]
  ------------------
 3406|  1.20k|            expected("expression");
 3407|  1.20k|            return false;
 3408|  1.20k|        }
 3409|      4|        if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (3409:13): [True: 1, False: 3]
  ------------------
 3410|      1|            expected(")");
 3411|      1|            return false;
 3412|      1|        }
 3413|    865|    } else if (acceptLiteral(node)) {
  ------------------
  |  Branch (3413:16): [True: 42, False: 823]
  ------------------
 3414|       |        // literal (nothing else to do yet)
 3415|    823|    } else if (acceptConstructor(node)) {
  ------------------
  |  Branch (3415:16): [True: 5, False: 818]
  ------------------
 3416|       |        // constructor (nothing else to do yet)
 3417|    818|    } else if (acceptIdentifier(idToken)) {
  ------------------
  |  Branch (3417:16): [True: 487, False: 331]
  ------------------
 3418|       |        // user-type, namespace name, variable, or function name
 3419|    487|        TString* fullName = idToken.string;
 3420|    487|        while (acceptTokenClass(EHTokColonColon)) {
  ------------------
  |  Branch (3420:16): [True: 0, False: 487]
  ------------------
 3421|       |            // user-type or namespace name
 3422|      0|            fullName = NewPoolTString(fullName->c_str());
 3423|      0|            fullName->append(parseContext.scopeMangler);
 3424|      0|            if (acceptIdentifier(idToken))
  ------------------
  |  Branch (3424:17): [True: 0, False: 0]
  ------------------
 3425|      0|                fullName->append(*idToken.string);
 3426|      0|            else {
 3427|      0|                expected("identifier after ::");
 3428|      0|                return false;
 3429|      0|            }
 3430|      0|        }
 3431|    487|        if (! peekTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (3431:13): [True: 177, False: 310]
  ------------------
 3432|    177|            node = parseContext.handleVariable(idToken.loc, fullName);
 3433|    177|            if (node == nullptr)
  ------------------
  |  Branch (3433:17): [True: 0, False: 177]
  ------------------
 3434|      0|                return false;
 3435|    310|        } else if (acceptFunctionCall(idToken.loc, *fullName, node, nullptr)) {
  ------------------
  |  Branch (3435:20): [True: 0, False: 310]
  ------------------
 3436|       |            // function_call (nothing else to do yet)
 3437|    310|        } else {
 3438|    310|            expected("function call arguments");
 3439|    310|            return false;
 3440|    310|        }
 3441|    487|    } else {
 3442|       |        // nothing found, can't post operate
 3443|    331|        return false;
 3444|    331|    }
 3445|       |
 3446|       |    // Something was found, chain as many postfix operations as exist.
 3447|    234|    do {
 3448|    234|        TSourceLoc loc = token.loc;
 3449|    234|        TOperator postOp = HlslOpMap::postUnary(peek());
 3450|       |
 3451|       |        // Consume only a valid post-unary operator, otherwise we are done.
 3452|    234|        switch (postOp) {
 3453|      3|        case EOpIndexDirectStruct:
  ------------------
  |  Branch (3453:9): [True: 3, False: 231]
  ------------------
 3454|    134|        case EOpIndexIndirect:
  ------------------
  |  Branch (3454:9): [True: 131, False: 103]
  ------------------
 3455|    137|        case EOpPostIncrement:
  ------------------
  |  Branch (3455:9): [True: 3, False: 231]
  ------------------
 3456|    137|        case EOpPostDecrement:
  ------------------
  |  Branch (3456:9): [True: 0, False: 234]
  ------------------
 3457|    137|        case EOpScoping:
  ------------------
  |  Branch (3457:9): [True: 0, False: 234]
  ------------------
 3458|    137|            advanceToken();
 3459|    137|            break;
 3460|     97|        default:
  ------------------
  |  Branch (3460:9): [True: 97, False: 137]
  ------------------
 3461|     97|            return true;
 3462|    234|        }
 3463|       |
 3464|       |        // We have a valid post-unary operator, process it.
 3465|    137|        switch (postOp) {
 3466|      0|        case EOpScoping:
  ------------------
  |  Branch (3466:9): [True: 0, False: 137]
  ------------------
 3467|      3|        case EOpIndexDirectStruct:
  ------------------
  |  Branch (3467:9): [True: 3, False: 134]
  ------------------
 3468|      3|        {
 3469|       |            // DOT IDENTIFIER
 3470|       |            // includes swizzles, member variables, and member functions
 3471|      3|            HlslToken field;
 3472|      3|            if (! acceptIdentifier(field)) {
  ------------------
  |  Branch (3472:17): [True: 0, False: 3]
  ------------------
 3473|      0|                expected("swizzle or member");
 3474|      0|                return false;
 3475|      0|            }
 3476|       |
 3477|      3|            if (peekTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (3477:17): [True: 0, False: 3]
  ------------------
 3478|       |                // member function
 3479|      0|                TIntermTyped* thisNode = node;
 3480|       |
 3481|       |                // arguments
 3482|      0|                if (! acceptFunctionCall(field.loc, *field.string, node, thisNode)) {
  ------------------
  |  Branch (3482:21): [True: 0, False: 0]
  ------------------
 3483|      0|                    expected("function parameters");
 3484|      0|                    return false;
 3485|      0|                }
 3486|      0|            } else
 3487|      3|                node = parseContext.handleDotDereference(field.loc, node, *field.string);
 3488|       |
 3489|      3|            break;
 3490|      3|        }
 3491|    131|        case EOpIndexIndirect:
  ------------------
  |  Branch (3491:9): [True: 131, False: 6]
  ------------------
 3492|    131|        {
 3493|       |            // LEFT_BRACKET integer_expression RIGHT_BRACKET
 3494|    131|            TIntermTyped* indexNode = nullptr;
 3495|    131|            if (! acceptExpression(indexNode) ||
  ------------------
  |  Branch (3495:17): [True: 129, False: 2]
  ------------------
 3496|    130|                ! peekTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (3496:17): [True: 1, False: 1]
  ------------------
 3497|    130|                expected("expression followed by ']'");
 3498|    130|                return false;
 3499|    130|            }
 3500|      1|            advanceToken();
 3501|      1|            node = parseContext.handleBracketDereference(indexNode->getLoc(), node, indexNode);
 3502|      1|            if (node == nullptr)
  ------------------
  |  Branch (3502:17): [True: 0, False: 1]
  ------------------
 3503|      0|                return false;
 3504|      1|            break;
 3505|      1|        }
 3506|      3|        case EOpPostIncrement:
  ------------------
  |  Branch (3506:9): [True: 3, False: 134]
  ------------------
 3507|       |            // INC_OP
 3508|       |            // fall through
 3509|      3|        case EOpPostDecrement:
  ------------------
  |  Branch (3509:9): [True: 0, False: 137]
  ------------------
 3510|       |            // DEC_OP
 3511|      3|            node = intermediate.addUnaryMath(postOp, node, loc);
 3512|      3|            node = parseContext.handleLvalue(loc, "unary operator", node);
 3513|      3|            break;
 3514|      0|        default:
  ------------------
  |  Branch (3514:9): [True: 0, False: 137]
  ------------------
 3515|      0|            assert(0);
 3516|      0|            break;
 3517|    137|        }
 3518|    137|    } while (true);
  ------------------
  |  Branch (3518:14): [True: 7, Folded]
  ------------------
 3519|    227|}
_ZN7glslang11HlslGrammar17acceptConstructorERPNS_12TIntermTypedE:
 3525|    823|{
 3526|       |    // type
 3527|    823|    TType type;
 3528|    823|    if (acceptType(type)) {
  ------------------
  |  Branch (3528:9): [True: 334, False: 489]
  ------------------
 3529|    334|        TFunction* constructorFunction = parseContext.makeConstructorCall(token.loc, type);
 3530|    334|        if (constructorFunction == nullptr)
  ------------------
  |  Branch (3530:13): [True: 0, False: 334]
  ------------------
 3531|      0|            return false;
 3532|       |
 3533|       |        // arguments
 3534|    334|        TIntermTyped* arguments = nullptr;
 3535|    334|        if (! acceptArguments(constructorFunction, arguments)) {
  ------------------
  |  Branch (3535:13): [True: 329, False: 5]
  ------------------
 3536|       |            // It's possible this is a type keyword used as an identifier.  Put the token back
 3537|       |            // for later use.
 3538|    329|            recedeToken();
 3539|    329|            return false;
 3540|    329|        }
 3541|       |
 3542|      5|        if (arguments == nullptr) {
  ------------------
  |  Branch (3542:13): [True: 0, False: 5]
  ------------------
 3543|      0|            expected("one or more arguments");
 3544|      0|            return false;
 3545|      0|        }
 3546|       |
 3547|       |        // hook it up
 3548|      5|        node = parseContext.handleFunctionCall(token.loc, constructorFunction, arguments);
 3549|       |
 3550|      5|        return node != nullptr;
 3551|      5|    }
 3552|       |
 3553|    489|    return false;
 3554|    823|}
_ZN7glslang11HlslGrammar18acceptFunctionCallERKNS_10TSourceLocERNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERPNS_12TIntermTypedESD_:
 3562|    310|{
 3563|       |    // name
 3564|    310|    TString* functionName = nullptr;
 3565|    310|    if (baseObject == nullptr) {
  ------------------
  |  Branch (3565:9): [True: 310, False: 0]
  ------------------
 3566|    310|        functionName = &name;
 3567|    310|    } else if (parseContext.isBuiltInMethod(loc, baseObject, name)) {
  ------------------
  |  Branch (3567:16): [True: 0, False: 0]
  ------------------
 3568|       |        // Built-in methods are not in the symbol table as methods, but as global functions
 3569|       |        // taking an explicit 'this' as the first argument.
 3570|      0|        functionName = NewPoolTString(BUILTIN_PREFIX);
  ------------------
  |  |  513|      0|#define BUILTIN_PREFIX "__BI_"
  ------------------
 3571|      0|        functionName->append(name);
 3572|      0|    } else {
 3573|      0|        if (! baseObject->getType().isStruct()) {
  ------------------
  |  Branch (3573:13): [True: 0, False: 0]
  ------------------
 3574|      0|            expected("structure");
 3575|      0|            return false;
 3576|      0|        }
 3577|      0|        functionName = NewPoolTString("");
 3578|      0|        functionName->append(baseObject->getType().getTypeName());
 3579|      0|        parseContext.addScopeMangler(*functionName);
 3580|      0|        functionName->append(name);
 3581|      0|    }
 3582|       |
 3583|       |    // function
 3584|    310|    TFunction* function = new TFunction(functionName, TType(EbtVoid));
 3585|       |
 3586|       |    // arguments
 3587|    310|    TIntermTyped* arguments = nullptr;
 3588|    310|    if (baseObject != nullptr) {
  ------------------
  |  Branch (3588:9): [True: 0, False: 310]
  ------------------
 3589|       |        // Non-static member functions have an implicit first argument of the base object.
 3590|      0|        parseContext.handleFunctionArgument(function, arguments, baseObject);
 3591|      0|    }
 3592|    310|    if (! acceptArguments(function, arguments))
  ------------------
  |  Branch (3592:9): [True: 310, False: 0]
  ------------------
 3593|    310|        return false;
 3594|       |
 3595|       |    // call
 3596|      0|    node = parseContext.handleFunctionCall(loc, function, arguments);
 3597|       |
 3598|      0|    return node != nullptr;
 3599|    310|}
_ZN7glslang11HlslGrammar15acceptArgumentsEPNS_9TFunctionERPNS_12TIntermTypedE:
 3608|    644|{
 3609|       |    // LEFT_PAREN
 3610|    644|    if (! acceptTokenClass(EHTokLeftParen))
  ------------------
  |  Branch (3610:9): [True: 1, False: 643]
  ------------------
 3611|      1|        return false;
 3612|       |
 3613|       |    // RIGHT_PAREN
 3614|    643|    if (acceptTokenClass(EHTokRightParen))
  ------------------
  |  Branch (3614:9): [True: 0, False: 643]
  ------------------
 3615|      0|        return true;
 3616|       |
 3617|       |    // must now be at least one expression...
 3618|    643|    do {
 3619|       |        // expression
 3620|    643|        TIntermTyped* arg;
 3621|    643|        if (! acceptAssignmentExpression(arg))
  ------------------
  |  Branch (3621:13): [True: 633, False: 10]
  ------------------
 3622|    633|            return false;
 3623|       |
 3624|       |        // hook it up
 3625|     10|        parseContext.handleFunctionArgument(function, arguments, arg);
 3626|       |
 3627|       |        // COMMA
 3628|     10|        if (! acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (3628:13): [True: 10, False: 0]
  ------------------
 3629|     10|            break;
 3630|     10|    } while (true);
  ------------------
  |  Branch (3630:14): [True: 0, Folded]
  ------------------
 3631|       |
 3632|       |    // RIGHT_PAREN
 3633|     10|    if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (3633:9): [True: 5, False: 5]
  ------------------
 3634|      5|        expected(")");
 3635|      5|        return false;
 3636|      5|    }
 3637|       |
 3638|      5|    return true;
 3639|     10|}
_ZN7glslang11HlslGrammar13acceptLiteralERPNS_12TIntermTypedE:
 3642|    865|{
 3643|    865|    switch (token.tokenClass) {
 3644|     38|    case EHTokIntConstant:
  ------------------
  |  Branch (3644:5): [True: 38, False: 827]
  ------------------
 3645|     38|        node = intermediate.addConstantUnion(token.i, token.loc, true);
 3646|     38|        break;
 3647|      4|    case EHTokUintConstant:
  ------------------
  |  Branch (3647:5): [True: 4, False: 861]
  ------------------
 3648|      4|        node = intermediate.addConstantUnion(token.u, token.loc, true);
 3649|      4|        break;
 3650|      0|    case EHTokFloat16Constant:
  ------------------
  |  Branch (3650:5): [True: 0, False: 865]
  ------------------
 3651|      0|        node = intermediate.addConstantUnion(token.d, EbtFloat16, token.loc, true);
 3652|      0|        break;
 3653|      0|    case EHTokFloatConstant:
  ------------------
  |  Branch (3653:5): [True: 0, False: 865]
  ------------------
 3654|      0|        node = intermediate.addConstantUnion(token.d, EbtFloat, token.loc, true);
 3655|      0|        break;
 3656|      0|    case EHTokDoubleConstant:
  ------------------
  |  Branch (3656:5): [True: 0, False: 865]
  ------------------
 3657|      0|        node = intermediate.addConstantUnion(token.d, EbtDouble, token.loc, true);
 3658|      0|        break;
 3659|      0|    case EHTokBoolConstant:
  ------------------
  |  Branch (3659:5): [True: 0, False: 865]
  ------------------
 3660|      0|        node = intermediate.addConstantUnion(token.b, token.loc, true);
 3661|      0|        break;
 3662|      0|    case EHTokStringConstant:
  ------------------
  |  Branch (3662:5): [True: 0, False: 865]
  ------------------
 3663|      0|        node = intermediate.addConstantUnion(token.string, token.loc, true);
 3664|      0|        break;
 3665|       |
 3666|    823|    default:
  ------------------
  |  Branch (3666:5): [True: 823, False: 42]
  ------------------
 3667|    823|        return false;
 3668|    865|    }
 3669|       |
 3670|     42|    advanceToken();
 3671|       |
 3672|     42|    return true;
 3673|    865|}
_ZN7glslang11HlslGrammar21acceptSimpleStatementERP11TIntermNode:
 3681|      2|{
 3682|       |    // SEMICOLON
 3683|      2|    if (acceptTokenClass(EHTokSemicolon))
  ------------------
  |  Branch (3683:9): [True: 0, False: 2]
  ------------------
 3684|      0|        return true;
 3685|       |
 3686|       |    // declaration
 3687|      2|    if (acceptDeclaration(statement))
  ------------------
  |  Branch (3687:9): [True: 0, False: 2]
  ------------------
 3688|      0|        return true;
 3689|       |
 3690|       |    // expression
 3691|      2|    TIntermTyped* node;
 3692|      2|    if (acceptExpression(node))
  ------------------
  |  Branch (3692:9): [True: 1, False: 1]
  ------------------
 3693|      1|        statement = node;
 3694|      1|    else
 3695|      1|        return false;
 3696|       |
 3697|       |    // SEMICOLON (following an expression)
 3698|      1|    if (acceptTokenClass(EHTokSemicolon))
  ------------------
  |  Branch (3698:9): [True: 0, False: 1]
  ------------------
 3699|      0|        return true;
 3700|      1|    else {
 3701|      1|        expected(";");
 3702|      1|        return false;
 3703|      1|    }
 3704|      1|}
_ZN7glslang11HlslGrammar23acceptCompoundStatementERP11TIntermNode:
 3710|      2|{
 3711|      2|    TIntermAggregate* compoundStatement = nullptr;
 3712|       |
 3713|       |    // LEFT_CURLY
 3714|      2|    if (! acceptTokenClass(EHTokLeftBrace))
  ------------------
  |  Branch (3714:9): [True: 0, False: 2]
  ------------------
 3715|      0|        return false;
 3716|       |
 3717|       |    // statement statement ...
 3718|      2|    TIntermNode* statement = nullptr;
 3719|      2|    while (acceptStatement(statement)) {
  ------------------
  |  Branch (3719:12): [True: 0, False: 2]
  ------------------
 3720|      0|        TIntermBranch* branch = statement ? statement->getAsBranchNode() : nullptr;
  ------------------
  |  Branch (3720:33): [True: 0, False: 0]
  ------------------
 3721|      0|        if (branch != nullptr && (branch->getFlowOp() == EOpCase ||
  ------------------
  |  Branch (3721:13): [True: 0, False: 0]
  |  Branch (3721:35): [True: 0, False: 0]
  ------------------
 3722|      0|                                  branch->getFlowOp() == EOpDefault)) {
  ------------------
  |  Branch (3722:35): [True: 0, False: 0]
  ------------------
 3723|       |            // hook up individual subsequences within a switch statement
 3724|      0|            parseContext.wrapupSwitchSubsequence(compoundStatement, statement);
 3725|      0|            compoundStatement = nullptr;
 3726|      0|        } else {
 3727|       |            // hook it up to the growing compound statement
 3728|      0|            compoundStatement = intermediate.growAggregate(compoundStatement, statement);
 3729|      0|        }
 3730|      0|    }
 3731|      2|    if (compoundStatement)
  ------------------
  |  Branch (3731:9): [True: 0, False: 2]
  ------------------
 3732|      0|        compoundStatement->setOperator(intermediate.getDebugInfo() ? EOpScope : EOpSequence);
  ------------------
  |  Branch (3732:40): [True: 0, False: 0]
  ------------------
 3733|       |
 3734|      2|    retStatement = compoundStatement;
 3735|       |
 3736|       |    // RIGHT_CURLY
 3737|      2|    return acceptTokenClass(EHTokRightBrace);
 3738|      2|}
_ZN7glslang11HlslGrammar15acceptStatementERP11TIntermNode:
 3772|      2|{
 3773|      2|    statement = nullptr;
 3774|       |
 3775|       |    // attributes
 3776|      2|    TAttributes attributes;
 3777|      2|    acceptAttributes(attributes);
 3778|       |
 3779|       |    // attributed_statement
 3780|      2|    switch (peek()) {
 3781|      0|    case EHTokLeftBrace:
  ------------------
  |  Branch (3781:5): [True: 0, False: 2]
  ------------------
 3782|      0|        return acceptScopedCompoundStatement(statement);
 3783|       |
 3784|      0|    case EHTokIf:
  ------------------
  |  Branch (3784:5): [True: 0, False: 2]
  ------------------
 3785|      0|        return acceptSelectionStatement(statement, attributes);
 3786|       |
 3787|      0|    case EHTokSwitch:
  ------------------
  |  Branch (3787:5): [True: 0, False: 2]
  ------------------
 3788|      0|        return acceptSwitchStatement(statement, attributes);
 3789|       |
 3790|      0|    case EHTokFor:
  ------------------
  |  Branch (3790:5): [True: 0, False: 2]
  ------------------
 3791|      0|    case EHTokDo:
  ------------------
  |  Branch (3791:5): [True: 0, False: 2]
  ------------------
 3792|      0|    case EHTokWhile:
  ------------------
  |  Branch (3792:5): [True: 0, False: 2]
  ------------------
 3793|      0|        return acceptIterationStatement(statement, attributes);
 3794|       |
 3795|      0|    case EHTokContinue:
  ------------------
  |  Branch (3795:5): [True: 0, False: 2]
  ------------------
 3796|      0|    case EHTokBreak:
  ------------------
  |  Branch (3796:5): [True: 0, False: 2]
  ------------------
 3797|      0|    case EHTokDiscard:
  ------------------
  |  Branch (3797:5): [True: 0, False: 2]
  ------------------
 3798|      0|    case EHTokReturn:
  ------------------
  |  Branch (3798:5): [True: 0, False: 2]
  ------------------
 3799|      0|        return acceptJumpStatement(statement);
 3800|       |
 3801|      0|    case EHTokCase:
  ------------------
  |  Branch (3801:5): [True: 0, False: 2]
  ------------------
 3802|      0|        return acceptCaseLabel(statement);
 3803|      0|    case EHTokDefault:
  ------------------
  |  Branch (3803:5): [True: 0, False: 2]
  ------------------
 3804|      0|        return acceptDefaultLabel(statement);
 3805|       |
 3806|      0|    case EHTokRightBrace:
  ------------------
  |  Branch (3806:5): [True: 0, False: 2]
  ------------------
 3807|       |        // Performance: not strictly necessary, but stops a bunch of hunting early,
 3808|       |        // and is how sequences of statements end.
 3809|      0|        return false;
 3810|       |
 3811|      2|    default:
  ------------------
  |  Branch (3811:5): [True: 2, False: 0]
  ------------------
 3812|      2|        return acceptSimpleStatement(statement);
 3813|      2|    }
 3814|       |
 3815|      0|    return true;
 3816|      2|}
_ZN7glslang11HlslGrammar16acceptAttributesERNS_5TListINS_14TAttributeArgsEEE:
 3849|  1.55M|{
 3850|       |    // For now, accept the [ XXX(X) ] syntax, but drop all but
 3851|       |    // numthreads, which is used to set the CS local size.
 3852|       |    // TODO: subset to correct set?  Pass on?
 3853|  1.55M|    do {
 3854|  1.55M|        HlslToken attributeToken;
 3855|       |
 3856|       |        // LEFT_BRACKET?
 3857|  1.55M|        if (! acceptTokenClass(EHTokLeftBracket))
  ------------------
  |  Branch (3857:13): [True: 1.55M, False: 11]
  ------------------
 3858|  1.55M|            return;
 3859|       |        // another LEFT_BRACKET?
 3860|     11|        bool doubleBrackets = false;
 3861|     11|        if (acceptTokenClass(EHTokLeftBracket))
  ------------------
  |  Branch (3861:13): [True: 8, False: 3]
  ------------------
 3862|      8|            doubleBrackets = true;
 3863|       |
 3864|       |        // attribute? (could be namespace; will adjust later)
 3865|     11|        if (!acceptIdentifier(attributeToken)) {
  ------------------
  |  Branch (3865:13): [True: 2, False: 9]
  ------------------
 3866|      2|            if (!peekTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (3866:17): [True: 0, False: 2]
  ------------------
 3867|      0|                expected("namespace or attribute identifier");
 3868|      0|                advanceToken();
 3869|      0|            }
 3870|      2|        }
 3871|       |
 3872|     11|        TString nameSpace;
 3873|     11|        if (acceptTokenClass(EHTokColonColon)) {
  ------------------
  |  Branch (3873:13): [True: 0, False: 11]
  ------------------
 3874|       |            // namespace COLON COLON
 3875|      0|            nameSpace = *attributeToken.string;
 3876|       |            // attribute
 3877|      0|            if (!acceptIdentifier(attributeToken)) {
  ------------------
  |  Branch (3877:17): [True: 0, False: 0]
  ------------------
 3878|      0|                expected("attribute identifier");
 3879|      0|                return;
 3880|      0|            }
 3881|      0|        }
 3882|       |
 3883|     11|        TIntermAggregate* expressions = nullptr;
 3884|       |
 3885|       |        // (x, ...)
 3886|     11|        if (acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (3886:13): [True: 8, False: 3]
  ------------------
 3887|      8|            expressions = new TIntermAggregate;
 3888|       |
 3889|      8|            TIntermTyped* node;
 3890|      8|            bool expectingExpression = false;
 3891|       |
 3892|     12|            while (acceptAssignmentExpression(node)) {
  ------------------
  |  Branch (3892:20): [True: 4, False: 8]
  ------------------
 3893|      4|                expectingExpression = false;
 3894|      4|                expressions->getSequence().push_back(node);
 3895|      4|                if (acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (3895:21): [True: 0, False: 4]
  ------------------
 3896|      0|                    expectingExpression = true;
 3897|      4|            }
 3898|       |
 3899|       |            // 'expressions' is an aggregate with the expressions in it
 3900|      8|            if (! acceptTokenClass(EHTokRightParen))
  ------------------
  |  Branch (3900:17): [True: 7, False: 1]
  ------------------
 3901|      7|                expected(")");
 3902|       |
 3903|       |            // Error for partial or missing expression
 3904|      8|            if (expectingExpression || expressions->getSequence().empty())
  ------------------
  |  Branch (3904:17): [True: 0, False: 8]
  |  Branch (3904:40): [True: 5, False: 3]
  ------------------
 3905|      5|                expected("expression");
 3906|      8|        }
 3907|       |
 3908|       |        // RIGHT_BRACKET
 3909|     11|        if (!acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (3909:13): [True: 9, False: 2]
  ------------------
 3910|      9|            expected("]");
 3911|      9|            return;
 3912|      9|        }
 3913|       |        // another RIGHT_BRACKET?
 3914|      2|        if (doubleBrackets && !acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (3914:13): [True: 0, False: 2]
  |  Branch (3914:31): [True: 0, False: 0]
  ------------------
 3915|      0|            expected("]]");
 3916|      0|            return;
 3917|      0|        }
 3918|       |
 3919|       |        // Add any values we found into the attribute map.
 3920|      2|        if (attributeToken.string != nullptr) {
  ------------------
  |  Branch (3920:13): [True: 0, False: 2]
  ------------------
 3921|      0|            TAttributeType attributeType = parseContext.attributeFromName(nameSpace, *attributeToken.string);
 3922|      0|            if (attributeType == EatNone)
  ------------------
  |  Branch (3922:17): [True: 0, False: 0]
  ------------------
 3923|      0|                parseContext.warn(attributeToken.loc, "unrecognized attribute", attributeToken.getCStrOrEmpty(), "");
 3924|      0|            else {
 3925|      0|                TAttributeArgs attributeArgs = { attributeType, expressions };
 3926|      0|                attributes.push_back(attributeArgs);
 3927|      0|            }
 3928|      0|        }
 3929|      2|    } while (true);
  ------------------
  |  Branch (3929:14): [True: 2, Folded]
  ------------------
 3930|  1.55M|}
_ZN7glslang11HlslGrammar20acceptArraySpecifierERPNS_11TArraySizesE:
 4280|  1.07M|{
 4281|  1.07M|    arraySizes = nullptr;
 4282|       |
 4283|       |    // Early-out if there aren't any array dimensions
 4284|  1.07M|    if (!peekTokenClass(EHTokLeftBracket))
  ------------------
  |  Branch (4284:9): [True: 1.07M, False: 8]
  ------------------
 4285|  1.07M|        return;
 4286|       |
 4287|       |    // If we get here, we have at least one array dimension.  This will track the sizes we find.
 4288|      8|    arraySizes = new TArraySizes;
 4289|       |
 4290|       |    // Collect each array dimension.
 4291|     12|    while (acceptTokenClass(EHTokLeftBracket)) {
  ------------------
  |  Branch (4291:12): [True: 8, False: 4]
  ------------------
 4292|      8|        TSourceLoc loc = token.loc;
 4293|      8|        TIntermTyped* sizeExpr = nullptr;
 4294|       |
 4295|       |        // Array sizing expression is optional.  If omitted, array will be later sized by initializer list.
 4296|      8|        const bool hasArraySize = acceptAssignmentExpression(sizeExpr);
 4297|       |
 4298|      8|        if (! acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (4298:13): [True: 4, False: 4]
  ------------------
 4299|      4|            expected("]");
 4300|      4|            return;
 4301|      4|        }
 4302|       |
 4303|      4|        if (hasArraySize) {
  ------------------
  |  Branch (4303:13): [True: 3, False: 1]
  ------------------
 4304|      3|            TArraySize arraySize;
 4305|      3|            parseContext.arraySizeCheck(loc, sizeExpr, arraySize);
 4306|      3|            arraySizes->addInnerSize(arraySize);
 4307|      3|        } else {
 4308|      1|            arraySizes->addInnerSize(0);  // sized by initializers.
 4309|      1|        }
 4310|      4|    }
 4311|      8|}
_ZN7glslang11HlslGrammar15acceptPostDeclsERNS_10TQualifierE:
 4325|  1.55M|{
 4326|  1.55M|    bool found = false;
 4327|       |
 4328|  1.55M|    do {
 4329|       |        // COLON
 4330|  1.55M|        if (acceptTokenClass(EHTokColon)) {
  ------------------
  |  Branch (4330:13): [True: 0, False: 1.55M]
  ------------------
 4331|      0|            found = true;
 4332|      0|            HlslToken idToken;
 4333|      0|            if (peekTokenClass(EHTokLayout))
  ------------------
  |  Branch (4333:17): [True: 0, False: 0]
  ------------------
 4334|      0|                acceptLayoutQualifierList(qualifier);
 4335|      0|            else if (acceptTokenClass(EHTokPackOffset)) {
  ------------------
  |  Branch (4335:22): [True: 0, False: 0]
  ------------------
 4336|       |                // PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN
 4337|      0|                if (! acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (4337:21): [True: 0, False: 0]
  ------------------
 4338|      0|                    expected("(");
 4339|      0|                    return false;
 4340|      0|                }
 4341|      0|                HlslToken locationToken;
 4342|      0|                if (! acceptIdentifier(locationToken)) {
  ------------------
  |  Branch (4342:21): [True: 0, False: 0]
  ------------------
 4343|      0|                    expected("c[subcomponent][.component]");
 4344|      0|                    return false;
 4345|      0|                }
 4346|      0|                HlslToken componentToken;
 4347|      0|                if (acceptTokenClass(EHTokDot)) {
  ------------------
  |  Branch (4347:21): [True: 0, False: 0]
  ------------------
 4348|      0|                    if (! acceptIdentifier(componentToken)) {
  ------------------
  |  Branch (4348:25): [True: 0, False: 0]
  ------------------
 4349|      0|                        expected("component");
 4350|      0|                        return false;
 4351|      0|                    }
 4352|      0|                }
 4353|      0|                if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (4353:21): [True: 0, False: 0]
  ------------------
 4354|      0|                    expected(")");
 4355|      0|                    break;
 4356|      0|                }
 4357|      0|                parseContext.handlePackOffset(locationToken.loc, qualifier, *locationToken.string, componentToken.string);
 4358|      0|            } else if (! acceptIdentifier(idToken)) {
  ------------------
  |  Branch (4358:24): [True: 0, False: 0]
  ------------------
 4359|      0|                expected("layout, semantic, packoffset, or register");
 4360|      0|                return false;
 4361|      0|            } else if (*idToken.string == "register") {
  ------------------
  |  Branch (4361:24): [True: 0, False: 0]
  ------------------
 4362|       |                // REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt (COMMA SPACEN)opt RIGHT_PAREN
 4363|       |                // LEFT_PAREN
 4364|      0|                if (! acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (4364:21): [True: 0, False: 0]
  ------------------
 4365|      0|                    expected("(");
 4366|      0|                    return false;
 4367|      0|                }
 4368|      0|                HlslToken registerDesc;  // for Type#
 4369|      0|                HlslToken profile;
 4370|      0|                if (! acceptIdentifier(registerDesc)) {
  ------------------
  |  Branch (4370:21): [True: 0, False: 0]
  ------------------
 4371|      0|                    expected("register number description");
 4372|      0|                    return false;
 4373|      0|                }
 4374|      0|                if (registerDesc.string->size() > 1 && !isdigit((*registerDesc.string)[1]) &&
  ------------------
  |  Branch (4374:21): [True: 0, False: 0]
  |  Branch (4374:56): [True: 0, False: 0]
  ------------------
 4375|      0|                                                       acceptTokenClass(EHTokComma)) {
  ------------------
  |  Branch (4375:56): [True: 0, False: 0]
  ------------------
 4376|       |                    // Then we didn't really see the registerDesc yet, it was
 4377|       |                    // actually the profile.  Adjust...
 4378|      0|                    profile = registerDesc;
 4379|      0|                    if (! acceptIdentifier(registerDesc)) {
  ------------------
  |  Branch (4379:25): [True: 0, False: 0]
  ------------------
 4380|      0|                        expected("register number description");
 4381|      0|                        return false;
 4382|      0|                    }
 4383|      0|                }
 4384|      0|                int subComponent = 0;
 4385|      0|                if (acceptTokenClass(EHTokLeftBracket)) {
  ------------------
  |  Branch (4385:21): [True: 0, False: 0]
  ------------------
 4386|       |                    // LEFT_BRACKET subcomponent RIGHT_BRACKET
 4387|      0|                    if (! peekTokenClass(EHTokIntConstant)) {
  ------------------
  |  Branch (4387:25): [True: 0, False: 0]
  ------------------
 4388|      0|                        expected("literal integer");
 4389|      0|                        return false;
 4390|      0|                    }
 4391|      0|                    subComponent = token.i;
 4392|      0|                    advanceToken();
 4393|      0|                    if (! acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (4393:25): [True: 0, False: 0]
  ------------------
 4394|      0|                        expected("]");
 4395|      0|                        break;
 4396|      0|                    }
 4397|      0|                }
 4398|       |                // (COMMA SPACEN)opt
 4399|      0|                HlslToken spaceDesc;
 4400|      0|                if (acceptTokenClass(EHTokComma)) {
  ------------------
  |  Branch (4400:21): [True: 0, False: 0]
  ------------------
 4401|      0|                    if (! acceptIdentifier(spaceDesc)) {
  ------------------
  |  Branch (4401:25): [True: 0, False: 0]
  ------------------
 4402|      0|                        expected ("space identifier");
 4403|      0|                        return false;
 4404|      0|                    }
 4405|      0|                }
 4406|       |                // RIGHT_PAREN
 4407|      0|                if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (4407:21): [True: 0, False: 0]
  ------------------
 4408|      0|                    expected(")");
 4409|      0|                    break;
 4410|      0|                }
 4411|      0|                parseContext.handleRegister(registerDesc.loc, qualifier, profile.string, *registerDesc.string, subComponent, spaceDesc.string);
 4412|      0|            } else {
 4413|       |                // semantic, in idToken.string
 4414|      0|                TString semanticUpperCase = *idToken.string;
 4415|      0|                std::transform(semanticUpperCase.begin(), semanticUpperCase.end(), semanticUpperCase.begin(), ::toupper);
 4416|      0|                parseContext.handleSemantic(idToken.loc, qualifier, mapSemantic(semanticUpperCase.c_str()), semanticUpperCase);
 4417|      0|            }
 4418|  1.55M|        } else if (peekTokenClass(EHTokLeftAngle)) {
  ------------------
  |  Branch (4418:20): [True: 0, False: 1.55M]
  ------------------
 4419|      0|            found = true;
 4420|      0|            acceptAnnotations(qualifier);
 4421|      0|        } else
 4422|  1.55M|            break;
 4423|       |
 4424|  1.55M|    } while (true);
  ------------------
  |  Branch (4424:14): [True: 0, Folded]
  ------------------
 4425|       |
 4426|  1.55M|    return found;
 4427|  1.55M|}
_ZNK7glslang11HlslGrammar13getTypeStringENS_15EHlslTokenClassE:
 4464|  1.56M|{
 4465|  1.56M|    switch (tokenClass) {
 4466|      0|    case EHTokSample:     return "sample";
  ------------------
  |  Branch (4466:5): [True: 0, False: 1.56M]
  ------------------
 4467|      0|    case EHTokHalf:       return "half";
  ------------------
  |  Branch (4467:5): [True: 0, False: 1.56M]
  ------------------
 4468|      0|    case EHTokHalf1x1:    return "half1x1";
  ------------------
  |  Branch (4468:5): [True: 0, False: 1.56M]
  ------------------
 4469|      0|    case EHTokHalf1x2:    return "half1x2";
  ------------------
  |  Branch (4469:5): [True: 0, False: 1.56M]
  ------------------
 4470|      0|    case EHTokHalf1x3:    return "half1x3";
  ------------------
  |  Branch (4470:5): [True: 0, False: 1.56M]
  ------------------
 4471|      0|    case EHTokHalf1x4:    return "half1x4";
  ------------------
  |  Branch (4471:5): [True: 0, False: 1.56M]
  ------------------
 4472|      0|    case EHTokHalf2x1:    return "half2x1";
  ------------------
  |  Branch (4472:5): [True: 0, False: 1.56M]
  ------------------
 4473|      0|    case EHTokHalf2x2:    return "half2x2";
  ------------------
  |  Branch (4473:5): [True: 0, False: 1.56M]
  ------------------
 4474|      0|    case EHTokHalf2x3:    return "half2x3";
  ------------------
  |  Branch (4474:5): [True: 0, False: 1.56M]
  ------------------
 4475|      0|    case EHTokHalf2x4:    return "half2x4";
  ------------------
  |  Branch (4475:5): [True: 0, False: 1.56M]
  ------------------
 4476|      0|    case EHTokHalf3x1:    return "half3x1";
  ------------------
  |  Branch (4476:5): [True: 0, False: 1.56M]
  ------------------
 4477|      0|    case EHTokHalf3x2:    return "half3x2";
  ------------------
  |  Branch (4477:5): [True: 0, False: 1.56M]
  ------------------
 4478|      0|    case EHTokHalf3x3:    return "half3x3";
  ------------------
  |  Branch (4478:5): [True: 0, False: 1.56M]
  ------------------
 4479|      0|    case EHTokHalf3x4:    return "half3x4";
  ------------------
  |  Branch (4479:5): [True: 0, False: 1.56M]
  ------------------
 4480|      0|    case EHTokHalf4x1:    return "half4x1";
  ------------------
  |  Branch (4480:5): [True: 0, False: 1.56M]
  ------------------
 4481|      0|    case EHTokHalf4x2:    return "half4x2";
  ------------------
  |  Branch (4481:5): [True: 0, False: 1.56M]
  ------------------
 4482|      0|    case EHTokHalf4x3:    return "half4x3";
  ------------------
  |  Branch (4482:5): [True: 0, False: 1.56M]
  ------------------
 4483|      0|    case EHTokHalf4x4:    return "half4x4";
  ------------------
  |  Branch (4483:5): [True: 0, False: 1.56M]
  ------------------
 4484|      0|    case EHTokBool:       return "bool";
  ------------------
  |  Branch (4484:5): [True: 0, False: 1.56M]
  ------------------
 4485|      0|    case EHTokFloat:      return "float";
  ------------------
  |  Branch (4485:5): [True: 0, False: 1.56M]
  ------------------
 4486|      0|    case EHTokDouble:     return "double";
  ------------------
  |  Branch (4486:5): [True: 0, False: 1.56M]
  ------------------
 4487|      1|    case EHTokInt:        return "int";
  ------------------
  |  Branch (4487:5): [True: 1, False: 1.56M]
  ------------------
 4488|      0|    case EHTokUint:       return "uint";
  ------------------
  |  Branch (4488:5): [True: 0, False: 1.56M]
  ------------------
 4489|      0|    case EHTokMin16float: return "min16float";
  ------------------
  |  Branch (4489:5): [True: 0, False: 1.56M]
  ------------------
 4490|      0|    case EHTokMin10float: return "min10float";
  ------------------
  |  Branch (4490:5): [True: 0, False: 1.56M]
  ------------------
 4491|      0|    case EHTokMin16int:   return "min16int";
  ------------------
  |  Branch (4491:5): [True: 0, False: 1.56M]
  ------------------
 4492|      0|    case EHTokMin12int:   return "min12int";
  ------------------
  |  Branch (4492:5): [True: 0, False: 1.56M]
  ------------------
 4493|      0|    case EHTokConstantBuffer: return "ConstantBuffer";
  ------------------
  |  Branch (4493:5): [True: 0, False: 1.56M]
  ------------------
 4494|      0|    case EHTokLayout:     return "layout";
  ------------------
  |  Branch (4494:5): [True: 0, False: 1.56M]
  ------------------
 4495|  1.56M|    default:
  ------------------
  |  Branch (4495:5): [True: 1.56M, False: 1]
  ------------------
 4496|  1.56M|        return nullptr;
 4497|  1.56M|    }
 4498|  1.56M|}

_ZN7glslang11HlslGrammarC2ERNS_15HlslScanContextERNS_16HlslParseContextE:
   55|    240|            : HlslTokenStream(scanner), parseContext(parseContext), intermediate(parseContext.intermediate),
   56|    240|              typeIdentifiers(false), unitNode(nullptr) { }

_ZN7glslang9HlslOpMap10assignmentENS_15EHlslTokenClassE:
   45|     50|{
   46|     50|    switch (op) {
   47|      1|    case EHTokAssign:      return EOpAssign;
  ------------------
  |  Branch (47:5): [True: 1, False: 49]
  ------------------
   48|      0|    case EHTokMulAssign:   return EOpMulAssign;
  ------------------
  |  Branch (48:5): [True: 0, False: 50]
  ------------------
   49|      0|    case EHTokDivAssign:   return EOpDivAssign;
  ------------------
  |  Branch (49:5): [True: 0, False: 50]
  ------------------
   50|      0|    case EHTokAddAssign:   return EOpAddAssign;
  ------------------
  |  Branch (50:5): [True: 0, False: 50]
  ------------------
   51|      0|    case EHTokModAssign:   return EOpModAssign;
  ------------------
  |  Branch (51:5): [True: 0, False: 50]
  ------------------
   52|      0|    case EHTokLeftAssign:  return EOpLeftShiftAssign;
  ------------------
  |  Branch (52:5): [True: 0, False: 50]
  ------------------
   53|      0|    case EHTokRightAssign: return EOpRightShiftAssign;
  ------------------
  |  Branch (53:5): [True: 0, False: 50]
  ------------------
   54|      0|    case EHTokAndAssign:   return EOpAndAssign;
  ------------------
  |  Branch (54:5): [True: 0, False: 50]
  ------------------
   55|      0|    case EHTokXorAssign:   return EOpExclusiveOrAssign;
  ------------------
  |  Branch (55:5): [True: 0, False: 50]
  ------------------
   56|      0|    case EHTokOrAssign:    return EOpInclusiveOrAssign;
  ------------------
  |  Branch (56:5): [True: 0, False: 50]
  ------------------
   57|      0|    case EHTokSubAssign:   return EOpSubAssign;
  ------------------
  |  Branch (57:5): [True: 0, False: 50]
  ------------------
   58|       |
   59|     49|    default:
  ------------------
  |  Branch (59:5): [True: 49, False: 1]
  ------------------
   60|     49|        return EOpNull;
   61|     50|    }
   62|     50|}
_ZN7glslang9HlslOpMap6binaryENS_15EHlslTokenClassE:
   66|    606|{
   67|    606|    switch (op) {
   68|     12|    case EHTokPlus:        return EOpAdd;
  ------------------
  |  Branch (68:5): [True: 12, False: 594]
  ------------------
   69|      6|    case EHTokDash:        return EOpSub;
  ------------------
  |  Branch (69:5): [True: 6, False: 600]
  ------------------
   70|      0|    case EHTokStar:        return EOpMul;
  ------------------
  |  Branch (70:5): [True: 0, False: 606]
  ------------------
   71|     28|    case EHTokSlash:       return EOpDiv;
  ------------------
  |  Branch (71:5): [True: 28, False: 578]
  ------------------
   72|      6|    case EHTokPercent:     return EOpMod;
  ------------------
  |  Branch (72:5): [True: 6, False: 600]
  ------------------
   73|      0|    case EHTokRightOp:     return EOpRightShift;
  ------------------
  |  Branch (73:5): [True: 0, False: 606]
  ------------------
   74|      0|    case EHTokLeftOp:      return EOpLeftShift;
  ------------------
  |  Branch (74:5): [True: 0, False: 606]
  ------------------
   75|      0|    case EHTokAmpersand:   return EOpAnd;
  ------------------
  |  Branch (75:5): [True: 0, False: 606]
  ------------------
   76|      0|    case EHTokVerticalBar: return EOpInclusiveOr;
  ------------------
  |  Branch (76:5): [True: 0, False: 606]
  ------------------
   77|      0|    case EHTokCaret:       return EOpExclusiveOr;
  ------------------
  |  Branch (77:5): [True: 0, False: 606]
  ------------------
   78|      0|    case EHTokEqOp:        return EOpEqual;
  ------------------
  |  Branch (78:5): [True: 0, False: 606]
  ------------------
   79|      0|    case EHTokNeOp:        return EOpNotEqual;
  ------------------
  |  Branch (79:5): [True: 0, False: 606]
  ------------------
   80|      4|    case EHTokLeftAngle:   return EOpLessThan;
  ------------------
  |  Branch (80:5): [True: 4, False: 602]
  ------------------
   81|      0|    case EHTokRightAngle:  return EOpGreaterThan;
  ------------------
  |  Branch (81:5): [True: 0, False: 606]
  ------------------
   82|      0|    case EHTokLeOp:        return EOpLessThanEqual;
  ------------------
  |  Branch (82:5): [True: 0, False: 606]
  ------------------
   83|      0|    case EHTokGeOp:        return EOpGreaterThanEqual;
  ------------------
  |  Branch (83:5): [True: 0, False: 606]
  ------------------
   84|      0|    case EHTokOrOp:        return EOpLogicalOr;
  ------------------
  |  Branch (84:5): [True: 0, False: 606]
  ------------------
   85|      0|    case EHTokXorOp:       return EOpLogicalXor;
  ------------------
  |  Branch (85:5): [True: 0, False: 606]
  ------------------
   86|      0|    case EHTokAndOp:       return EOpLogicalAnd;
  ------------------
  |  Branch (86:5): [True: 0, False: 606]
  ------------------
   87|       |
   88|    550|    default:
  ------------------
  |  Branch (88:5): [True: 550, False: 56]
  ------------------
   89|    550|        return EOpNull;
   90|    606|    }
   91|    606|}
_ZN7glslang9HlslOpMap8preUnaryENS_15EHlslTokenClassE:
   96|    906|{
   97|    906|    switch (op) {
   98|      6|    case EHTokPlus:       return EOpAdd;        // means no-op, but still a unary op was present
  ------------------
  |  Branch (98:5): [True: 6, False: 900]
  ------------------
   99|      1|    case EHTokDash:       return EOpNegative;
  ------------------
  |  Branch (99:5): [True: 1, False: 905]
  ------------------
  100|     16|    case EHTokBang:       return EOpLogicalNot;
  ------------------
  |  Branch (100:5): [True: 16, False: 890]
  ------------------
  101|     13|    case EHTokTilde:      return EOpBitwiseNot;
  ------------------
  |  Branch (101:5): [True: 13, False: 893]
  ------------------
  102|       |
  103|      1|    case EHTokIncOp:      return EOpPreIncrement;
  ------------------
  |  Branch (103:5): [True: 1, False: 905]
  ------------------
  104|      0|    case EHTokDecOp:      return EOpPreDecrement;
  ------------------
  |  Branch (104:5): [True: 0, False: 906]
  ------------------
  105|       |
  106|    869|    default:              return EOpNull;       // means not a pre-unary op
  ------------------
  |  Branch (106:5): [True: 869, False: 37]
  ------------------
  107|    906|    }
  108|    906|}
_ZN7glslang9HlslOpMap9postUnaryENS_15EHlslTokenClassE:
  113|    234|{
  114|    234|    switch (op) {
  115|      3|    case EHTokDot:         return EOpIndexDirectStruct;
  ------------------
  |  Branch (115:5): [True: 3, False: 231]
  ------------------
  116|    131|    case EHTokLeftBracket: return EOpIndexIndirect;
  ------------------
  |  Branch (116:5): [True: 131, False: 103]
  ------------------
  117|       |
  118|      3|    case EHTokIncOp:       return EOpPostIncrement;
  ------------------
  |  Branch (118:5): [True: 3, False: 231]
  ------------------
  119|      0|    case EHTokDecOp:       return EOpPostDecrement;
  ------------------
  |  Branch (119:5): [True: 0, False: 234]
  ------------------
  120|       |
  121|      0|    case EHTokColonColon:  return EOpScoping;
  ------------------
  |  Branch (121:5): [True: 0, False: 234]
  ------------------
  122|       |
  123|     97|    default:               return EOpNull;             // means not a post-unary op
  ------------------
  |  Branch (123:5): [True: 97, False: 137]
  ------------------
  124|    234|    }
  125|    234|}
_ZN7glslang9HlslOpMap15precedenceLevelENS_9TOperatorE:
  129|    606|{
  130|    606|    switch (op) {
  131|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (131:5): [True: 0, False: 606]
  ------------------
  132|      0|        return PlLogicalOr;
  133|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (133:5): [True: 0, False: 606]
  ------------------
  134|      0|        return PlLogicalXor;
  135|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (135:5): [True: 0, False: 606]
  ------------------
  136|      0|        return PlLogicalAnd;
  137|       |
  138|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (138:5): [True: 0, False: 606]
  ------------------
  139|      0|        return PlBitwiseOr;
  140|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (140:5): [True: 0, False: 606]
  ------------------
  141|      0|        return PlBitwiseXor;
  142|      0|    case EOpAnd:
  ------------------
  |  Branch (142:5): [True: 0, False: 606]
  ------------------
  143|      0|        return PlBitwiseAnd;
  144|       |
  145|      0|    case EOpEqual:
  ------------------
  |  Branch (145:5): [True: 0, False: 606]
  ------------------
  146|      0|    case EOpNotEqual:
  ------------------
  |  Branch (146:5): [True: 0, False: 606]
  ------------------
  147|      0|        return PlEquality;
  148|       |
  149|      4|    case EOpLessThan:
  ------------------
  |  Branch (149:5): [True: 4, False: 602]
  ------------------
  150|      4|    case EOpGreaterThan:
  ------------------
  |  Branch (150:5): [True: 0, False: 606]
  ------------------
  151|      4|    case EOpLessThanEqual:
  ------------------
  |  Branch (151:5): [True: 0, False: 606]
  ------------------
  152|      4|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (152:5): [True: 0, False: 606]
  ------------------
  153|      4|        return PlRelational;
  154|       |
  155|      0|    case EOpRightShift:
  ------------------
  |  Branch (155:5): [True: 0, False: 606]
  ------------------
  156|      0|    case EOpLeftShift:
  ------------------
  |  Branch (156:5): [True: 0, False: 606]
  ------------------
  157|      0|        return PlShift;
  158|       |
  159|     12|    case EOpAdd:
  ------------------
  |  Branch (159:5): [True: 12, False: 594]
  ------------------
  160|     18|    case EOpSub:
  ------------------
  |  Branch (160:5): [True: 6, False: 600]
  ------------------
  161|     18|        return PlAdd;
  162|       |
  163|      0|    case EOpMul:
  ------------------
  |  Branch (163:5): [True: 0, False: 606]
  ------------------
  164|     28|    case EOpDiv:
  ------------------
  |  Branch (164:5): [True: 28, False: 578]
  ------------------
  165|     34|    case EOpMod:
  ------------------
  |  Branch (165:5): [True: 6, False: 600]
  ------------------
  166|     34|        return PlMul;
  167|       |
  168|    550|    default:
  ------------------
  |  Branch (168:5): [True: 550, False: 56]
  ------------------
  169|    550|        return PlBad;
  170|    606|    }
  171|    606|}

_ZN7glslang16HlslParseContextC2ERNS_12TSymbolTableERNS_13TIntermediateEbi8EProfileRKNS_10SpvVersionE11EShLanguageR9TInfoSinkNSt3__112basic_stringIcNSC_11char_traitsIcEENS_14pool_allocatorIcEEEEb11EShMessages:
   69|  2.04k|    TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink,
   70|  2.04k|                      forwardCompatible, messages, &sourceEntryPointName),
   71|  2.04k|    annotationNestingLevel(0),
   72|  2.04k|    inputPatch(nullptr),
   73|  2.04k|    nextInLocation(0), nextOutLocation(0),
   74|  2.04k|    entryPointFunction(nullptr),
   75|  2.04k|    entryPointFunctionBody(nullptr),
   76|  2.04k|    gsStreamOutput(nullptr),
   77|  2.04k|    clipDistanceOutput(nullptr),
   78|  2.04k|    cullDistanceOutput(nullptr),
   79|  2.04k|    clipDistanceInput(nullptr),
   80|  2.04k|    cullDistanceInput(nullptr),
   81|  2.04k|    parsingEntrypointParameters(false)
   82|  2.04k|{
   83|  2.04k|    globalUniformDefaults.clear();
   84|  2.04k|    globalUniformDefaults.layoutMatrix = ElmRowMajor;
   85|  2.04k|    globalUniformDefaults.layoutPacking = ElpStd140;
   86|       |
   87|  2.04k|    globalBufferDefaults.clear();
   88|  2.04k|    globalBufferDefaults.layoutMatrix = ElmRowMajor;
   89|  2.04k|    globalBufferDefaults.layoutPacking = ElpStd430;
   90|       |
   91|  2.04k|    globalInputDefaults.clear();
   92|  2.04k|    globalOutputDefaults.clear();
   93|       |
   94|  2.04k|    clipSemanticNSizeIn.fill(0);
   95|  2.04k|    cullSemanticNSizeIn.fill(0);
   96|  2.04k|    clipSemanticNSizeOut.fill(0);
   97|  2.04k|    cullSemanticNSizeOut.fill(0);
   98|       |
   99|       |    // "Shaders in the transform
  100|       |    // feedback capturing mode have an initial global default of
  101|       |    //     layout(xfb_buffer = 0) out;"
  102|  2.04k|    if (language == EShLangVertex ||
  ------------------
  |  Branch (102:9): [True: 480, False: 1.56k]
  ------------------
  103|  1.56k|        language == EShLangTessControl ||
  ------------------
  |  Branch (103:9): [True: 120, False: 1.44k]
  ------------------
  104|  1.44k|        language == EShLangTessEvaluation ||
  ------------------
  |  Branch (104:9): [True: 120, False: 1.32k]
  ------------------
  105|  1.32k|        language == EShLangGeometry)
  ------------------
  |  Branch (105:9): [True: 120, False: 1.20k]
  ------------------
  106|    840|        globalOutputDefaults.layoutXfbBuffer = 0;
  107|       |
  108|  2.04k|    if (language == EShLangGeometry)
  ------------------
  |  Branch (108:9): [True: 120, False: 1.92k]
  ------------------
  109|    120|        globalOutputDefaults.layoutStream = 0;
  110|  2.04k|}
_ZN7glslang16HlslParseContextD2Ev:
  113|  2.04k|{
  114|  2.04k|}
_ZN7glslang16HlslParseContext27initializeExtensionBehaviorEv:
  117|    120|{
  118|    120|    TParseContextBase::initializeExtensionBehavior();
  119|       |
  120|       |    // HLSL allows #line by default.
  121|    120|    extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhEnable;
  122|    120|}
_ZN7glslang16HlslParseContext9setLimitsERK16TBuiltInResource:
  125|    120|{
  126|    120|    resources = r;
  127|    120|    intermediate.setLimits(resources);
  128|    120|}
_ZN7glslang16HlslParseContext18parseShaderStringsERNS_10TPpContextERNS_13TInputScannerEb:
  136|    240|{
  137|    240|    currentScanner = &input;
  138|    240|    ppContext.setInput(input, versionWillBeError);
  139|       |
  140|    240|    HlslScanContext scanContext(*this, ppContext);
  141|    240|    HlslGrammar grammar(scanContext, *this);
  142|    240|    if (!grammar.parse()) {
  ------------------
  |  Branch (142:9): [True: 29, False: 211]
  ------------------
  143|       |        // Print a message formated such that if you click on the message it will take you right to
  144|       |        // the line through most UIs.
  145|     29|        const glslang::TSourceLoc& sourceLoc = input.getSourceLoc();
  146|     29|        infoSink.info << sourceLoc.getFilenameStr() << "(" << sourceLoc.line << "): error at column " << sourceLoc.column
  147|     29|                      << ", HLSL parsing failed.\n";
  148|     29|        ++numErrors;
  149|     29|        return false;
  150|     29|    }
  151|       |
  152|    211|    finish();
  153|       |
  154|    211|    return numErrors == 0;
  155|    240|}
_ZNK7glslang16HlslParseContext19shouldConvertLValueEPK11TIntermNode:
  162|      2|{
  163|      2|    if (node == nullptr || node->getAsTyped() == nullptr)
  ------------------
  |  Branch (163:9): [True: 0, False: 2]
  |  Branch (163:28): [True: 0, False: 2]
  ------------------
  164|      0|        return false;
  165|       |
  166|      2|    const TIntermAggregate* lhsAsAggregate = node->getAsAggregate();
  167|      2|    const TIntermBinary* lhsAsBinary = node->getAsBinaryNode();
  168|       |
  169|       |    // If it's a swizzled/indexed aggregate, look at the left node instead.
  170|      2|    if (lhsAsBinary != nullptr &&
  ------------------
  |  Branch (170:9): [True: 2, False: 0]
  ------------------
  171|      2|        (lhsAsBinary->getOp() == EOpVectorSwizzle || lhsAsBinary->getOp() == EOpIndexDirect))
  ------------------
  |  Branch (171:10): [True: 0, False: 2]
  |  Branch (171:54): [True: 0, False: 2]
  ------------------
  172|      0|        lhsAsAggregate = lhsAsBinary->getLeft()->getAsAggregate();
  173|      2|    if (lhsAsAggregate != nullptr && lhsAsAggregate->getOp() == EOpImageLoad)
  ------------------
  |  Branch (173:9): [True: 0, False: 2]
  |  Branch (173:38): [True: 0, False: 0]
  ------------------
  174|      0|        return true;
  175|       |
  176|      2|    return false;
  177|      2|}
_ZN7glslang16HlslParseContext22growGlobalUniformBlockERKNS_10TSourceLocERNS_5TTypeERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_7TVectorINS_8TTypeLocEEE:
  181|      6|{
  182|      6|    newTypeList = nullptr;
  183|      6|    correctUniform(memberType.getQualifier());
  184|      6|    if (memberType.isStruct()) {
  ------------------
  |  Branch (184:9): [True: 4, False: 2]
  ------------------
  185|      4|        auto it = ioTypeMap.find(memberType.getStruct());
  186|      4|        if (it != ioTypeMap.end() && it->second.uniform)
  ------------------
  |  Branch (186:13): [True: 0, False: 4]
  |  Branch (186:13): [True: 0, False: 4]
  |  Branch (186:38): [True: 0, False: 0]
  ------------------
  187|      0|            newTypeList = it->second.uniform;
  188|      4|    }
  189|      6|    TParseContextBase::growGlobalUniformBlock(loc, memberType, memberName, newTypeList);
  190|      6|}
_ZN7glslang16HlslParseContext19getLayoutFromTxTypeERKNS_10TSourceLocERKNS_5TTypeE:
  196|  6.84k|{
  197|  6.84k|    if (txType.isStruct()) {
  ------------------
  |  Branch (197:9): [True: 0, False: 6.84k]
  ------------------
  198|       |        // TODO: implement.
  199|      0|        error(loc, "unimplemented: structure type in image or buffer", "", "");
  200|      0|        return ElfNone;
  201|      0|    }
  202|       |
  203|  6.84k|    const int components = txType.getVectorSize();
  204|  6.84k|    const TBasicType txBasicType = txType.getBasicType();
  205|       |
  206|  6.84k|    const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat {
  207|  6.84k|        if (intermediate.getNoStorageFormat())
  208|  6.84k|            return ElfNone;
  209|       |
  210|  6.84k|        return components == 1 ? v1 :
  211|  6.84k|               components == 2 ? v2 : v4;
  212|  6.84k|    };
  213|       |
  214|  6.84k|    switch (txBasicType) {
  215|  2.28k|    case EbtFloat: return selectFormat(ElfR32f,  ElfRg32f,  ElfRgba32f);
  ------------------
  |  Branch (215:5): [True: 2.28k, False: 4.56k]
  ------------------
  216|  2.28k|    case EbtInt:   return selectFormat(ElfR32i,  ElfRg32i,  ElfRgba32i);
  ------------------
  |  Branch (216:5): [True: 2.28k, False: 4.56k]
  ------------------
  217|  2.28k|    case EbtUint:  return selectFormat(ElfR32ui, ElfRg32ui, ElfRgba32ui);
  ------------------
  |  Branch (217:5): [True: 2.28k, False: 4.56k]
  ------------------
  218|      0|    default:
  ------------------
  |  Branch (218:5): [True: 0, False: 6.84k]
  ------------------
  219|      0|        error(loc, "unknown basic type in image format", "", "");
  220|      0|        return ElfNone;
  221|  6.84k|    }
  222|  6.84k|}
_ZN7glslang16HlslParseContext16lValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
  231|      1|{
  232|      1|    if (shouldConvertLValue(node)) {
  ------------------
  |  Branch (232:9): [True: 0, False: 1]
  ------------------
  233|       |        // if we're writing to a texture, it must be an RW form.
  234|       |
  235|      0|        TIntermAggregate* lhsAsAggregate = node->getAsAggregate();
  236|      0|        TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped();
  237|       |
  238|      0|        if (!object->getType().getSampler().isImage()) {
  ------------------
  |  Branch (238:13): [True: 0, False: 0]
  ------------------
  239|      0|            error(loc, "operator[] on a non-RW texture must be an r-value", "", "");
  240|      0|            return true;
  241|      0|        }
  242|      0|    }
  243|       |
  244|       |    // We tolerate samplers as l-values, even though they are nominally
  245|       |    // illegal, because we expect a later optimization to eliminate them.
  246|      1|    if (node->getType().getBasicType() == EbtSampler) {
  ------------------
  |  Branch (246:9): [True: 0, False: 1]
  ------------------
  247|      0|        intermediate.setNeedsLegalization();
  248|      0|        return false;
  249|      0|    }
  250|       |
  251|       |    // Let the base class check errors
  252|      1|    return TParseContextBase::lValueErrorCheck(loc, op, node);
  253|      1|}
_ZN7glslang16HlslParseContext12handleLvalueERKNS_10TSourceLocEPKcRPNS_12TIntermTypedE:
  264|      5|{
  265|      5|    if (node == nullptr)
  ------------------
  |  Branch (265:9): [True: 4, False: 1]
  ------------------
  266|      4|        return nullptr;
  267|       |
  268|      1|    TIntermBinary* nodeAsBinary = node->getAsBinaryNode();
  269|      1|    TIntermUnary* nodeAsUnary = node->getAsUnaryNode();
  270|      1|    TIntermAggregate* sequence = nullptr;
  271|       |
  272|      1|    TIntermTyped* lhs = nodeAsUnary  ? nodeAsUnary->getOperand() :
  ------------------
  |  Branch (272:25): [True: 0, False: 1]
  ------------------
  273|      1|                        nodeAsBinary ? nodeAsBinary->getLeft() :
  ------------------
  |  Branch (273:25): [True: 1, False: 0]
  ------------------
  274|      1|                        nullptr;
  275|       |
  276|       |    // Early bail out if there is no conversion to apply
  277|      1|    if (!shouldConvertLValue(lhs)) {
  ------------------
  |  Branch (277:9): [True: 1, False: 0]
  ------------------
  278|      1|        if (lhs != nullptr)
  ------------------
  |  Branch (278:13): [True: 1, False: 0]
  ------------------
  279|      1|            if (lValueErrorCheck(loc, op, lhs))
  ------------------
  |  Branch (279:17): [True: 1, False: 0]
  ------------------
  280|      1|                return nullptr;
  281|      0|        return node;
  282|      1|    }
  283|       |
  284|       |    // *** If we get here, we're going to apply some conversion to an l-value.
  285|       |
  286|       |    // Helper to create a load.
  287|      0|    const auto makeLoad = [&](TIntermSymbol* rhsTmp, TIntermTyped* object, TIntermTyped* coord, const TType& derefType) {
  288|      0|        TIntermAggregate* loadOp = new TIntermAggregate(EOpImageLoad);
  289|      0|        loadOp->setLoc(loc);
  290|      0|        loadOp->getSequence().push_back(object);
  291|      0|        loadOp->getSequence().push_back(intermediate.addSymbol(*coord->getAsSymbolNode()));
  292|      0|        loadOp->setType(derefType);
  293|       |
  294|      0|        sequence = intermediate.growAggregate(sequence,
  295|      0|                                              intermediate.addAssign(EOpAssign, rhsTmp, loadOp, loc),
  296|      0|                                              loc);
  297|      0|    };
  298|       |
  299|       |    // Helper to create a store.
  300|      0|    const auto makeStore = [&](TIntermTyped* object, TIntermTyped* coord, TIntermSymbol* rhsTmp) {
  301|      0|        TIntermAggregate* storeOp = new TIntermAggregate(EOpImageStore);
  302|      0|        storeOp->getSequence().push_back(object);
  303|      0|        storeOp->getSequence().push_back(coord);
  304|      0|        storeOp->getSequence().push_back(intermediate.addSymbol(*rhsTmp));
  305|      0|        storeOp->setLoc(loc);
  306|      0|        storeOp->setType(TType(EbtVoid));
  307|       |
  308|      0|        sequence = intermediate.growAggregate(sequence, storeOp);
  309|      0|    };
  310|       |
  311|       |    // Helper to create an assign.
  312|      0|    const auto makeBinary = [&](TOperator op, TIntermTyped* lhs, TIntermTyped* rhs) {
  313|      0|        sequence = intermediate.growAggregate(sequence,
  314|      0|                                              intermediate.addBinaryNode(op, lhs, rhs, loc, lhs->getType()),
  315|      0|                                              loc);
  316|      0|    };
  317|       |
  318|       |    // Helper to complete sequence by adding trailing variable, so we evaluate to the right value.
  319|      0|    const auto finishSequence = [&](TIntermSymbol* rhsTmp, const TType& derefType) -> TIntermAggregate* {
  320|       |        // Add a trailing use of the temp, so the sequence returns the proper value.
  321|      0|        sequence = intermediate.growAggregate(sequence, intermediate.addSymbol(*rhsTmp));
  322|      0|        sequence->setOperator(EOpSequence);
  323|      0|        sequence->setLoc(loc);
  324|      0|        sequence->setType(derefType);
  325|       |
  326|      0|        return sequence;
  327|      0|    };
  328|       |
  329|       |    // Helper to add unary op
  330|      0|    const auto makeUnary = [&](TOperator op, TIntermSymbol* rhsTmp) {
  331|      0|        sequence = intermediate.growAggregate(sequence,
  332|      0|                                              intermediate.addUnaryNode(op, intermediate.addSymbol(*rhsTmp), loc,
  333|      0|                                                                        rhsTmp->getType()),
  334|      0|                                              loc);
  335|      0|    };
  336|       |
  337|       |    // Return true if swizzle or index writes all components of the given variable.
  338|      0|    const auto writesAllComponents = [&](TIntermSymbol* var, TIntermBinary* swizzle) -> bool {
  339|      0|        if (swizzle == nullptr)  // not a swizzle or index
  340|      0|            return true;
  341|       |
  342|       |        // Track which components are being set.
  343|      0|        std::array<bool, 4> compIsSet;
  344|      0|        compIsSet.fill(false);
  345|       |
  346|      0|        const TIntermConstantUnion* asConst     = swizzle->getRight()->getAsConstantUnion();
  347|      0|        const TIntermAggregate*     asAggregate = swizzle->getRight()->getAsAggregate();
  348|       |
  349|       |        // This could be either a direct index, or a swizzle.
  350|      0|        if (asConst) {
  351|      0|            compIsSet[asConst->getConstArray()[0].getIConst()] = true;
  352|      0|        } else if (asAggregate) {
  353|      0|            const TIntermSequence& seq = asAggregate->getSequence();
  354|      0|            for (int comp=0; comp<int(seq.size()); ++comp)
  355|      0|                compIsSet[seq[comp]->getAsConstantUnion()->getConstArray()[0].getIConst()] = true;
  356|      0|        } else {
  357|      0|            assert(0);
  358|      0|        }
  359|       |
  360|       |        // Return true if all components are being set by the index or swizzle
  361|      0|        return std::all_of(compIsSet.begin(), compIsSet.begin() + var->getType().getVectorSize(),
  362|      0|                           [](bool isSet) { return isSet; } );
  363|      0|    };
  364|       |
  365|       |    // Create swizzle matching input swizzle
  366|      0|    const auto addSwizzle = [&](TIntermSymbol* var, TIntermBinary* swizzle) -> TIntermTyped* {
  367|      0|        if (swizzle)
  368|      0|            return intermediate.addBinaryNode(swizzle->getOp(), var, swizzle->getRight(), loc, swizzle->getType());
  369|      0|        else
  370|      0|            return var;
  371|      0|    };
  372|       |
  373|      0|    TIntermBinary*    lhsAsBinary    = lhs->getAsBinaryNode();
  374|      0|    TIntermAggregate* lhsAsAggregate = lhs->getAsAggregate();
  375|      0|    bool lhsIsSwizzle = false;
  376|       |
  377|       |    // If it's a swizzled L-value, remember the swizzle, and use the LHS.
  378|      0|    if (lhsAsBinary != nullptr && (lhsAsBinary->getOp() == EOpVectorSwizzle || lhsAsBinary->getOp() == EOpIndexDirect)) {
  ------------------
  |  Branch (378:9): [True: 0, False: 0]
  |  Branch (378:36): [True: 0, False: 0]
  |  Branch (378:80): [True: 0, False: 0]
  ------------------
  379|      0|        lhsAsAggregate = lhsAsBinary->getLeft()->getAsAggregate();
  380|      0|        lhsIsSwizzle = true;
  381|      0|    }
  382|       |
  383|      0|    TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped();
  384|      0|    TIntermTyped* coord  = lhsAsAggregate->getSequence()[1]->getAsTyped();
  385|       |
  386|      0|    const TSampler& texSampler = object->getType().getSampler();
  387|       |
  388|      0|    TType objDerefType;
  389|      0|    getTextureReturnType(texSampler, objDerefType);
  390|       |
  391|      0|    if (nodeAsBinary) {
  ------------------
  |  Branch (391:9): [True: 0, False: 0]
  ------------------
  392|      0|        TIntermTyped* rhs = nodeAsBinary->getRight();
  393|      0|        const TOperator assignOp = nodeAsBinary->getOp();
  394|       |
  395|      0|        bool isModifyOp = false;
  396|       |
  397|      0|        switch (assignOp) {
  398|      0|        case EOpAddAssign:
  ------------------
  |  Branch (398:9): [True: 0, False: 0]
  ------------------
  399|      0|        case EOpSubAssign:
  ------------------
  |  Branch (399:9): [True: 0, False: 0]
  ------------------
  400|      0|        case EOpMulAssign:
  ------------------
  |  Branch (400:9): [True: 0, False: 0]
  ------------------
  401|      0|        case EOpVectorTimesMatrixAssign:
  ------------------
  |  Branch (401:9): [True: 0, False: 0]
  ------------------
  402|      0|        case EOpVectorTimesScalarAssign:
  ------------------
  |  Branch (402:9): [True: 0, False: 0]
  ------------------
  403|      0|        case EOpMatrixTimesScalarAssign:
  ------------------
  |  Branch (403:9): [True: 0, False: 0]
  ------------------
  404|      0|        case EOpMatrixTimesMatrixAssign:
  ------------------
  |  Branch (404:9): [True: 0, False: 0]
  ------------------
  405|      0|        case EOpDivAssign:
  ------------------
  |  Branch (405:9): [True: 0, False: 0]
  ------------------
  406|      0|        case EOpModAssign:
  ------------------
  |  Branch (406:9): [True: 0, False: 0]
  ------------------
  407|      0|        case EOpAndAssign:
  ------------------
  |  Branch (407:9): [True: 0, False: 0]
  ------------------
  408|      0|        case EOpInclusiveOrAssign:
  ------------------
  |  Branch (408:9): [True: 0, False: 0]
  ------------------
  409|      0|        case EOpExclusiveOrAssign:
  ------------------
  |  Branch (409:9): [True: 0, False: 0]
  ------------------
  410|      0|        case EOpLeftShiftAssign:
  ------------------
  |  Branch (410:9): [True: 0, False: 0]
  ------------------
  411|      0|        case EOpRightShiftAssign:
  ------------------
  |  Branch (411:9): [True: 0, False: 0]
  ------------------
  412|      0|            isModifyOp = true;
  413|      0|            [[fallthrough]];
  414|      0|        case EOpAssign:
  ------------------
  |  Branch (414:9): [True: 0, False: 0]
  ------------------
  415|      0|            {
  416|       |                // Since this is an lvalue, we'll convert an image load to a sequence like this
  417|       |                // (to still provide the value):
  418|       |                //   OpSequence
  419|       |                //      OpImageStore(object, lhs, rhs)
  420|       |                //      rhs
  421|       |                // But if it's not a simple symbol RHS (say, a fn call), we don't want to duplicate the RHS,
  422|       |                // so we'll convert instead to this:
  423|       |                //   OpSequence
  424|       |                //      rhsTmp = rhs
  425|       |                //      OpImageStore(object, coord, rhsTmp)
  426|       |                //      rhsTmp
  427|       |                // If this is a read-modify-write op, like +=, we issue:
  428|       |                //   OpSequence
  429|       |                //      coordtmp = load's param1
  430|       |                //      rhsTmp = OpImageLoad(object, coordTmp)
  431|       |                //      rhsTmp op= rhs
  432|       |                //      OpImageStore(object, coordTmp, rhsTmp)
  433|       |                //      rhsTmp
  434|       |                //
  435|       |                // If the lvalue is swizzled, we apply that when writing the temp variable, like so:
  436|       |                //    ...
  437|       |                //    rhsTmp.some_swizzle = ...
  438|       |                // For partial writes, an error is generated.
  439|       |
  440|      0|                TIntermSymbol* rhsTmp = rhs->getAsSymbolNode();
  441|      0|                TIntermTyped* coordTmp = coord;
  442|       |
  443|      0|                if (rhsTmp == nullptr || isModifyOp || lhsIsSwizzle) {
  ------------------
  |  Branch (443:21): [True: 0, False: 0]
  |  Branch (443:42): [True: 0, False: 0]
  |  Branch (443:56): [True: 0, False: 0]
  ------------------
  444|      0|                    rhsTmp = makeInternalVariableNode(loc, "storeTemp", objDerefType);
  445|       |
  446|       |                    // Partial updates not yet supported
  447|      0|                    if (!writesAllComponents(rhsTmp, lhsAsBinary)) {
  ------------------
  |  Branch (447:25): [True: 0, False: 0]
  ------------------
  448|      0|                        error(loc, "unimplemented: partial image updates", "", "");
  449|      0|                    }
  450|       |
  451|       |                    // Assign storeTemp = rhs
  452|      0|                    if (isModifyOp) {
  ------------------
  |  Branch (452:25): [True: 0, False: 0]
  ------------------
  453|       |                        // We have to make a temp var for the coordinate, to avoid evaluating it twice.
  454|      0|                        coordTmp = makeInternalVariableNode(loc, "coordTemp", coord->getType());
  455|      0|                        makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1]
  456|      0|                        makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp)
  457|      0|                    }
  458|       |
  459|       |                    // rhsTmp op= rhs.
  460|      0|                    makeBinary(assignOp, addSwizzle(intermediate.addSymbol(*rhsTmp), lhsAsBinary), rhs);
  461|      0|                }
  462|       |
  463|      0|                makeStore(object, coordTmp, rhsTmp);         // add a store
  464|      0|                return finishSequence(rhsTmp, objDerefType); // return rhsTmp from sequence
  465|      0|            }
  466|       |
  467|      0|        default:
  ------------------
  |  Branch (467:9): [True: 0, False: 0]
  ------------------
  468|      0|            break;
  469|      0|        }
  470|      0|    }
  471|       |
  472|      0|    if (nodeAsUnary) {
  ------------------
  |  Branch (472:9): [True: 0, False: 0]
  ------------------
  473|      0|        const TOperator assignOp = nodeAsUnary->getOp();
  474|       |
  475|      0|        switch (assignOp) {
  476|      0|        case EOpPreIncrement:
  ------------------
  |  Branch (476:9): [True: 0, False: 0]
  ------------------
  477|      0|        case EOpPreDecrement:
  ------------------
  |  Branch (477:9): [True: 0, False: 0]
  ------------------
  478|      0|            {
  479|       |                // We turn this into:
  480|       |                //   OpSequence
  481|       |                //      coordtmp = load's param1
  482|       |                //      rhsTmp = OpImageLoad(object, coordTmp)
  483|       |                //      rhsTmp op
  484|       |                //      OpImageStore(object, coordTmp, rhsTmp)
  485|       |                //      rhsTmp
  486|       |
  487|      0|                TIntermSymbol* rhsTmp = makeInternalVariableNode(loc, "storeTemp", objDerefType);
  488|      0|                TIntermTyped* coordTmp = makeInternalVariableNode(loc, "coordTemp", coord->getType());
  489|       |
  490|      0|                makeBinary(EOpAssign, coordTmp, coord);           // coordtmp = load[param1]
  491|      0|                makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp)
  492|      0|                makeUnary(assignOp, rhsTmp);                      // op rhsTmp
  493|      0|                makeStore(object, coordTmp, rhsTmp);              // OpImageStore(object, coordTmp, rhsTmp)
  494|      0|                return finishSequence(rhsTmp, objDerefType);      // return rhsTmp from sequence
  495|      0|            }
  496|       |
  497|      0|        case EOpPostIncrement:
  ------------------
  |  Branch (497:9): [True: 0, False: 0]
  ------------------
  498|      0|        case EOpPostDecrement:
  ------------------
  |  Branch (498:9): [True: 0, False: 0]
  ------------------
  499|      0|            {
  500|       |                // We turn this into:
  501|       |                //   OpSequence
  502|       |                //      coordtmp = load's param1
  503|       |                //      rhsTmp1 = OpImageLoad(object, coordTmp)
  504|       |                //      rhsTmp2 = rhsTmp1
  505|       |                //      rhsTmp2 op
  506|       |                //      OpImageStore(object, coordTmp, rhsTmp2)
  507|       |                //      rhsTmp1 (pre-op value)
  508|      0|                TIntermSymbol* rhsTmp1 = makeInternalVariableNode(loc, "storeTempPre",  objDerefType);
  509|      0|                TIntermSymbol* rhsTmp2 = makeInternalVariableNode(loc, "storeTempPost", objDerefType);
  510|      0|                TIntermTyped* coordTmp = makeInternalVariableNode(loc, "coordTemp", coord->getType());
  511|       |
  512|      0|                makeBinary(EOpAssign, coordTmp, coord);            // coordtmp = load[param1]
  513|      0|                makeLoad(rhsTmp1, object, coordTmp, objDerefType); // rhsTmp1 = OpImageLoad(object, coordTmp)
  514|      0|                makeBinary(EOpAssign, rhsTmp2, rhsTmp1);           // rhsTmp2 = rhsTmp1
  515|      0|                makeUnary(assignOp, rhsTmp2);                      // rhsTmp op
  516|      0|                makeStore(object, coordTmp, rhsTmp2);              // OpImageStore(object, coordTmp, rhsTmp2)
  517|      0|                return finishSequence(rhsTmp1, objDerefType);      // return rhsTmp from sequence
  518|      0|            }
  519|       |
  520|      0|        default:
  ------------------
  |  Branch (520:9): [True: 0, False: 0]
  ------------------
  521|      0|            break;
  522|      0|        }
  523|      0|    }
  524|       |
  525|      0|    if (lhs)
  ------------------
  |  Branch (525:9): [True: 0, False: 0]
  ------------------
  526|      0|        if (lValueErrorCheck(loc, op, lhs))
  ------------------
  |  Branch (526:13): [True: 0, False: 0]
  ------------------
  527|      0|            return nullptr;
  528|       |
  529|      0|    return node;
  530|      0|}
_ZN7glslang16HlslParseContext14handleVariableERKNS_10TSourceLocEPKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  658|    177|{
  659|    177|    int thisDepth;
  660|    177|    TSymbol* symbol = symbolTable.find(*string, thisDepth);
  661|    177|    if (symbol && symbol->getAsVariable() && symbol->getAsVariable()->isUserType()) {
  ------------------
  |  Branch (661:9): [True: 2, False: 175]
  |  Branch (661:19): [True: 0, False: 2]
  |  Branch (661:46): [True: 0, False: 0]
  ------------------
  662|      0|        error(loc, "expected symbol, not user-defined type", string->c_str(), "");
  663|      0|        return nullptr;
  664|      0|    }
  665|       |
  666|    177|    const TVariable* variable = nullptr;
  667|    177|    const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr;
  ------------------
  |  Branch (667:31): [True: 2, False: 175]
  ------------------
  668|    177|    TIntermTyped* node = nullptr;
  669|    177|    if (anon) {
  ------------------
  |  Branch (669:9): [True: 2, False: 175]
  ------------------
  670|       |        // It was a member of an anonymous container, which could be a 'this' structure.
  671|       |
  672|       |        // Create a subtree for its dereference.
  673|      2|        if (thisDepth > 0) {
  ------------------
  |  Branch (673:13): [True: 0, False: 2]
  ------------------
  674|      0|            variable = getImplicitThis(thisDepth);
  675|      0|            if (variable == nullptr)
  ------------------
  |  Branch (675:17): [True: 0, False: 0]
  ------------------
  676|      0|                error(loc, "cannot access member variables (static member function?)", "this", "");
  677|      0|        }
  678|      2|        if (variable == nullptr)
  ------------------
  |  Branch (678:13): [True: 2, False: 0]
  ------------------
  679|      2|            variable = anon->getAnonContainer().getAsVariable();
  680|       |
  681|      2|        TIntermTyped* container = intermediate.addSymbol(*variable, loc);
  682|      2|        TIntermTyped* constNode = intermediate.addConstantUnion(anon->getMemberNumber(), loc);
  683|      2|        node = intermediate.addIndex(EOpIndexDirectStruct, container, constNode, loc);
  684|       |
  685|      2|        node->setType(*(*variable->getType().getStruct())[anon->getMemberNumber()].type);
  686|      2|        if (node->getType().hiddenMember())
  ------------------
  |  Branch (686:13): [True: 0, False: 2]
  ------------------
  687|      0|            error(loc, "member of nameless block was not redeclared", string->c_str(), "");
  688|    175|    } else {
  689|       |        // Not a member of an anonymous container.
  690|       |
  691|       |        // The symbol table search was done in the lexical phase.
  692|       |        // See if it was a variable.
  693|    175|        variable = symbol ? symbol->getAsVariable() : nullptr;
  ------------------
  |  Branch (693:20): [True: 0, False: 175]
  ------------------
  694|    175|        if (variable) {
  ------------------
  |  Branch (694:13): [True: 0, False: 175]
  ------------------
  695|      0|            if ((variable->getType().getBasicType() == EbtBlock ||
  ------------------
  |  Branch (695:18): [True: 0, False: 0]
  ------------------
  696|      0|                variable->getType().getBasicType() == EbtStruct) && variable->getType().getStruct() == nullptr) {
  ------------------
  |  Branch (696:17): [True: 0, False: 0]
  |  Branch (696:69): [True: 0, False: 0]
  ------------------
  697|      0|                error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), "");
  698|      0|                variable = nullptr;
  699|      0|            }
  700|    175|        } else {
  701|    175|            if (symbol)
  ------------------
  |  Branch (701:17): [True: 0, False: 175]
  ------------------
  702|      0|                error(loc, "variable name expected", string->c_str(), "");
  703|    175|        }
  704|       |
  705|       |        // Recovery, if it wasn't found or was not a variable.
  706|    175|        if (variable == nullptr) {
  ------------------
  |  Branch (706:13): [True: 175, False: 0]
  ------------------
  707|    175|            error(loc, "unknown variable", string->c_str(), "");
  708|    175|            variable = new TVariable(string, TType(EbtVoid));
  709|    175|        }
  710|       |
  711|    175|        if (variable->getType().getQualifier().isFrontEndConstant())
  ------------------
  |  Branch (711:13): [True: 0, False: 175]
  ------------------
  712|      0|            node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc);
  713|    175|        else
  714|    175|            node = intermediate.addSymbol(*variable, loc);
  715|    175|    }
  716|       |
  717|    177|    if (variable->getType().getQualifier().isIo())
  ------------------
  |  Branch (717:9): [True: 2, False: 175]
  ------------------
  718|      2|        intermediate.addIoAccessed(*string);
  719|       |
  720|    177|    return node;
  721|    177|}
_ZN7glslang16HlslParseContext21handleBracketOperatorERKNS_10TSourceLocEPNS_12TIntermTypedES5_:
  729|      1|{
  730|       |    // handle r-value operator[] on textures and images.  l-values will be processed later.
  731|      1|    if (base->getType().getBasicType() == EbtSampler && !base->isArray()) {
  ------------------
  |  Branch (731:9): [True: 0, False: 1]
  |  Branch (731:57): [True: 0, False: 0]
  ------------------
  732|      0|        const TSampler& sampler = base->getType().getSampler();
  733|      0|        if (sampler.isImage() || sampler.isTexture()) {
  ------------------
  |  Branch (733:13): [True: 0, False: 0]
  |  Branch (733:34): [True: 0, False: 0]
  ------------------
  734|      0|            if (! mipsOperatorMipArg.empty() && mipsOperatorMipArg.back().mipLevel == nullptr) {
  ------------------
  |  Branch (734:17): [True: 0, False: 0]
  |  Branch (734:49): [True: 0, False: 0]
  ------------------
  735|       |                // The first operator[] to a .mips[] sequence is the mip level.  We'll remember it.
  736|      0|                mipsOperatorMipArg.back().mipLevel = index;
  737|      0|                return base;  // next [] index is to the same base.
  738|      0|            } else {
  739|      0|                TIntermAggregate* load = new TIntermAggregate(sampler.isImage() ? EOpImageLoad : EOpTextureFetch);
  ------------------
  |  Branch (739:63): [True: 0, False: 0]
  ------------------
  740|       |
  741|      0|                TType sampReturnType;
  742|      0|                getTextureReturnType(sampler, sampReturnType);
  743|       |
  744|      0|                load->setType(sampReturnType);
  745|      0|                load->setLoc(loc);
  746|      0|                load->getSequence().push_back(base);
  747|      0|                load->getSequence().push_back(index);
  748|       |
  749|       |                // Textures need a MIP.  If we saw one go by, use it.  Otherwise, use zero.
  750|      0|                if (sampler.isTexture()) {
  ------------------
  |  Branch (750:21): [True: 0, False: 0]
  ------------------
  751|      0|                    if (! mipsOperatorMipArg.empty()) {
  ------------------
  |  Branch (751:25): [True: 0, False: 0]
  ------------------
  752|      0|                        load->getSequence().push_back(mipsOperatorMipArg.back().mipLevel);
  753|      0|                        mipsOperatorMipArg.pop_back();
  754|      0|                    } else {
  755|      0|                        load->getSequence().push_back(intermediate.addConstantUnion(0, loc, true));
  756|      0|                    }
  757|      0|                }
  758|       |
  759|      0|                return load;
  760|      0|            }
  761|      0|        }
  762|      0|    }
  763|       |
  764|       |    // Handle operator[] on structured buffers: this indexes into the array element of the buffer.
  765|       |    // indexStructBufferContent returns nullptr if it isn't a structuredbuffer (SSBO).
  766|      1|    TIntermTyped* sbArray = indexStructBufferContent(loc, base);
  767|      1|    if (sbArray != nullptr) {
  ------------------
  |  Branch (767:9): [True: 0, False: 1]
  ------------------
  768|       |        // Now we'll apply the [] index to that array
  769|      0|        const TOperator idxOp = (index->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
  ------------------
  |  Branch (769:33): [True: 0, False: 0]
  ------------------
  770|       |
  771|      0|        TIntermTyped* element = intermediate.addIndex(idxOp, sbArray, index, loc);
  772|      0|        const TType derefType(sbArray->getType(), 0);
  773|      0|        element->setType(derefType);
  774|      0|        return element;
  775|      0|    }
  776|       |
  777|      1|    return nullptr;
  778|      1|}
_ZN7glslang16HlslParseContext16makeIntegerIndexEPNS_12TIntermTypedE:
  783|      1|{
  784|      1|    const TBasicType indexBasicType = index->getType().getBasicType();
  785|      1|    const int vecSize = index->getType().getVectorSize();
  786|       |
  787|       |    // We can use int types directly as the index
  788|      1|    if (indexBasicType == EbtInt || indexBasicType == EbtUint ||
  ------------------
  |  Branch (788:9): [True: 1, False: 0]
  |  Branch (788:37): [True: 0, False: 0]
  ------------------
  789|      0|        indexBasicType == EbtInt64 || indexBasicType == EbtUint64)
  ------------------
  |  Branch (789:9): [True: 0, False: 0]
  |  Branch (789:39): [True: 0, False: 0]
  ------------------
  790|      1|        return index;
  791|       |
  792|       |    // Cast index to unsigned integer if it isn't one.
  793|      0|    return intermediate.addConversion(EOpConstructUint, TType(EbtUint, EvqTemporary, vecSize), index);
  794|      1|}
_ZN7glslang16HlslParseContext24handleBracketDereferenceERKNS_10TSourceLocEPNS_12TIntermTypedES5_:
  800|      1|{
  801|      1|    index = makeIntegerIndex(index);
  802|       |
  803|      1|    if (index == nullptr) {
  ------------------
  |  Branch (803:9): [True: 0, False: 1]
  ------------------
  804|      0|        error(loc, " unknown index type ", "", "");
  805|      0|        return nullptr;
  806|      0|    }
  807|       |
  808|      1|    TIntermTyped* result = handleBracketOperator(loc, base, index);
  809|       |
  810|      1|    if (result != nullptr)
  ------------------
  |  Branch (810:9): [True: 0, False: 1]
  ------------------
  811|      0|        return result;  // it was handled as an operator[]
  812|       |
  813|      1|    bool flattened = false;
  814|      1|    int64_t indexValue = 0;
  815|      1|    if (index->getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (815:9): [True: 1, False: 0]
  ------------------
  816|      1|        if (index->getType().contains64BitInt()) {
  ------------------
  |  Branch (816:13): [True: 0, False: 1]
  ------------------
  817|      0|            indexValue = index->getAsConstantUnion()->getConstArray()[0].getI64Const();
  818|      1|        } else if (index->getType().getBasicType() == EbtUint) {
  ------------------
  |  Branch (818:20): [True: 0, False: 1]
  ------------------
  819|      0|            indexValue = index->getAsConstantUnion()->getConstArray()[0].getUConst();
  820|      1|        } else {
  821|      1|            indexValue = index->getAsConstantUnion()->getConstArray()[0].getIConst();
  822|      1|        }
  823|      1|    }
  824|       |
  825|      1|    variableCheck(base);
  826|      1|    if (! base->isArray() && ! base->isMatrix() && ! base->isVector()) {
  ------------------
  |  Branch (826:9): [True: 1, False: 0]
  |  Branch (826:30): [True: 1, False: 0]
  |  Branch (826:52): [True: 1, False: 0]
  ------------------
  827|      1|        if (base->getAsSymbolNode())
  ------------------
  |  Branch (827:13): [True: 1, False: 0]
  ------------------
  828|      1|            error(loc, " left of '[' is not of type array, matrix, or vector ",
  829|      1|                  base->getAsSymbolNode()->getName().c_str(), "");
  830|      0|        else
  831|      0|            error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
  832|      1|    } else if (base->getType().getQualifier().isFrontEndConstant() &&
  ------------------
  |  Branch (832:16): [True: 0, False: 0]
  ------------------
  833|      0|               index->getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (833:16): [True: 0, False: 0]
  ------------------
  834|       |        // both base and index are front-end constants
  835|      0|        checkIndex(loc, base->getType(), indexValue);
  836|      0|        return intermediate.foldDereference(base, indexValue, loc);
  837|      0|    } else {
  838|       |        // at least one of base and index is variable...
  839|       |
  840|      0|        if (index->getQualifier().isFrontEndConstant())
  ------------------
  |  Branch (840:13): [True: 0, False: 0]
  ------------------
  841|      0|            checkIndex(loc, base->getType(), indexValue);
  842|       |
  843|      0|        if (base->getType().isScalarOrVec1())
  ------------------
  |  Branch (843:13): [True: 0, False: 0]
  ------------------
  844|      0|            result = base;
  845|      0|        else if (base->getAsSymbolNode() && wasFlattened(base)) {
  ------------------
  |  Branch (845:18): [True: 0, False: 0]
  |  Branch (845:45): [True: 0, False: 0]
  ------------------
  846|      0|            if (index->getQualifier().storage != EvqConst)
  ------------------
  |  Branch (846:17): [True: 0, False: 0]
  ------------------
  847|      0|                error(loc, "Invalid variable index to flattened array", base->getAsSymbolNode()->getName().c_str(), "");
  848|       |
  849|      0|            result = flattenAccess(base, indexValue);
  850|      0|            flattened = (result != base);
  851|      0|        } else {
  852|      0|            if (index->getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (852:17): [True: 0, False: 0]
  ------------------
  853|      0|                if (base->getType().isUnsizedArray())
  ------------------
  |  Branch (853:21): [True: 0, False: 0]
  ------------------
  854|      0|                    base->getWritableType().updateImplicitArraySize(indexValue + 1);
  855|      0|                else
  856|      0|                    checkIndex(loc, base->getType(), indexValue);
  857|      0|                result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
  858|      0|            } else
  859|      0|                result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
  860|      0|        }
  861|      0|    }
  862|       |
  863|      1|    if (result == nullptr) {
  ------------------
  |  Branch (863:9): [True: 1, False: 0]
  ------------------
  864|       |        // Insert dummy error-recovery result
  865|      1|        result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
  866|      1|    } else {
  867|       |        // If the array reference was flattened, it has the correct type.  E.g, if it was
  868|       |        // a uniform array, it was flattened INTO a set of scalar uniforms, not scalar temps.
  869|       |        // In that case, we preserve the qualifiers.
  870|      0|        if (!flattened) {
  ------------------
  |  Branch (870:13): [True: 0, False: 0]
  ------------------
  871|       |            // Insert valid dereferenced result
  872|      0|            TType newType(base->getType(), 0);  // dereferenced type
  873|      0|            if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst)
  ------------------
  |  Branch (873:17): [True: 0, False: 0]
  |  Branch (873:71): [True: 0, False: 0]
  ------------------
  874|      0|                newType.getQualifier().storage = EvqConst;
  875|      0|            else
  876|      0|                newType.getQualifier().storage = EvqTemporary;
  877|      0|            result->setType(newType);
  878|      0|        }
  879|      0|    }
  880|       |
  881|      1|    return result;
  882|      1|}
_ZN7glslang16HlslParseContext20handleDotDereferenceERKNS_10TSourceLocEPNS_12TIntermTypedERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  943|      3|{
  944|      3|    variableCheck(base);
  945|       |
  946|      3|    if (base->isArray()) {
  ------------------
  |  Branch (946:9): [True: 0, False: 3]
  ------------------
  947|      0|        error(loc, "cannot apply to an array:", ".", field.c_str());
  948|      0|        return base;
  949|      0|    }
  950|       |
  951|      3|    TIntermTyped* result = base;
  952|       |
  953|      3|    if (base->getType().getBasicType() == EbtSampler) {
  ------------------
  |  Branch (953:9): [True: 0, False: 3]
  ------------------
  954|       |        // Handle .mips[mipid][pos] operation on textures
  955|      0|        const TSampler& sampler = base->getType().getSampler();
  956|      0|        if (sampler.isTexture() && field == "mips") {
  ------------------
  |  Branch (956:13): [True: 0, False: 0]
  |  Branch (956:36): [True: 0, False: 0]
  ------------------
  957|       |            // Push a null to signify that we expect a mip level under operator[] next.
  958|      0|            mipsOperatorMipArg.push_back(tMipsOperatorData(loc, nullptr));
  959|       |            // Keep 'result' pointing to 'base', since we expect an operator[] to go by next.
  960|      0|        } else {
  961|      0|            if (field == "mips")
  ------------------
  |  Branch (961:17): [True: 0, False: 0]
  ------------------
  962|      0|                error(loc, "unexpected texture type for .mips[][] operator:",
  963|      0|                      base->getType().getCompleteString().c_str(), "");
  964|      0|            else
  965|      0|                error(loc, "unexpected operator on texture type:", field.c_str(),
  966|      0|                      base->getType().getCompleteString().c_str());
  967|      0|        }
  968|      3|    } else if (base->isVector() || base->isScalar()) {
  ------------------
  |  Branch (968:16): [True: 0, False: 3]
  |  Branch (968:36): [True: 3, False: 0]
  ------------------
  969|      3|        TSwizzleSelectors<TVectorSelector> selectors;
  970|      3|        parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
  971|       |
  972|      3|        if (base->isScalar()) {
  ------------------
  |  Branch (972:13): [True: 3, False: 0]
  ------------------
  973|      3|            if (selectors.size() == 1)
  ------------------
  |  Branch (973:17): [True: 0, False: 3]
  ------------------
  974|      0|                return result;
  975|      3|            else {
  976|      3|                TType type(base->getBasicType(), EvqTemporary, selectors.size());
  977|      3|                return addConstructor(loc, base, type);
  978|      3|            }
  979|      3|        }
  980|       |        // Use EOpIndexDirect (below) with vec1.x so that it remains l-value (Test/hlsl.swizzle.vec1.comp)
  981|      0|        if (base->getVectorSize() == 1 && selectors.size() > 1) {
  ------------------
  |  Branch (981:13): [True: 0, False: 0]
  |  Branch (981:43): [True: 0, False: 0]
  ------------------
  982|      0|            TType scalarType(base->getBasicType(), EvqTemporary, 1);
  983|      0|            TType vectorType(base->getBasicType(), EvqTemporary, selectors.size());
  984|      0|            return addConstructor(loc, addConstructor(loc, base, scalarType), vectorType);
  985|      0|        }
  986|       |
  987|      0|        if (base->getType().getQualifier().isFrontEndConstant())
  ------------------
  |  Branch (987:13): [True: 0, False: 0]
  ------------------
  988|      0|            result = intermediate.foldSwizzle(base, selectors, loc);
  989|      0|        else {
  990|      0|            if (selectors.size() == 1) {
  ------------------
  |  Branch (990:17): [True: 0, False: 0]
  ------------------
  991|      0|                TIntermTyped* index = intermediate.addConstantUnion(selectors[0], loc);
  992|      0|                result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
  993|      0|                result->setType(TType(base->getBasicType(), EvqTemporary));
  994|      0|            } else {
  995|      0|                TIntermTyped* index = intermediate.addSwizzle(selectors, loc);
  996|      0|                result = intermediate.addIndex(EOpVectorSwizzle, base, index, loc);
  997|      0|                result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision,
  998|      0|                                selectors.size()));
  999|      0|            }
 1000|      0|        }
 1001|      0|    } else if (base->isMatrix()) {
  ------------------
  |  Branch (1001:16): [True: 0, False: 0]
  ------------------
 1002|      0|        TSwizzleSelectors<TMatrixSelector> selectors;
 1003|      0|        if (! parseMatrixSwizzleSelector(loc, field, base->getMatrixCols(), base->getMatrixRows(), selectors))
  ------------------
  |  Branch (1003:13): [True: 0, False: 0]
  ------------------
 1004|      0|            return result;
 1005|       |
 1006|      0|        if (selectors.size() == 1) {
  ------------------
  |  Branch (1006:13): [True: 0, False: 0]
  ------------------
 1007|       |            // Representable by m[c][r]
 1008|      0|            if (base->getType().getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (1008:17): [True: 0, False: 0]
  ------------------
 1009|      0|                result = intermediate.foldDereference(base, selectors[0].coord1, loc);
 1010|      0|                result = intermediate.foldDereference(result, selectors[0].coord2, loc);
 1011|      0|            } else {
 1012|      0|                result = intermediate.addIndex(EOpIndexDirect, base,
 1013|      0|                                               intermediate.addConstantUnion(selectors[0].coord1, loc),
 1014|      0|                                               loc);
 1015|      0|                TType dereferencedCol(base->getType(), 0);
 1016|      0|                result->setType(dereferencedCol);
 1017|      0|                result = intermediate.addIndex(EOpIndexDirect, result,
 1018|      0|                                               intermediate.addConstantUnion(selectors[0].coord2, loc),
 1019|      0|                                               loc);
 1020|      0|                TType dereferenced(dereferencedCol, 0);
 1021|      0|                result->setType(dereferenced);
 1022|      0|            }
 1023|      0|        } else {
 1024|      0|            int column = getMatrixComponentsColumn(base->getMatrixRows(), selectors);
 1025|      0|            if (column >= 0) {
  ------------------
  |  Branch (1025:17): [True: 0, False: 0]
  ------------------
 1026|       |                // Representable by m[c]
 1027|      0|                if (base->getType().getQualifier().isFrontEndConstant())
  ------------------
  |  Branch (1027:21): [True: 0, False: 0]
  ------------------
 1028|      0|                    result = intermediate.foldDereference(base, column, loc);
 1029|      0|                else {
 1030|      0|                    result = intermediate.addIndex(EOpIndexDirect, base, intermediate.addConstantUnion(column, loc),
 1031|      0|                                                   loc);
 1032|      0|                    TType dereferenced(base->getType(), 0);
 1033|      0|                    result->setType(dereferenced);
 1034|      0|                }
 1035|      0|            } else {
 1036|       |                // general case, not a column, not a single component
 1037|      0|                TIntermTyped* index = intermediate.addSwizzle(selectors, loc);
 1038|      0|                result = intermediate.addIndex(EOpMatrixSwizzle, base, index, loc);
 1039|      0|                result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision,
 1040|      0|                                      selectors.size()));
 1041|      0|           }
 1042|      0|        }
 1043|      0|    } else if (base->getBasicType() == EbtStruct || base->getBasicType() == EbtBlock) {
  ------------------
  |  Branch (1043:16): [True: 0, False: 0]
  |  Branch (1043:53): [True: 0, False: 0]
  ------------------
 1044|      0|        const TTypeList* fields = base->getType().getStruct();
 1045|      0|        bool fieldFound = false;
 1046|      0|        int member;
 1047|      0|        for (member = 0; member < (int)fields->size(); ++member) {
  ------------------
  |  Branch (1047:26): [True: 0, False: 0]
  ------------------
 1048|      0|            if ((*fields)[member].type->getFieldName() == field) {
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                fieldFound = true;
 1050|      0|                break;
 1051|      0|            }
 1052|      0|        }
 1053|      0|        if (fieldFound) {
  ------------------
  |  Branch (1053:13): [True: 0, False: 0]
  ------------------
 1054|      0|            if (base->getAsSymbolNode() && wasFlattened(base)) {
  ------------------
  |  Branch (1054:17): [True: 0, False: 0]
  |  Branch (1054:44): [True: 0, False: 0]
  ------------------
 1055|      0|                result = flattenAccess(base, member);
 1056|      0|            } else {
 1057|      0|                if (base->getType().getQualifier().storage == EvqConst)
  ------------------
  |  Branch (1057:21): [True: 0, False: 0]
  ------------------
 1058|      0|                    result = intermediate.foldDereference(base, member, loc);
 1059|      0|                else {
 1060|      0|                    TIntermTyped* index = intermediate.addConstantUnion(member, loc);
 1061|      0|                    result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
 1062|      0|                    result->setType(*(*fields)[member].type);
 1063|      0|                }
 1064|      0|            }
 1065|      0|        } else
 1066|      0|            error(loc, "no such field in structure", field.c_str(), "");
 1067|      0|    } else
 1068|      0|        error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString().c_str());
 1069|       |
 1070|      0|    return result;
 1071|      3|}
_ZNK7glslang16HlslParseContext13shouldFlattenERKNS_5TTypeENS_17TStorageQualifierEb:
 1170|      6|{
 1171|      6|    switch (qualifier) {
 1172|      0|    case EvqVaryingIn:
  ------------------
  |  Branch (1172:5): [True: 0, False: 6]
  ------------------
 1173|      0|    case EvqVaryingOut:
  ------------------
  |  Branch (1173:5): [True: 0, False: 6]
  ------------------
 1174|      0|        return type.isStruct() || type.isArray();
  ------------------
  |  Branch (1174:16): [True: 0, False: 0]
  |  Branch (1174:35): [True: 0, False: 0]
  ------------------
 1175|      5|    case EvqUniform:
  ------------------
  |  Branch (1175:5): [True: 5, False: 1]
  ------------------
 1176|      5|        return (type.isArray() && intermediate.getFlattenUniformArrays() && topLevel) ||
  ------------------
  |  Branch (1176:17): [True: 5, False: 0]
  |  Branch (1176:35): [True: 0, False: 5]
  |  Branch (1176:77): [True: 0, False: 0]
  ------------------
 1177|      5|               (type.isStruct() && type.containsOpaque());
  ------------------
  |  Branch (1177:17): [True: 0, False: 5]
  |  Branch (1177:36): [True: 0, False: 0]
  ------------------
 1178|      1|    default:
  ------------------
  |  Branch (1178:5): [True: 1, False: 5]
  ------------------
 1179|      1|        return false;
 1180|      6|    };
 1181|      0|}
_ZNK7glslang16HlslParseContext12wasFlattenedEPKNS_12TIntermTypedE:
 1370|      2|{
 1371|      2|    return node != nullptr && node->getAsSymbolNode() != nullptr &&
  ------------------
  |  Branch (1371:12): [True: 0, False: 2]
  |  Branch (1371:31): [True: 0, False: 0]
  ------------------
 1372|      0|           wasFlattened(node->getAsSymbolNode()->getId());
  ------------------
  |  Branch (1372:12): [True: 0, False: 0]
  ------------------
 1373|      2|}
_ZNK7glslang16HlslParseContext8wasSplitEPKNS_12TIntermTypedE:
 1377|      2|{
 1378|      2|    return node != nullptr && node->getAsSymbolNode() != nullptr &&
  ------------------
  |  Branch (1378:12): [True: 2, False: 0]
  |  Branch (1378:31): [True: 0, False: 2]
  ------------------
 1379|      0|           wasSplit(node->getAsSymbolNode()->getId());
  ------------------
  |  Branch (1379:12): [True: 0, False: 0]
  ------------------
 1380|      2|}
_ZN7glslang16HlslParseContext12trackLinkageERNS_7TSymbolE:
 1473|      7|{
 1474|      7|    TBuiltInVariable biType = symbol.getType().getQualifier().builtIn;
 1475|       |
 1476|      7|    if (biType != EbvNone)
  ------------------
  |  Branch (1476:9): [True: 0, False: 7]
  ------------------
 1477|      0|        builtInTessLinkageSymbols[biType] = symbol.clone();
 1478|       |
 1479|      7|    TParseContextBase::trackLinkage(symbol);
 1480|      7|}
_ZN7glslang16HlslParseContext20isClipOrCullDistanceENS_16TBuiltInVariableE:
 1485|      2|{
 1486|      2|    return builtIn == EbvClipDistance || builtIn == EbvCullDistance;
  ------------------
  |  Branch (1486:12): [True: 0, False: 2]
  |  Branch (1486:42): [True: 0, False: 2]
  ------------------
 1487|      2|}
_ZN7glslang16HlslParseContext24handleFunctionDeclaratorERKNS_10TSourceLocERNS_9TFunctionEb:
 1605|   480k|{
 1606|       |    //
 1607|       |    // Multiple declarations of the same function name are allowed.
 1608|       |    //
 1609|       |    // If this is a definition, the definition production code will check for redefinitions
 1610|       |    // (we don't know at this point if it's a definition or not).
 1611|       |    //
 1612|   480k|    bool builtIn;
 1613|   480k|    TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn);
 1614|   480k|    const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
  ------------------
  |  Branch (1614:32): [True: 2.88k, False: 477k]
  ------------------
 1615|       |
 1616|   480k|    if (prototype) {
  ------------------
  |  Branch (1616:9): [True: 480k, False: 2]
  ------------------
 1617|       |        // All built-in functions are defined, even though they don't have a body.
 1618|       |        // Count their prototype as a definition instead.
 1619|   480k|        if (symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (1619:13): [True: 480k, False: 0]
  ------------------
 1620|   480k|            function.setDefined();
 1621|      0|        else {
 1622|      0|            if (prevDec && ! builtIn)
  ------------------
  |  Branch (1622:17): [True: 0, False: 0]
  |  Branch (1622:28): [True: 0, False: 0]
  ------------------
 1623|      0|                symbol->getAsFunction()->setPrototyped();  // need a writable one, but like having prevDec as a const
 1624|      0|            function.setPrototyped();
 1625|      0|        }
 1626|   480k|    }
 1627|       |
 1628|       |    // This insert won't actually insert it if it's a duplicate signature, but it will still check for
 1629|       |    // other forms of name collisions.
 1630|   480k|    if (! symbolTable.insert(function))
  ------------------
  |  Branch (1630:9): [True: 0, False: 480k]
  ------------------
 1631|      0|        error(loc, "function name is redeclaration of existing name", function.getName().c_str(), "");
 1632|   480k|}
_ZN7glslang16HlslParseContext24handleFunctionDefinitionERKNS_10TSourceLocERNS_9TFunctionERKNS_5TListINS_14TAttributeArgsEEERP11TIntermNode:
 1666|      2|{
 1667|      2|    currentCaller = function.getMangledName();
 1668|      2|    TSymbol* symbol = symbolTable.find(function.getMangledName());
 1669|      2|    TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
  ------------------
  |  Branch (1669:26): [True: 2, False: 0]
  ------------------
 1670|       |
 1671|      2|    if (prevDec == nullptr)
  ------------------
  |  Branch (1671:9): [True: 0, False: 2]
  ------------------
 1672|      0|        error(loc, "can't find function", function.getName().c_str(), "");
 1673|       |    // Note:  'prevDec' could be 'function' if this is the first time we've seen function
 1674|       |    // as it would have just been put in the symbol table.  Otherwise, we're looking up
 1675|       |    // an earlier occurrence.
 1676|       |
 1677|      2|    if (prevDec && prevDec->isDefined()) {
  ------------------
  |  Branch (1677:9): [True: 2, False: 0]
  |  Branch (1677:20): [True: 0, False: 2]
  ------------------
 1678|       |        // Then this function already has a body.
 1679|      0|        error(loc, "function already has a body", function.getName().c_str(), "");
 1680|      0|    }
 1681|      2|    if (prevDec && ! prevDec->isDefined()) {
  ------------------
  |  Branch (1681:9): [True: 2, False: 0]
  |  Branch (1681:20): [True: 2, False: 0]
  ------------------
 1682|      2|        prevDec->setDefined();
 1683|       |
 1684|       |        // Remember the return type for later checking for RETURN statements.
 1685|      2|        currentFunctionType = &(prevDec->getType());
 1686|      2|    } else
 1687|      0|        currentFunctionType = new TType(EbtVoid);
 1688|      2|    functionReturnsValue = false;
 1689|       |
 1690|       |    // Entry points need different I/O and other handling, transform it so the
 1691|       |    // rest of this function doesn't care.
 1692|      2|    entryPointTree = transformEntryPoint(loc, function, attributes);
 1693|       |
 1694|       |    //
 1695|       |    // New symbol table scope for body of function plus its arguments
 1696|       |    //
 1697|      2|    pushScope();
 1698|       |
 1699|       |    //
 1700|       |    // Insert parameters into the symbol table.
 1701|       |    // If the parameter has no name, it's not an error, just don't insert it
 1702|       |    // (could be used for unused args).
 1703|       |    //
 1704|       |    // Also, accumulate the list of parameters into the AST, so lower level code
 1705|       |    // knows where to find parameters.
 1706|       |    //
 1707|      2|    TIntermAggregate* paramNodes = new TIntermAggregate;
 1708|      2|    for (int i = 0; i < function.getParamCount(); i++) {
  ------------------
  |  Branch (1708:21): [True: 0, False: 2]
  ------------------
 1709|      0|        TParameter& param = function[i];
 1710|      0|        if (param.name != nullptr) {
  ------------------
  |  Branch (1710:13): [True: 0, False: 0]
  ------------------
 1711|      0|            TVariable *variable = new TVariable(param.name, *param.type);
 1712|       |
 1713|      0|            if (i == 0 && function.hasImplicitThis()) {
  ------------------
  |  Branch (1713:17): [True: 0, False: 0]
  |  Branch (1713:27): [True: 0, False: 0]
  ------------------
 1714|       |                // Anonymous 'this' members are already in a symbol-table level,
 1715|       |                // and we need to know what function parameter to map them to.
 1716|      0|                symbolTable.makeInternalVariable(*variable);
 1717|      0|                pushImplicitThis(variable);
 1718|      0|            }
 1719|       |
 1720|       |            // Insert the parameters with name in the symbol table.
 1721|      0|            if (! symbolTable.insert(*variable))
  ------------------
  |  Branch (1721:17): [True: 0, False: 0]
  ------------------
 1722|      0|                error(loc, "redefinition", variable->getName().c_str(), "");
 1723|       |
 1724|       |            // Add parameters to the AST list.
 1725|      0|            if (shouldFlatten(variable->getType(), variable->getType().getQualifier().storage, true)) {
  ------------------
  |  Branch (1725:17): [True: 0, False: 0]
  ------------------
 1726|       |                // Expand the AST parameter nodes (but not the name mangling or symbol table view)
 1727|       |                // for structures that need to be flattened.
 1728|      0|                flatten(*variable, false);
 1729|      0|                const TTypeList* structure = variable->getType().getStruct();
 1730|      0|                for (int mem = 0; mem < (int)structure->size(); ++mem) {
  ------------------
  |  Branch (1730:35): [True: 0, False: 0]
  ------------------
 1731|      0|                    paramNodes = intermediate.growAggregate(paramNodes,
 1732|      0|                                                            flattenAccess(variable->getUniqueId(), mem,
 1733|      0|                                                                          variable->getType().getQualifier().storage,
 1734|      0|                                                                          *(*structure)[mem].type),
 1735|      0|                                                            loc);
 1736|      0|                }
 1737|      0|            } else {
 1738|       |                // Add the parameter to the AST
 1739|      0|                paramNodes = intermediate.growAggregate(paramNodes,
 1740|      0|                                                        intermediate.addSymbol(*variable, loc),
 1741|      0|                                                        loc);
 1742|      0|            }
 1743|       |
 1744|       |            // Add hidden AST parameter for struct buffer counters, if needed.
 1745|      0|            addStructBufferHiddenCounterParam(loc, param, paramNodes);
 1746|      0|        } else
 1747|      0|            paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(*param.type, loc), loc);
 1748|      0|    }
 1749|      2|    if (function.hasIllegalImplicitThis())
  ------------------
  |  Branch (1749:9): [True: 0, False: 2]
  ------------------
 1750|      0|        pushImplicitThis(nullptr);
 1751|       |
 1752|      2|    intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc);
 1753|      2|    loopNestingLevel = 0;
 1754|      2|    controlFlowNestingLevel = 0;
 1755|      2|    postEntryPointReturn = false;
 1756|       |
 1757|      2|    return paramNodes;
 1758|      2|}
_ZN7glslang16HlslParseContext22transferTypeAttributesERKNS_10TSourceLocERKNS_5TListINS_14TAttributeArgsEEERNS_5TTypeEb:
 1933|  1.55M|{
 1934|  1.55M|    if (attributes.size() == 0)
  ------------------
  |  Branch (1934:9): [True: 1.55M, False: 0]
  ------------------
 1935|  1.55M|        return;
 1936|       |
 1937|      0|    int value;
 1938|      0|    TString builtInString;
 1939|      0|    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
  ------------------
  |  Branch (1939:40): [True: 0, False: 0]
  ------------------
 1940|      0|        switch (it->name) {
 1941|      0|        case EatLocation:
  ------------------
  |  Branch (1941:9): [True: 0, False: 0]
  ------------------
 1942|       |            // location
 1943|      0|            if (it->getInt(value))
  ------------------
  |  Branch (1943:17): [True: 0, False: 0]
  ------------------
 1944|      0|                type.getQualifier().layoutLocation = value;
 1945|      0|            else
 1946|      0|                error(loc, "needs a literal integer", "location", "");
 1947|      0|            break;
 1948|      0|        case EatBinding:
  ------------------
  |  Branch (1948:9): [True: 0, False: 0]
  ------------------
 1949|       |            // binding
 1950|      0|            if (it->getInt(value)) {
  ------------------
  |  Branch (1950:17): [True: 0, False: 0]
  ------------------
 1951|      0|                type.getQualifier().layoutBinding = value;
 1952|      0|                type.getQualifier().layoutSet = 0;
 1953|      0|            } else
 1954|      0|                error(loc, "needs a literal integer", "binding", "");
 1955|       |            // set
 1956|      0|            if (it->getInt(value, 1))
  ------------------
  |  Branch (1956:17): [True: 0, False: 0]
  ------------------
 1957|      0|                type.getQualifier().layoutSet = value;
 1958|      0|            break;
 1959|      0|        case EatGlobalBinding:
  ------------------
  |  Branch (1959:9): [True: 0, False: 0]
  ------------------
 1960|       |            // global cbuffer binding
 1961|      0|            if (it->getInt(value))
  ------------------
  |  Branch (1961:17): [True: 0, False: 0]
  ------------------
 1962|      0|                globalUniformBinding = value;
 1963|      0|            else
 1964|      0|                error(loc, "needs a literal integer", "global binding", "");
 1965|       |            // global cbuffer set
 1966|      0|            if (it->getInt(value, 1))
  ------------------
  |  Branch (1966:17): [True: 0, False: 0]
  ------------------
 1967|      0|                globalUniformSet = value;
 1968|      0|            break;
 1969|      0|        case EatInputAttachment:
  ------------------
  |  Branch (1969:9): [True: 0, False: 0]
  ------------------
 1970|       |            // input attachment
 1971|      0|            if (it->getInt(value))
  ------------------
  |  Branch (1971:17): [True: 0, False: 0]
  ------------------
 1972|      0|                type.getQualifier().layoutAttachment = value;
 1973|      0|            else
 1974|      0|                error(loc, "needs a literal integer", "input attachment", "");
 1975|      0|            break;
 1976|      0|        case EatBuiltIn:
  ------------------
  |  Branch (1976:9): [True: 0, False: 0]
  ------------------
 1977|       |            // PointSize built-in
 1978|      0|            if (it->getString(builtInString, 0, false)) {
  ------------------
  |  Branch (1978:17): [True: 0, False: 0]
  ------------------
 1979|      0|                if (builtInString == "PointSize")
  ------------------
  |  Branch (1979:21): [True: 0, False: 0]
  ------------------
 1980|      0|                    type.getQualifier().builtIn = EbvPointSize;
 1981|      0|            }
 1982|      0|            break;
 1983|      0|        case EatPushConstant:
  ------------------
  |  Branch (1983:9): [True: 0, False: 0]
  ------------------
 1984|       |            // push_constant
 1985|      0|            type.getQualifier().layoutPushConstant = true;
 1986|      0|            break;
 1987|      0|        case EatConstantId:
  ------------------
  |  Branch (1987:9): [True: 0, False: 0]
  ------------------
 1988|       |            // specialization constant
 1989|      0|            if (type.getQualifier().storage != EvqConst) {
  ------------------
  |  Branch (1989:17): [True: 0, False: 0]
  ------------------
 1990|      0|                error(loc, "needs a const type", "constant_id", "");
 1991|      0|                break;
 1992|      0|            }
 1993|      0|            if (it->getInt(value)) {
  ------------------
  |  Branch (1993:17): [True: 0, False: 0]
  ------------------
 1994|      0|                TSourceLoc loc;
 1995|      0|                loc.init();
 1996|      0|                setSpecConstantId(loc, type.getQualifier(), (unsigned)value);
 1997|      0|            }
 1998|      0|            break;
 1999|       |
 2000|       |        // image formats
 2001|      0|        case EatFormatRgba32f:      type.getQualifier().layoutFormat = ElfRgba32f;      break;
  ------------------
  |  Branch (2001:9): [True: 0, False: 0]
  ------------------
 2002|      0|        case EatFormatRgba16f:      type.getQualifier().layoutFormat = ElfRgba16f;      break;
  ------------------
  |  Branch (2002:9): [True: 0, False: 0]
  ------------------
 2003|      0|        case EatFormatR32f:         type.getQualifier().layoutFormat = ElfR32f;         break;
  ------------------
  |  Branch (2003:9): [True: 0, False: 0]
  ------------------
 2004|      0|        case EatFormatRgba8:        type.getQualifier().layoutFormat = ElfRgba8;        break;
  ------------------
  |  Branch (2004:9): [True: 0, False: 0]
  ------------------
 2005|      0|        case EatFormatRgba8Snorm:   type.getQualifier().layoutFormat = ElfRgba8Snorm;   break;
  ------------------
  |  Branch (2005:9): [True: 0, False: 0]
  ------------------
 2006|      0|        case EatFormatRg32f:        type.getQualifier().layoutFormat = ElfRg32f;        break;
  ------------------
  |  Branch (2006:9): [True: 0, False: 0]
  ------------------
 2007|      0|        case EatFormatRg16f:        type.getQualifier().layoutFormat = ElfRg16f;        break;
  ------------------
  |  Branch (2007:9): [True: 0, False: 0]
  ------------------
 2008|      0|        case EatFormatR11fG11fB10f: type.getQualifier().layoutFormat = ElfR11fG11fB10f; break;
  ------------------
  |  Branch (2008:9): [True: 0, False: 0]
  ------------------
 2009|      0|        case EatFormatR16f:         type.getQualifier().layoutFormat = ElfR16f;         break;
  ------------------
  |  Branch (2009:9): [True: 0, False: 0]
  ------------------
 2010|      0|        case EatFormatRgba16:       type.getQualifier().layoutFormat = ElfRgba16;       break;
  ------------------
  |  Branch (2010:9): [True: 0, False: 0]
  ------------------
 2011|      0|        case EatFormatRgb10A2:      type.getQualifier().layoutFormat = ElfRgb10A2;      break;
  ------------------
  |  Branch (2011:9): [True: 0, False: 0]
  ------------------
 2012|      0|        case EatFormatRg16:         type.getQualifier().layoutFormat = ElfRg16;         break;
  ------------------
  |  Branch (2012:9): [True: 0, False: 0]
  ------------------
 2013|      0|        case EatFormatRg8:          type.getQualifier().layoutFormat = ElfRg8;          break;
  ------------------
  |  Branch (2013:9): [True: 0, False: 0]
  ------------------
 2014|      0|        case EatFormatR16:          type.getQualifier().layoutFormat = ElfR16;          break;
  ------------------
  |  Branch (2014:9): [True: 0, False: 0]
  ------------------
 2015|      0|        case EatFormatR8:           type.getQualifier().layoutFormat = ElfR8;           break;
  ------------------
  |  Branch (2015:9): [True: 0, False: 0]
  ------------------
 2016|      0|        case EatFormatRgba16Snorm:  type.getQualifier().layoutFormat = ElfRgba16Snorm;  break;
  ------------------
  |  Branch (2016:9): [True: 0, False: 0]
  ------------------
 2017|      0|        case EatFormatRg16Snorm:    type.getQualifier().layoutFormat = ElfRg16Snorm;    break;
  ------------------
  |  Branch (2017:9): [True: 0, False: 0]
  ------------------
 2018|      0|        case EatFormatRg8Snorm:     type.getQualifier().layoutFormat = ElfRg8Snorm;     break;
  ------------------
  |  Branch (2018:9): [True: 0, False: 0]
  ------------------
 2019|      0|        case EatFormatR16Snorm:     type.getQualifier().layoutFormat = ElfR16Snorm;     break;
  ------------------
  |  Branch (2019:9): [True: 0, False: 0]
  ------------------
 2020|      0|        case EatFormatR8Snorm:      type.getQualifier().layoutFormat = ElfR8Snorm;      break;
  ------------------
  |  Branch (2020:9): [True: 0, False: 0]
  ------------------
 2021|      0|        case EatFormatRgba32i:      type.getQualifier().layoutFormat = ElfRgba32i;      break;
  ------------------
  |  Branch (2021:9): [True: 0, False: 0]
  ------------------
 2022|      0|        case EatFormatRgba16i:      type.getQualifier().layoutFormat = ElfRgba16i;      break;
  ------------------
  |  Branch (2022:9): [True: 0, False: 0]
  ------------------
 2023|      0|        case EatFormatRgba8i:       type.getQualifier().layoutFormat = ElfRgba8i;       break;
  ------------------
  |  Branch (2023:9): [True: 0, False: 0]
  ------------------
 2024|      0|        case EatFormatR32i:         type.getQualifier().layoutFormat = ElfR32i;         break;
  ------------------
  |  Branch (2024:9): [True: 0, False: 0]
  ------------------
 2025|      0|        case EatFormatRg32i:        type.getQualifier().layoutFormat = ElfRg32i;        break;
  ------------------
  |  Branch (2025:9): [True: 0, False: 0]
  ------------------
 2026|      0|        case EatFormatRg16i:        type.getQualifier().layoutFormat = ElfRg16i;        break;
  ------------------
  |  Branch (2026:9): [True: 0, False: 0]
  ------------------
 2027|      0|        case EatFormatRg8i:         type.getQualifier().layoutFormat = ElfRg8i;         break;
  ------------------
  |  Branch (2027:9): [True: 0, False: 0]
  ------------------
 2028|      0|        case EatFormatR16i:         type.getQualifier().layoutFormat = ElfR16i;         break;
  ------------------
  |  Branch (2028:9): [True: 0, False: 0]
  ------------------
 2029|      0|        case EatFormatR8i:          type.getQualifier().layoutFormat = ElfR8i;          break;
  ------------------
  |  Branch (2029:9): [True: 0, False: 0]
  ------------------
 2030|      0|        case EatFormatRgba32ui:     type.getQualifier().layoutFormat = ElfRgba32ui;     break;
  ------------------
  |  Branch (2030:9): [True: 0, False: 0]
  ------------------
 2031|      0|        case EatFormatRgba16ui:     type.getQualifier().layoutFormat = ElfRgba16ui;     break;
  ------------------
  |  Branch (2031:9): [True: 0, False: 0]
  ------------------
 2032|      0|        case EatFormatRgba8ui:      type.getQualifier().layoutFormat = ElfRgba8ui;      break;
  ------------------
  |  Branch (2032:9): [True: 0, False: 0]
  ------------------
 2033|      0|        case EatFormatR32ui:        type.getQualifier().layoutFormat = ElfR32ui;        break;
  ------------------
  |  Branch (2033:9): [True: 0, False: 0]
  ------------------
 2034|      0|        case EatFormatRgb10a2ui:    type.getQualifier().layoutFormat = ElfRgb10a2ui;    break;
  ------------------
  |  Branch (2034:9): [True: 0, False: 0]
  ------------------
 2035|      0|        case EatFormatRg32ui:       type.getQualifier().layoutFormat = ElfRg32ui;       break;
  ------------------
  |  Branch (2035:9): [True: 0, False: 0]
  ------------------
 2036|      0|        case EatFormatRg16ui:       type.getQualifier().layoutFormat = ElfRg16ui;       break;
  ------------------
  |  Branch (2036:9): [True: 0, False: 0]
  ------------------
 2037|      0|        case EatFormatRg8ui:        type.getQualifier().layoutFormat = ElfRg8ui;        break;
  ------------------
  |  Branch (2037:9): [True: 0, False: 0]
  ------------------
 2038|      0|        case EatFormatR16ui:        type.getQualifier().layoutFormat = ElfR16ui;        break;
  ------------------
  |  Branch (2038:9): [True: 0, False: 0]
  ------------------
 2039|      0|        case EatFormatR8ui:         type.getQualifier().layoutFormat = ElfR8ui;         break;
  ------------------
  |  Branch (2039:9): [True: 0, False: 0]
  ------------------
 2040|      0|        case EatFormatUnknown:      type.getQualifier().layoutFormat = ElfNone;         break;
  ------------------
  |  Branch (2040:9): [True: 0, False: 0]
  ------------------
 2041|       |
 2042|      0|        case EatNonWritable:  type.getQualifier().readonly = true;   break;
  ------------------
  |  Branch (2042:9): [True: 0, False: 0]
  ------------------
 2043|      0|        case EatNonReadable:  type.getQualifier().writeonly = true;  break;
  ------------------
  |  Branch (2043:9): [True: 0, False: 0]
  ------------------
 2044|       |
 2045|      0|        default:
  ------------------
  |  Branch (2045:9): [True: 0, False: 0]
  ------------------
 2046|      0|            if (! allowEntry)
  ------------------
  |  Branch (2046:17): [True: 0, False: 0]
  ------------------
 2047|      0|                warn(loc, "attribute does not apply to a type", "", "");
 2048|      0|            break;
 2049|      0|        }
 2050|      0|    }
 2051|      0|}
_ZN7glslang16HlslParseContext19transformEntryPointERKNS_10TSourceLocERNS_9TFunctionERKNS_5TListINS_14TAttributeArgsEEE:
 2087|      2|{
 2088|       |    // Return true if this is a tessellation patch constant function input to a domain shader.
 2089|      2|    const auto isDsPcfInput = [this](const TType& type) {
 2090|      2|        return language == EShLangTessEvaluation &&
 2091|      2|        type.contains([](const TType* t) {
 2092|      2|                return t->getQualifier().builtIn == EbvTessLevelOuter ||
 2093|      2|                       t->getQualifier().builtIn == EbvTessLevelInner;
 2094|      2|            });
 2095|      2|    };
 2096|       |
 2097|       |    // if we aren't in the entry point, fix the IO as such and exit
 2098|      2|    if (! isEntrypointName(userFunction.getName())) {
  ------------------
  |  Branch (2098:9): [True: 2, False: 0]
  ------------------
 2099|      2|        remapNonEntryPointIO(userFunction);
 2100|      2|        return nullptr;
 2101|      2|    }
 2102|       |
 2103|      0|    entryPointFunction = &userFunction; // needed in finish()
 2104|       |
 2105|       |    // Handle entry point attributes
 2106|      0|    handleEntryPointAttributes(loc, attributes);
 2107|       |
 2108|       |    // entry point logic...
 2109|       |
 2110|       |    // Move parameters and return value to shader in/out
 2111|      0|    TVariable* entryPointOutput; // gets created in remapEntryPointIO
 2112|      0|    TVector<TVariable*> inputs;
 2113|      0|    TVector<TVariable*> outputs;
 2114|      0|    remapEntryPointIO(userFunction, entryPointOutput, inputs, outputs);
 2115|       |
 2116|       |    // Further this return/in/out transform by flattening, splitting, and assigning locations
 2117|      0|    const auto makeVariableInOut = [&](TVariable& variable) {
 2118|      0|        if (variable.getType().isStruct()) {
 2119|      0|            bool arrayed = variable.getType().getQualifier().isArrayedIo(language);
 2120|      0|            flatten(variable, false /* don't track linkage here, it will be tracked in assignToInterface() */, arrayed);
 2121|      0|        }
 2122|       |        // TODO: flatten arrays too
 2123|       |        // TODO: flatten everything in I/O
 2124|       |        // TODO: replace all split with flatten, make all paths can create flattened I/O, then split code can be removed
 2125|       |
 2126|       |        // For clip and cull distance, multiple output variables potentially get merged
 2127|       |        // into one in assignClipCullDistance.  That code in assignClipCullDistance
 2128|       |        // handles the interface logic, so we avoid it here in that case.
 2129|      0|        if (!isClipOrCullDistance(variable.getType()))
 2130|      0|            assignToInterface(variable);
 2131|      0|    };
 2132|      0|    if (entryPointOutput != nullptr)
  ------------------
  |  Branch (2132:9): [True: 0, False: 0]
  ------------------
 2133|      0|        makeVariableInOut(*entryPointOutput);
 2134|      0|    for (auto it = inputs.begin(); it != inputs.end(); ++it)
  ------------------
  |  Branch (2134:36): [True: 0, False: 0]
  ------------------
 2135|      0|        if (!isDsPcfInput((*it)->getType()))  // wait until the end for PCF input (see comment below)
  ------------------
  |  Branch (2135:13): [True: 0, False: 0]
  ------------------
 2136|      0|            makeVariableInOut(*(*it));
 2137|      0|    for (auto it = outputs.begin(); it != outputs.end(); ++it)
  ------------------
  |  Branch (2137:37): [True: 0, False: 0]
  ------------------
 2138|      0|        makeVariableInOut(*(*it));
 2139|       |
 2140|       |    // In the domain shader, PCF input must be at the end of the linkage.  That's because in the
 2141|       |    // hull shader there is no ordering: the output comes from the separate PCF, which does not
 2142|       |    // participate in the argument list.  That is always put at the end of the HS linkage, so the
 2143|       |    // input side of the DS must match.  The argument may be in any position in the DS argument list
 2144|       |    // however, so this ensures the linkage is built in the correct order regardless of argument order.
 2145|      0|    if (language == EShLangTessEvaluation) {
  ------------------
  |  Branch (2145:9): [True: 0, False: 0]
  ------------------
 2146|      0|        for (auto it = inputs.begin(); it != inputs.end(); ++it)
  ------------------
  |  Branch (2146:40): [True: 0, False: 0]
  ------------------
 2147|      0|            if (isDsPcfInput((*it)->getType()))
  ------------------
  |  Branch (2147:17): [True: 0, False: 0]
  ------------------
 2148|      0|                makeVariableInOut(*(*it));
 2149|      0|    }
 2150|       |
 2151|       |    // Add uniform parameters to the $Global uniform block.
 2152|      0|    TVector<TVariable*> opaque_uniforms;
 2153|      0|    for (int i = 0; i < userFunction.getParamCount(); i++) {
  ------------------
  |  Branch (2153:21): [True: 0, False: 0]
  ------------------
 2154|      0|        TType& paramType = *userFunction[i].type;
 2155|      0|        TString& paramName = *userFunction[i].name;
 2156|      0|        if (paramType.getQualifier().storage == EvqUniform) {
  ------------------
  |  Branch (2156:13): [True: 0, False: 0]
  ------------------
 2157|      0|            if (!paramType.containsOpaque()) {
  ------------------
  |  Branch (2157:17): [True: 0, False: 0]
  ------------------
 2158|       |                // Add it to the global uniform block.
 2159|      0|                growGlobalUniformBlock(loc, paramType, paramName);
 2160|      0|            } else {
 2161|       |                // Declare it as a separate variable.
 2162|      0|                TVariable *var = makeInternalVariable(paramName.c_str(), paramType);
 2163|      0|                opaque_uniforms.push_back(var);
 2164|      0|            }
 2165|      0|        }
 2166|      0|    }
 2167|       |
 2168|       |    // Synthesize the call
 2169|       |
 2170|      0|    pushScope(); // matches the one in handleFunctionBody()
 2171|       |
 2172|       |    // new signature
 2173|      0|    TType voidType(EbtVoid);
 2174|      0|    TFunction synthEntryPoint(&userFunction.getName(), voidType);
 2175|      0|    TIntermAggregate* synthParams = new TIntermAggregate();
 2176|      0|    intermediate.setAggregateOperator(synthParams, EOpParameters, voidType, loc);
 2177|      0|    intermediate.setEntryPointMangledName(synthEntryPoint.getMangledName().c_str());
 2178|      0|    intermediate.incrementEntryPointCount();
 2179|      0|    TFunction callee(&userFunction.getName(), voidType); // call based on old name, which is still in the symbol table
 2180|       |
 2181|       |    // change original name
 2182|      0|    userFunction.addPrefix("@");                         // change the name in the function, but not in the symbol table
 2183|       |
 2184|       |    // Copy inputs (shader-in -> calling arg), while building up the call node
 2185|      0|    TVector<TVariable*> argVars;
 2186|      0|    TIntermAggregate* synthBody = new TIntermAggregate();
 2187|      0|    auto inputIt = inputs.begin();
 2188|      0|    auto opaqueUniformIt = opaque_uniforms.begin();
 2189|      0|    TIntermTyped* callingArgs = nullptr;
 2190|       |
 2191|      0|    for (int i = 0; i < userFunction.getParamCount(); i++) {
  ------------------
  |  Branch (2191:21): [True: 0, False: 0]
  ------------------
 2192|      0|        TParameter& param = userFunction[i];
 2193|      0|        argVars.push_back(makeInternalVariable(*param.name, *param.type));
 2194|      0|        argVars.back()->getWritableType().getQualifier().makeTemporary();
 2195|       |
 2196|       |        // Track the input patch, which is the only non-builtin supported by hull shader PCF.
 2197|      0|        if (param.getDeclaredBuiltIn() == EbvInputPatch)
  ------------------
  |  Branch (2197:13): [True: 0, False: 0]
  ------------------
 2198|      0|            inputPatch = argVars.back();
 2199|       |
 2200|      0|        TIntermSymbol* arg = intermediate.addSymbol(*argVars.back());
 2201|      0|        handleFunctionArgument(&callee, callingArgs, arg);
 2202|      0|        if (param.type->getQualifier().isParamInput()) {
  ------------------
  |  Branch (2202:13): [True: 0, False: 0]
  ------------------
 2203|      0|            TIntermTyped* input = intermediate.addSymbol(**inputIt);
 2204|      0|            if (input->getType().getQualifier().builtIn == EbvFragCoord && intermediate.getDxPositionW()) {
  ------------------
  |  Branch (2204:17): [True: 0, False: 0]
  |  Branch (2204:76): [True: 0, False: 0]
  ------------------
 2205|       |                // Replace FragCoord W with reciprocal
 2206|      0|                auto pos_xyz = handleDotDereference(loc, input, "xyz");
 2207|      0|                auto pos_w   = handleDotDereference(loc, input, "w");
 2208|      0|                auto one     = intermediate.addConstantUnion(1.0, EbtFloat, loc);
 2209|      0|                auto recip_w = intermediate.addBinaryMath(EOpDiv, one, pos_w, loc);
 2210|      0|                TIntermAggregate* dst = new TIntermAggregate(EOpConstructVec4);
 2211|      0|                dst->getSequence().push_back(pos_xyz);
 2212|      0|                dst->getSequence().push_back(recip_w);
 2213|      0|                dst->setType(TType(EbtFloat, EvqTemporary, 4));
 2214|      0|                dst->setLoc(loc);
 2215|      0|                input = dst;
 2216|      0|            }
 2217|      0|            intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg, input));
 2218|      0|            inputIt++;
 2219|      0|        }
 2220|      0|        if (param.type->getQualifier().storage == EvqUniform) {
  ------------------
  |  Branch (2220:13): [True: 0, False: 0]
  ------------------
 2221|      0|            if (!param.type->containsOpaque()) {
  ------------------
  |  Branch (2221:17): [True: 0, False: 0]
  ------------------
 2222|       |                // Look it up in the $Global uniform block.
 2223|      0|                intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg,
 2224|      0|                                                                   handleVariable(loc, param.name)));
 2225|      0|            } else {
 2226|      0|                intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg,
 2227|      0|                                                                   intermediate.addSymbol(**opaqueUniformIt)));
 2228|      0|                ++opaqueUniformIt;
 2229|      0|            }
 2230|      0|        }
 2231|      0|    }
 2232|       |
 2233|       |    // Call
 2234|      0|    currentCaller = synthEntryPoint.getMangledName();
 2235|      0|    TIntermTyped* callReturn = handleFunctionCall(loc, &callee, callingArgs);
 2236|      0|    currentCaller = userFunction.getMangledName();
 2237|       |
 2238|       |    // Return value
 2239|      0|    if (entryPointOutput) {
  ------------------
  |  Branch (2239:9): [True: 0, False: 0]
  ------------------
 2240|      0|        TIntermTyped* returnAssign;
 2241|       |
 2242|       |        // For hull shaders, the wrapped entry point return value is written to
 2243|       |        // an array element as indexed by invocation ID, which we might have to make up.
 2244|       |        // This is required to match SPIR-V semantics.
 2245|      0|        if (language == EShLangTessControl) {
  ------------------
  |  Branch (2245:13): [True: 0, False: 0]
  ------------------
 2246|      0|            TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
 2247|       |
 2248|       |            // If there is no user declared invocation ID, we must make one.
 2249|      0|            if (invocationIdSym == nullptr) {
  ------------------
  |  Branch (2249:17): [True: 0, False: 0]
  ------------------
 2250|      0|                TType invocationIdType(EbtUint, EvqIn, 1);
 2251|      0|                TString* invocationIdName = NewPoolTString("InvocationId");
 2252|      0|                invocationIdType.getQualifier().builtIn = EbvInvocationId;
 2253|       |
 2254|      0|                TVariable* variable = makeInternalVariable(*invocationIdName, invocationIdType);
 2255|       |
 2256|      0|                globalQualifierFix(loc, variable->getWritableType().getQualifier());
 2257|      0|                trackLinkage(*variable);
 2258|       |
 2259|      0|                invocationIdSym = intermediate.addSymbol(*variable);
 2260|      0|            }
 2261|       |
 2262|      0|            TIntermTyped* element = intermediate.addIndex(EOpIndexIndirect, intermediate.addSymbol(*entryPointOutput),
 2263|      0|                                                          invocationIdSym, loc);
 2264|       |
 2265|       |            // Set the type of the array element being dereferenced
 2266|      0|            const TType derefElementType(entryPointOutput->getType(), 0);
 2267|      0|            element->setType(derefElementType);
 2268|       |
 2269|      0|            returnAssign = handleAssign(loc, EOpAssign, element, callReturn);
 2270|      0|        } else {
 2271|      0|            returnAssign = handleAssign(loc, EOpAssign, intermediate.addSymbol(*entryPointOutput), callReturn);
 2272|      0|        }
 2273|      0|        intermediate.growAggregate(synthBody, returnAssign);
 2274|      0|    } else
 2275|      0|        intermediate.growAggregate(synthBody, callReturn);
 2276|       |
 2277|       |    // Output copies
 2278|      0|    auto outputIt = outputs.begin();
 2279|      0|    for (int i = 0; i < userFunction.getParamCount(); i++) {
  ------------------
  |  Branch (2279:21): [True: 0, False: 0]
  ------------------
 2280|      0|        TParameter& param = userFunction[i];
 2281|       |
 2282|       |        // GS outputs are via emit, so we do not copy them here.
 2283|      0|        if (param.type->getQualifier().isParamOutput()) {
  ------------------
  |  Branch (2283:13): [True: 0, False: 0]
  ------------------
 2284|      0|            if (param.getDeclaredBuiltIn() == EbvGsOutputStream) {
  ------------------
  |  Branch (2284:17): [True: 0, False: 0]
  ------------------
 2285|       |                // GS output stream does not assign outputs here: it's the Append() method
 2286|       |                // which writes to the output, probably multiple times separated by Emit.
 2287|       |                // We merely remember the output to use, here.
 2288|      0|                gsStreamOutput = *outputIt;
 2289|      0|            } else {
 2290|      0|                intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign,
 2291|      0|                                                                   intermediate.addSymbol(**outputIt),
 2292|      0|                                                                   intermediate.addSymbol(*argVars[i])));
 2293|      0|            }
 2294|       |
 2295|      0|            outputIt++;
 2296|      0|        }
 2297|      0|    }
 2298|       |
 2299|       |    // Put the pieces together to form a full function subtree
 2300|       |    // for the synthesized entry point.
 2301|      0|    synthBody->setOperator(EOpSequence);
 2302|      0|    TIntermNode* synthFunctionDef = synthParams;
 2303|      0|    handleFunctionBody(loc, synthEntryPoint, synthBody, synthFunctionDef);
 2304|       |
 2305|      0|    entryPointFunctionBody = synthBody;
 2306|       |
 2307|      0|    return synthFunctionDef;
 2308|      2|}
_ZN7glslang16HlslParseContext20remapNonEntryPointIOERNS_9TFunctionE:
 2454|      2|{
 2455|       |    // return value
 2456|      2|    if (function.getType().getBasicType() != EbtVoid)
  ------------------
  |  Branch (2456:9): [True: 0, False: 2]
  ------------------
 2457|      0|        clearUniformInputOutput(function.getWritableType().getQualifier());
 2458|       |
 2459|       |    // parameters.
 2460|       |    // References to structuredbuffer types are left unmodified
 2461|      2|    for (int i = 0; i < function.getParamCount(); i++)
  ------------------
  |  Branch (2461:21): [True: 0, False: 2]
  ------------------
 2462|      0|        if (!isReference(*function[i].type))
  ------------------
  |  Branch (2462:13): [True: 0, False: 0]
  ------------------
 2463|      0|            clearUniformInputOutput(function[i].type->getQualifier());
 2464|      2|}
_ZN7glslang16HlslParseContext22handleFunctionArgumentEPNS_9TFunctionERPNS_12TIntermTypedES4_:
 2495|     10|{
 2496|     10|    TParameter param = { nullptr, new TType, nullptr };
 2497|     10|    param.type->shallowCopy(newArg->getType());
 2498|       |
 2499|     10|    function->addParameter(param);
 2500|     10|    if (arguments)
  ------------------
  |  Branch (2500:9): [True: 0, False: 10]
  ------------------
 2501|      0|        arguments = intermediate.growAggregate(arguments, newArg);
 2502|     10|    else
 2503|     10|        arguments = newArg;
 2504|     10|}
_ZN7glslang16HlslParseContext12handleAssignERKNS_10TSourceLocENS_9TOperatorEPNS_12TIntermTypedES6_:
 2862|      1|{
 2863|      1|    if (left == nullptr || right == nullptr)
  ------------------
  |  Branch (2863:9): [True: 0, False: 1]
  |  Branch (2863:28): [True: 0, False: 1]
  ------------------
 2864|      0|        return nullptr;
 2865|       |
 2866|       |    // writing to opaques will require fixing transforms
 2867|      1|    if (left->getType().containsOpaque())
  ------------------
  |  Branch (2867:9): [True: 0, False: 1]
  ------------------
 2868|      0|        intermediate.setNeedsLegalization();
 2869|       |
 2870|      1|    if (left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle)
  ------------------
  |  Branch (2870:9): [True: 1, False: 0]
  |  Branch (2870:34): [True: 0, False: 1]
  ------------------
 2871|      0|        return handleAssignToMatrixSwizzle(loc, op, left, right);
 2872|       |
 2873|       |    // Return true if the given node is an index operation into a split variable.
 2874|      1|    const auto indexesSplit = [this](const TIntermTyped* node) -> bool {
 2875|      1|        const TIntermBinary* binaryNode = node->getAsBinaryNode();
 2876|       |
 2877|      1|        if (binaryNode == nullptr)
 2878|      1|            return false;
 2879|       |
 2880|      1|        return (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect) &&
 2881|      1|               wasSplit(binaryNode->getLeft());
 2882|      1|    };
 2883|       |
 2884|       |    // Return symbol if node is symbol or index ref
 2885|      1|    const auto getSymbol = [](const TIntermTyped* node) -> const TIntermSymbol* {
 2886|      1|        const TIntermSymbol* symbolNode = node->getAsSymbolNode();
 2887|      1|        if (symbolNode != nullptr)
 2888|      1|            return symbolNode;
 2889|       |
 2890|      1|        const TIntermBinary* binaryNode = node->getAsBinaryNode();
 2891|      1|        if (binaryNode != nullptr && (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect))
 2892|      1|            return binaryNode->getLeft()->getAsSymbolNode();
 2893|       |
 2894|      1|        return nullptr;
 2895|      1|    };
 2896|       |
 2897|       |    // Return true if this stage assigns clip position with potentially inverted Y
 2898|      1|    const auto assignsClipPos = [this](const TIntermTyped* node) -> bool {
 2899|      1|        return node->getType().getQualifier().builtIn == EbvPosition &&
 2900|      1|               (language == EShLangVertex || language == EShLangGeometry || language == EShLangTessEvaluation);
 2901|      1|    };
 2902|       |
 2903|      1|    const TIntermSymbol* leftSymbol = getSymbol(left);
 2904|      1|    const TIntermSymbol* rightSymbol = getSymbol(right);
 2905|       |
 2906|      1|    const bool isSplitLeft    = wasSplit(left) || indexesSplit(left);
  ------------------
  |  Branch (2906:33): [True: 0, False: 1]
  |  Branch (2906:51): [True: 0, False: 1]
  ------------------
 2907|      1|    const bool isSplitRight   = wasSplit(right) || indexesSplit(right);
  ------------------
  |  Branch (2907:33): [True: 0, False: 1]
  |  Branch (2907:52): [True: 0, False: 1]
  ------------------
 2908|       |
 2909|      1|    const bool isFlattenLeft  = wasFlattened(leftSymbol);
 2910|      1|    const bool isFlattenRight = wasFlattened(rightSymbol);
 2911|       |
 2912|       |    // OK to do a single assign if neither side is split or flattened.  Otherwise,
 2913|       |    // fall through to a member-wise copy.
 2914|      1|    if (!isFlattenLeft && !isFlattenRight && !isSplitLeft && !isSplitRight) {
  ------------------
  |  Branch (2914:9): [True: 1, False: 0]
  |  Branch (2914:27): [True: 1, False: 0]
  |  Branch (2914:46): [True: 1, False: 0]
  |  Branch (2914:62): [True: 1, False: 0]
  ------------------
 2915|       |        // Clip and cull distance requires more processing.  See comment above assignClipCullDistance.
 2916|      1|        if (isClipOrCullDistance(left->getType()) || isClipOrCullDistance(right->getType())) {
  ------------------
  |  Branch (2916:13): [True: 0, False: 1]
  |  Branch (2916:54): [True: 0, False: 1]
  ------------------
 2917|      0|            const bool isOutput = isClipOrCullDistance(left->getType());
 2918|       |
 2919|      0|            const int semanticId = (isOutput ? left : right)->getType().getQualifier().layoutLocation;
  ------------------
  |  Branch (2919:37): [True: 0, False: 0]
  ------------------
 2920|      0|            return assignClipCullDistance(loc, op, semanticId, left, right);
 2921|      1|        } else if (assignsClipPos(left)) {
  ------------------
  |  Branch (2921:20): [True: 0, False: 1]
  ------------------
 2922|       |            // Position can require special handling: see comment above assignPosition
 2923|      0|            return assignPosition(loc, op, left, right);
 2924|      1|        } else if (left->getQualifier().builtIn == EbvSampleMask) {
  ------------------
  |  Branch (2924:20): [True: 0, False: 1]
  ------------------
 2925|       |            // Certain builtins are required to be arrayed outputs in SPIR-V, but may internally be scalars
 2926|       |            // in the shader.  Copy the scalar RHS into the LHS array element zero, if that happens.
 2927|      0|            if (left->isArray() && !right->isArray()) {
  ------------------
  |  Branch (2927:17): [True: 0, False: 0]
  |  Branch (2927:36): [True: 0, False: 0]
  ------------------
 2928|      0|                const TType derefType(left->getType(), 0);
 2929|      0|                left = intermediate.addIndex(EOpIndexDirect, left, intermediate.addConstantUnion(0, loc), loc);
 2930|      0|                left->setType(derefType);
 2931|       |                // Fall through to add assign.
 2932|      0|            }
 2933|      0|        }
 2934|       |
 2935|      1|        return intermediate.addAssign(op, left, right, loc);
 2936|      1|    }
 2937|       |
 2938|      0|    TIntermAggregate* assignList = nullptr;
 2939|      0|    const TVector<TVariable*>* leftVariables = nullptr;
 2940|      0|    const TVector<TVariable*>* rightVariables = nullptr;
 2941|       |
 2942|       |    // A temporary to store the right node's value, so we don't keep indirecting into it
 2943|       |    // if it's not a simple symbol.
 2944|      0|    TVariable* rhsTempVar = nullptr;
 2945|       |
 2946|       |    // If the RHS is a simple symbol node, we'll copy it for each member.
 2947|      0|    TIntermSymbol* cloneSymNode = nullptr;
 2948|       |
 2949|      0|    int memberCount = 0;
 2950|       |
 2951|       |    // Track how many items there are to copy.
 2952|      0|    if (left->getType().isStruct())
  ------------------
  |  Branch (2952:9): [True: 0, False: 0]
  ------------------
 2953|      0|        memberCount = (int)left->getType().getStruct()->size();
 2954|      0|    if (left->getType().isArray())
  ------------------
  |  Branch (2954:9): [True: 0, False: 0]
  ------------------
 2955|      0|        memberCount = left->getType().getCumulativeArraySize();
 2956|       |
 2957|      0|    if (isFlattenLeft)
  ------------------
  |  Branch (2957:9): [True: 0, False: 0]
  ------------------
 2958|      0|        leftVariables = &flattenMap.find(leftSymbol->getId())->second.members;
 2959|       |
 2960|      0|    if (isFlattenRight) {
  ------------------
  |  Branch (2960:9): [True: 0, False: 0]
  ------------------
 2961|      0|        rightVariables = &flattenMap.find(rightSymbol->getId())->second.members;
 2962|      0|    } else {
 2963|       |        // The RHS is not flattened.  There are several cases:
 2964|       |        // 1. 1 item to copy:  Use the RHS directly.
 2965|       |        // 2. >1 item, simple symbol RHS: we'll create a new TIntermSymbol node for each, but no assign to temp.
 2966|       |        // 3. >1 item, complex RHS: assign it to a new temp variable, and create a TIntermSymbol for each member.
 2967|       |
 2968|      0|        if (memberCount <= 1) {
  ------------------
  |  Branch (2968:13): [True: 0, False: 0]
  ------------------
 2969|       |            // case 1: we'll use the symbol directly below.  Nothing to do.
 2970|      0|        } else {
 2971|      0|            if (right->getAsSymbolNode() != nullptr) {
  ------------------
  |  Branch (2971:17): [True: 0, False: 0]
  ------------------
 2972|       |                // case 2: we'll copy the symbol per iteration below.
 2973|      0|                cloneSymNode = right->getAsSymbolNode();
 2974|      0|            } else {
 2975|       |                // case 3: assign to a temp, and indirect into that.
 2976|      0|                rhsTempVar = makeInternalVariable("flattenTemp", right->getType());
 2977|      0|                rhsTempVar->getWritableType().getQualifier().makeTemporary();
 2978|      0|                TIntermTyped* noFlattenRHS = intermediate.addSymbol(*rhsTempVar, loc);
 2979|       |
 2980|       |                // Add this to the aggregate being built.
 2981|      0|                assignList = intermediate.growAggregate(assignList,
 2982|      0|                                                        intermediate.addAssign(op, noFlattenRHS, right, loc), loc);
 2983|      0|            }
 2984|      0|        }
 2985|      0|    }
 2986|       |
 2987|       |    // When dealing with split arrayed structures of built-ins, the arrayness is moved to the extracted built-in
 2988|       |    // variables, which is awkward when copying between split and unsplit structures.  This variable tracks
 2989|       |    // array indirections so they can be percolated from outer structs to inner variables.
 2990|      0|    std::vector <int> arrayElement;
 2991|       |
 2992|      0|    TStorageQualifier leftStorage = left->getType().getQualifier().storage;
 2993|      0|    TStorageQualifier rightStorage = right->getType().getQualifier().storage;
 2994|       |
 2995|      0|    int leftOffsetStart = findSubtreeOffset(*left);
 2996|      0|    int rightOffsetStart = findSubtreeOffset(*right);
 2997|      0|    int leftOffset = leftOffsetStart;
 2998|      0|    int rightOffset = rightOffsetStart;
 2999|       |
 3000|      0|    const auto getMember = [&](bool isLeft, const TType& type, int member, TIntermTyped* splitNode, int splitMember,
 3001|      0|                               bool flattened)
 3002|      0|                           -> TIntermTyped * {
 3003|      0|        const bool split     = isLeft ? isSplitLeft   : isSplitRight;
 3004|       |
 3005|      0|        TIntermTyped* subTree;
 3006|      0|        const TType derefType(type, member);
 3007|      0|        const TVariable* builtInVar = nullptr;
 3008|      0|        if ((flattened || split) && derefType.isBuiltIn()) {
 3009|      0|            auto splitPair = splitBuiltIns.find(HlslParseContext::tInterstageIoData(
 3010|      0|                                                   derefType.getQualifier().builtIn,
 3011|      0|                                                   isLeft ? leftStorage : rightStorage));
 3012|      0|            if (splitPair != splitBuiltIns.end())
 3013|      0|                builtInVar = splitPair->second;
 3014|      0|        }
 3015|      0|        if (builtInVar != nullptr) {
 3016|       |            // copy from interstage IO built-in if needed
 3017|      0|            subTree = intermediate.addSymbol(*builtInVar);
 3018|       |
 3019|      0|            if (subTree->getType().isArray()) {
 3020|       |                // Arrayness of builtIn symbols isn't handled by the normal recursion:
 3021|       |                // it's been extracted and moved to the built-in.
 3022|      0|                if (!arrayElement.empty()) {
 3023|      0|                    const TType splitDerefType(subTree->getType(), arrayElement.back());
 3024|      0|                    subTree = intermediate.addIndex(EOpIndexDirect, subTree,
 3025|      0|                                                    intermediate.addConstantUnion(arrayElement.back(), loc), loc);
 3026|      0|                    subTree->setType(splitDerefType);
 3027|      0|                } else if (splitNode->getAsOperator() != nullptr && (splitNode->getAsOperator()->getOp() == EOpIndexIndirect)) {
 3028|       |                    // This might also be a stage with arrayed outputs, in which case there's an index
 3029|       |                    // operation we should transfer to the output builtin.
 3030|       |
 3031|      0|                    const TType splitDerefType(subTree->getType(), 0);
 3032|      0|                    subTree = intermediate.addIndex(splitNode->getAsOperator()->getOp(), subTree,
 3033|      0|                                                    splitNode->getAsBinaryNode()->getRight(), loc);
 3034|      0|                    subTree->setType(splitDerefType);
 3035|      0|                }
 3036|      0|            }
 3037|      0|        } else if (flattened && !shouldFlatten(derefType, isLeft ? leftStorage : rightStorage, false)) {
 3038|      0|            if (isLeft) {
 3039|       |                // offset will cycle through variables for arrayed io
 3040|      0|                if (leftOffset >= static_cast<int>(leftVariables->size()))
 3041|      0|                    leftOffset = leftOffsetStart;
 3042|      0|                subTree = intermediate.addSymbol(*(*leftVariables)[leftOffset++]);
 3043|      0|            } else {
 3044|       |                // offset will cycle through variables for arrayed io
 3045|      0|                if (rightOffset >= static_cast<int>(rightVariables->size()))
 3046|      0|                    rightOffset = rightOffsetStart;
 3047|      0|                subTree = intermediate.addSymbol(*(*rightVariables)[rightOffset++]);
 3048|      0|            }
 3049|       |
 3050|       |            // arrayed io
 3051|      0|            if (subTree->getType().isArray()) {
 3052|      0|                if (!arrayElement.empty()) {
 3053|      0|                    const TType derefType(subTree->getType(), arrayElement.front());
 3054|      0|                    subTree = intermediate.addIndex(EOpIndexDirect, subTree,
 3055|      0|                                                    intermediate.addConstantUnion(arrayElement.front(), loc), loc);
 3056|      0|                    subTree->setType(derefType);
 3057|      0|                } else {
 3058|       |                    // There's an index operation we should transfer to the output builtin.
 3059|      0|                    assert(splitNode->getAsOperator() != nullptr &&
 3060|      0|                           splitNode->getAsOperator()->getOp() == EOpIndexIndirect);
 3061|      0|                    const TType splitDerefType(subTree->getType(), 0);
 3062|      0|                    subTree = intermediate.addIndex(splitNode->getAsOperator()->getOp(), subTree,
 3063|      0|                                                    splitNode->getAsBinaryNode()->getRight(), loc);
 3064|      0|                    subTree->setType(splitDerefType);
 3065|      0|                }
 3066|      0|            }
 3067|      0|        } else {
 3068|       |            // Index operator if it's an aggregate, else EOpNull
 3069|      0|            const TOperator accessOp = type.isArray()  ? EOpIndexDirect
 3070|      0|                                     : type.isStruct() ? EOpIndexDirectStruct
 3071|      0|                                     : EOpNull;
 3072|      0|            if (accessOp == EOpNull) {
 3073|      0|                subTree = splitNode;
 3074|      0|            } else {
 3075|      0|                subTree = intermediate.addIndex(accessOp, splitNode, intermediate.addConstantUnion(splitMember, loc),
 3076|      0|                                                loc);
 3077|      0|                const TType splitDerefType(splitNode->getType(), splitMember);
 3078|      0|                subTree->setType(splitDerefType);
 3079|      0|            }
 3080|      0|        }
 3081|       |
 3082|      0|        return subTree;
 3083|      0|    };
 3084|       |
 3085|       |    // Use the proper RHS node: a new symbol from a TVariable, copy
 3086|       |    // of an TIntermSymbol node, or sometimes the right node directly.
 3087|      0|    right = rhsTempVar != nullptr   ? intermediate.addSymbol(*rhsTempVar, loc) :
  ------------------
  |  Branch (3087:13): [True: 0, False: 0]
  ------------------
 3088|      0|            cloneSymNode != nullptr ? intermediate.addSymbol(*cloneSymNode) :
  ------------------
  |  Branch (3088:13): [True: 0, False: 0]
  ------------------
 3089|      0|            right;
 3090|       |
 3091|       |    // Cannot use auto here, because this is recursive, and auto can't work out the type without seeing the
 3092|       |    // whole thing.  So, we'll resort to an explicit type via std::function.
 3093|      0|    const std::function<void(TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight,
 3094|      0|                             bool topLevel)>
 3095|      0|    traverse = [&](TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight,
 3096|      0|                   bool topLevel) -> void {
 3097|       |        // If we get here, we are assigning to or from a whole array or struct that must be
 3098|       |        // flattened, so have to do member-by-member assignment:
 3099|       |
 3100|      0|        bool shouldFlattenSubsetLeft = isFlattenLeft && shouldFlatten(left->getType(), leftStorage, topLevel);
 3101|      0|        bool shouldFlattenSubsetRight = isFlattenRight && shouldFlatten(right->getType(), rightStorage, topLevel);
 3102|       |
 3103|      0|        if ((left->getType().isArray() || right->getType().isArray()) &&
 3104|      0|              (shouldFlattenSubsetLeft  || isSplitLeft ||
 3105|      0|               shouldFlattenSubsetRight || isSplitRight)) {
 3106|      0|            const int elementsL = left->getType().isArray()  ? left->getType().getOuterArraySize()  : 1;
 3107|      0|            const int elementsR = right->getType().isArray() ? right->getType().getOuterArraySize() : 1;
 3108|       |
 3109|       |            // The arrays might not be the same size,
 3110|       |            // e.g., if the size has been forced for EbvTessLevelInner/Outer.
 3111|      0|            const int elementsToCopy = std::min(elementsL, elementsR);
 3112|       |
 3113|       |            // array case
 3114|      0|            for (int element = 0; element < elementsToCopy; ++element) {
 3115|      0|                arrayElement.push_back(element);
 3116|       |
 3117|       |                // Add a new AST symbol node if we have a temp variable holding a complex RHS.
 3118|      0|                TIntermTyped* subLeft  = getMember(true,  left->getType(),  element, left, element,
 3119|      0|                                                   shouldFlattenSubsetLeft);
 3120|      0|                TIntermTyped* subRight = getMember(false, right->getType(), element, right, element,
 3121|      0|                                                   shouldFlattenSubsetRight);
 3122|       |
 3123|      0|                TIntermTyped* subSplitLeft =  isSplitLeft  ? getMember(true,  left->getType(),  element, splitLeft,
 3124|      0|                                                                       element, shouldFlattenSubsetLeft)
 3125|      0|                                                           : subLeft;
 3126|      0|                TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right->getType(), element, splitRight,
 3127|      0|                                                                       element, shouldFlattenSubsetRight)
 3128|      0|                                                           : subRight;
 3129|       |
 3130|      0|                traverse(subLeft, subRight, subSplitLeft, subSplitRight, false);
 3131|       |
 3132|      0|                arrayElement.pop_back();
 3133|      0|            }
 3134|      0|        } else if (left->getType().isStruct() && (shouldFlattenSubsetLeft  || isSplitLeft ||
 3135|      0|                                                  shouldFlattenSubsetRight || isSplitRight)) {
 3136|       |            // struct case
 3137|      0|            const auto& membersL = *left->getType().getStruct();
 3138|      0|            const auto& membersR = *right->getType().getStruct();
 3139|       |
 3140|       |            // These track the members in the split structures corresponding to the same in the unsplit structures,
 3141|       |            // which we traverse in parallel.
 3142|      0|            int memberL = 0;
 3143|      0|            int memberR = 0;
 3144|       |
 3145|       |            // Handle empty structure assignment
 3146|      0|            if (int(membersL.size()) == 0 && int(membersR.size()) == 0)
 3147|      0|                assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, left, right, loc), loc);
 3148|       |
 3149|      0|            for (int member = 0; member < int(membersL.size()); ++member) {
 3150|      0|                const TType& typeL = *membersL[member].type;
 3151|      0|                const TType& typeR = *membersR[member].type;
 3152|       |
 3153|      0|                TIntermTyped* subLeft  = getMember(true,  left->getType(), member, left, member,
 3154|      0|                                                   shouldFlattenSubsetLeft);
 3155|      0|                TIntermTyped* subRight = getMember(false, right->getType(), member, right, member,
 3156|      0|                                                   shouldFlattenSubsetRight);
 3157|       |
 3158|       |                // If there is no splitting, use the same values to avoid inefficiency.
 3159|      0|                TIntermTyped* subSplitLeft =  isSplitLeft  ? getMember(true,  left->getType(),  member, splitLeft,
 3160|      0|                                                                       memberL, shouldFlattenSubsetLeft)
 3161|      0|                                                           : subLeft;
 3162|      0|                TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right->getType(), member, splitRight,
 3163|      0|                                                                       memberR, shouldFlattenSubsetRight)
 3164|      0|                                                           : subRight;
 3165|       |
 3166|      0|                if (isClipOrCullDistance(subSplitLeft->getType()) || isClipOrCullDistance(subSplitRight->getType())) {
 3167|       |                    // Clip and cull distance built-in assignment is complex in its own right, and is handled in
 3168|       |                    // a separate function dedicated to that task.  See comment above assignClipCullDistance;
 3169|       |
 3170|      0|                    const bool isOutput = isClipOrCullDistance(subSplitLeft->getType());
 3171|       |
 3172|       |                    // Since all clip/cull semantics boil down to the same built-in type, we need to get the
 3173|       |                    // semantic ID from the dereferenced type's layout location, to avoid an N-1 mapping.
 3174|      0|                    const TType derefType((isOutput ? left : right)->getType(), member);
 3175|      0|                    const int semanticId = derefType.getQualifier().layoutLocation;
 3176|       |
 3177|      0|                    TIntermAggregate* clipCullAssign = assignClipCullDistance(loc, op, semanticId,
 3178|      0|                                                                              subSplitLeft, subSplitRight);
 3179|       |
 3180|      0|                    assignList = intermediate.growAggregate(assignList, clipCullAssign, loc);
 3181|      0|                } else if (subSplitRight->getType().getQualifier().builtIn == EbvFragCoord) {
 3182|       |                    // FragCoord can require special handling: see comment above assignFromFragCoord
 3183|      0|                    TIntermTyped* fragCoordAssign = assignFromFragCoord(loc, op, subSplitLeft, subSplitRight);
 3184|      0|                    assignList = intermediate.growAggregate(assignList, fragCoordAssign, loc);
 3185|      0|                } else if (assignsClipPos(subSplitLeft)) {
 3186|       |                    // Position can require special handling: see comment above assignPosition
 3187|      0|                    TIntermTyped* positionAssign = assignPosition(loc, op, subSplitLeft, subSplitRight);
 3188|      0|                    assignList = intermediate.growAggregate(assignList, positionAssign, loc);
 3189|      0|                } else if (!shouldFlattenSubsetLeft && !shouldFlattenSubsetRight &&
 3190|      0|                           !typeL.containsBuiltIn() && !typeR.containsBuiltIn()) {
 3191|       |                    // If this is the final flattening (no nested types below to flatten)
 3192|       |                    // we'll copy the member, else recurse into the type hierarchy.
 3193|       |                    // However, if splitting the struct, that means we can copy a whole
 3194|       |                    // subtree here IFF it does not itself contain any interstage built-in
 3195|       |                    // IO variables, so we only have to recurse into it if there's something
 3196|       |                    // for splitting to do.  That can save a lot of AST verbosity for
 3197|       |                    // a bunch of memberwise copies.
 3198|       |
 3199|      0|                    assignList = intermediate.growAggregate(assignList,
 3200|      0|                                                            intermediate.addAssign(op, subSplitLeft, subSplitRight, loc),
 3201|      0|                                                            loc);
 3202|      0|                } else {
 3203|      0|                    traverse(subLeft, subRight, subSplitLeft, subSplitRight, false);
 3204|      0|                }
 3205|       |
 3206|      0|                memberL += (typeL.isBuiltIn() ? 0 : 1);
 3207|      0|                memberR += (typeR.isBuiltIn() ? 0 : 1);
 3208|      0|            }
 3209|      0|        } else {
 3210|       |            // Member copy
 3211|      0|            assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, left, right, loc), loc);
 3212|      0|        }
 3213|       |
 3214|      0|    };
 3215|       |
 3216|      0|    TIntermTyped* splitLeft  = left;
 3217|      0|    TIntermTyped* splitRight = right;
 3218|       |
 3219|       |    // If either left or right was a split structure, we must read or write it, but still have to
 3220|       |    // parallel-recurse through the unsplit structure to identify the built-in IO vars.
 3221|       |    // The left can be either a symbol, or an index into a symbol (e.g, array reference)
 3222|      0|    if (isSplitLeft) {
  ------------------
  |  Branch (3222:9): [True: 0, False: 0]
  ------------------
 3223|      0|        if (indexesSplit(left)) {
  ------------------
  |  Branch (3223:13): [True: 0, False: 0]
  ------------------
 3224|       |            // Index case: Refer to the indexed symbol, if the left is an index operator.
 3225|      0|            const TIntermSymbol* symNode = left->getAsBinaryNode()->getLeft()->getAsSymbolNode();
 3226|       |
 3227|      0|            TIntermTyped* splitLeftNonIo = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
 3228|       |
 3229|      0|            splitLeft = intermediate.addIndex(left->getAsBinaryNode()->getOp(), splitLeftNonIo,
 3230|      0|                                              left->getAsBinaryNode()->getRight(), loc);
 3231|       |
 3232|      0|            const TType derefType(splitLeftNonIo->getType(), 0);
 3233|      0|            splitLeft->setType(derefType);
 3234|      0|        } else {
 3235|       |            // Symbol case: otherwise, if not indexed, we have the symbol directly.
 3236|      0|            const TIntermSymbol* symNode = left->getAsSymbolNode();
 3237|      0|            splitLeft = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
 3238|      0|        }
 3239|      0|    }
 3240|       |
 3241|      0|    if (isSplitRight)
  ------------------
  |  Branch (3241:9): [True: 0, False: 0]
  ------------------
 3242|      0|        splitRight = intermediate.addSymbol(*getSplitNonIoVar(right->getAsSymbolNode()->getId()), loc);
 3243|       |
 3244|       |    // This makes the whole assignment, recursing through subtypes as needed.
 3245|      0|    traverse(left, right, splitLeft, splitRight, true);
 3246|       |
 3247|      0|    assert(assignList != nullptr);
 3248|      0|    assignList->setOperator(EOpSequence);
 3249|       |
 3250|      0|    return assignList;
 3251|      1|}
_ZN7glslang16HlslParseContext18handleFunctionCallERKNS_10TSourceLocEPNS_9TFunctionEPNS_12TIntermTypedE:
 5521|      5|{
 5522|      5|    TIntermTyped* result = nullptr;
 5523|       |
 5524|      5|    TOperator op = function->getBuiltInOp();
 5525|      5|    if (op != EOpNull) {
  ------------------
  |  Branch (5525:9): [True: 5, False: 0]
  ------------------
 5526|       |        //
 5527|       |        // Then this should be a constructor.
 5528|       |        // Don't go through the symbol table for constructors.
 5529|       |        // Their parameters will be verified algorithmically.
 5530|       |        //
 5531|      5|        TType type(EbtVoid);  // use this to get the type back
 5532|      5|        if (! constructorError(loc, arguments, *function, op, type)) {
  ------------------
  |  Branch (5532:13): [True: 5, False: 0]
  ------------------
 5533|       |            //
 5534|       |            // It's a constructor, of type 'type'.
 5535|       |            //
 5536|      5|            result = handleConstructor(loc, arguments, type);
 5537|      5|            if (result == nullptr) {
  ------------------
  |  Branch (5537:17): [True: 0, False: 5]
  ------------------
 5538|      0|                error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), "");
 5539|      0|                return nullptr;
 5540|      0|            }
 5541|      5|        }
 5542|      5|    } else {
 5543|       |        //
 5544|       |        // Find it in the symbol table.
 5545|       |        //
 5546|      0|        const TFunction* fnCandidate = nullptr;
 5547|      0|        bool builtIn = false;
 5548|      0|        int thisDepth = 0;
 5549|       |
 5550|       |        // For mat mul, the situation is unusual: we have to compare vector sizes to mat row or col sizes,
 5551|       |        // and clamp the opposite arg.  Since that's complex, we farm it off to a separate method.
 5552|       |        // It doesn't naturally fall out of processing an argument at a time in isolation.
 5553|      0|        if (function->getName() == "mul")
  ------------------
  |  Branch (5553:13): [True: 0, False: 0]
  ------------------
 5554|      0|            addGenMulArgumentConversion(loc, *function, arguments);
 5555|       |
 5556|      0|        TIntermAggregate* aggregate = arguments ? arguments->getAsAggregate() : nullptr;
  ------------------
  |  Branch (5556:39): [True: 0, False: 0]
  ------------------
 5557|       |
 5558|       |        // TODO: this needs improvement: there's no way at present to look up a signature in
 5559|       |        // the symbol table for an arbitrary type.  This is a temporary hack until that ability exists.
 5560|       |        // It will have false positives, since it doesn't check arg counts or types.
 5561|      0|        if (arguments) {
  ------------------
  |  Branch (5561:13): [True: 0, False: 0]
  ------------------
 5562|       |            // Check if first argument is struct buffer type.  It may be an aggregate or a symbol, so we
 5563|       |            // look for either case.
 5564|       |
 5565|      0|            TIntermTyped* arg0 = nullptr;
 5566|       |
 5567|      0|            if (aggregate && aggregate->getSequence().size() > 0 && aggregate->getSequence()[0])
  ------------------
  |  Branch (5567:17): [True: 0, False: 0]
  |  Branch (5567:30): [True: 0, False: 0]
  |  Branch (5567:69): [True: 0, False: 0]
  ------------------
 5568|      0|                arg0 = aggregate->getSequence()[0]->getAsTyped();
 5569|      0|            else if (arguments->getAsSymbolNode())
  ------------------
  |  Branch (5569:22): [True: 0, False: 0]
  ------------------
 5570|      0|                arg0 = arguments->getAsSymbolNode();
 5571|       |
 5572|      0|            if (arg0 != nullptr && isStructBufferType(arg0->getType())) {
  ------------------
  |  Branch (5572:17): [True: 0, False: 0]
  |  Branch (5572:36): [True: 0, False: 0]
  ------------------
 5573|      0|                static const int methodPrefixSize = sizeof(BUILTIN_PREFIX)-1;
  ------------------
  |  |  513|      0|#define BUILTIN_PREFIX "__BI_"
  ------------------
 5574|       |
 5575|      0|                if (function->getName().length() > methodPrefixSize &&
  ------------------
  |  Branch (5575:21): [True: 0, False: 0]
  |  Branch (5575:21): [True: 0, False: 0]
  ------------------
 5576|      0|                    isStructBufferMethod(function->getName().substr(methodPrefixSize))) {
  ------------------
  |  Branch (5576:21): [True: 0, False: 0]
  ------------------
 5577|      0|                    const TString mangle = function->getName() + "(";
 5578|      0|                    TSymbol* symbol = symbolTable.find(mangle, &builtIn);
 5579|       |
 5580|      0|                    if (symbol)
  ------------------
  |  Branch (5580:25): [True: 0, False: 0]
  ------------------
 5581|      0|                        fnCandidate = symbol->getAsFunction();
 5582|      0|                }
 5583|      0|            }
 5584|      0|        }
 5585|       |
 5586|      0|        if (fnCandidate == nullptr)
  ------------------
  |  Branch (5586:13): [True: 0, False: 0]
  ------------------
 5587|      0|            fnCandidate = findFunction(loc, *function, builtIn, thisDepth, arguments);
 5588|       |
 5589|      0|        if (fnCandidate) {
  ------------------
  |  Branch (5589:13): [True: 0, False: 0]
  ------------------
 5590|       |            // This is a declared function that might map to
 5591|       |            //  - a built-in operator,
 5592|       |            //  - a built-in function not mapped to an operator, or
 5593|       |            //  - a user function.
 5594|       |
 5595|       |            // turn an implicit member-function resolution into an explicit call
 5596|      0|            TString callerName;
 5597|      0|            if (thisDepth == 0)
  ------------------
  |  Branch (5597:17): [True: 0, False: 0]
  ------------------
 5598|      0|                callerName = fnCandidate->getMangledName();
 5599|      0|            else {
 5600|       |                // get the explicit (full) name of the function
 5601|      0|                assert(currentTypePrefix.size() >= size_t(thisDepth));
 5602|      0|                callerName = currentTypePrefix[currentTypePrefix.size() - thisDepth];
 5603|      0|                callerName += fnCandidate->getMangledName();
 5604|       |                // insert the implicit calling argument
 5605|      0|                pushFrontArguments(intermediate.addSymbol(*getImplicitThis(thisDepth)), arguments);
 5606|      0|            }
 5607|       |
 5608|       |            // Convert 'in' arguments, so that types match.
 5609|       |            // However, skip those that need expansion, that is covered next.
 5610|      0|            if (arguments)
  ------------------
  |  Branch (5610:17): [True: 0, False: 0]
  ------------------
 5611|      0|                addInputArgumentConversions(*fnCandidate, arguments);
 5612|       |
 5613|       |            // Expand arguments.  Some arguments must physically expand to a different set
 5614|       |            // than what the shader declared and passes.
 5615|      0|            if (arguments && !builtIn)
  ------------------
  |  Branch (5615:17): [True: 0, False: 0]
  |  Branch (5615:30): [True: 0, False: 0]
  ------------------
 5616|      0|                expandArguments(loc, *fnCandidate, arguments);
 5617|       |
 5618|       |            // Expansion may have changed the form of arguments
 5619|      0|            aggregate = arguments ? arguments->getAsAggregate() : nullptr;
  ------------------
  |  Branch (5619:25): [True: 0, False: 0]
  ------------------
 5620|       |
 5621|      0|            op = fnCandidate->getBuiltInOp();
 5622|      0|            if (builtIn && op != EOpNull) {
  ------------------
  |  Branch (5622:17): [True: 0, False: 0]
  |  Branch (5622:28): [True: 0, False: 0]
  ------------------
 5623|       |                // SM 4.0 and above guarantees roundEven semantics for round()
 5624|      0|                if (!hlslDX9Compatible() && op == EOpRound)
  ------------------
  |  Branch (5624:21): [True: 0, False: 0]
  |  Branch (5624:45): [True: 0, False: 0]
  ------------------
 5625|      0|                    op = EOpRoundEven;
 5626|       |
 5627|       |                // A function call mapped to a built-in operation.
 5628|      0|                result = intermediate.addBuiltInFunctionCall(loc, op, fnCandidate->getParamCount() == 1, arguments,
 5629|      0|                                                             fnCandidate->getType());
 5630|      0|                if (result == nullptr)  {
  ------------------
  |  Branch (5630:21): [True: 0, False: 0]
  ------------------
 5631|      0|                    error(arguments->getLoc(), " wrong operand type", "Internal Error",
 5632|      0|                        "built in unary operator function.  Type: %s",
 5633|      0|                        static_cast<TIntermTyped*>(arguments)->getCompleteString().c_str());
 5634|      0|                } else if (result->getAsOperator()) {
  ------------------
  |  Branch (5634:28): [True: 0, False: 0]
  ------------------
 5635|      0|                    builtInOpCheck(loc, *fnCandidate, *result->getAsOperator());
 5636|      0|                }
 5637|      0|            } else {
 5638|       |                // This is a function call not mapped to built-in operator.
 5639|       |                // It could still be a built-in function, but only if PureOperatorBuiltins == false.
 5640|      0|                result = intermediate.setAggregateOperator(arguments, EOpFunctionCall, fnCandidate->getType(), loc);
 5641|      0|                TIntermAggregate* call = result->getAsAggregate();
 5642|      0|                call->setName(callerName);
 5643|       |
 5644|       |                // this is how we know whether the given function is a built-in function or a user-defined function
 5645|       |                // if builtIn == false, it's a userDefined -> could be an overloaded built-in function also
 5646|       |                // if builtIn == true, it's definitely a built-in function with EOpNull
 5647|      0|                if (! builtIn) {
  ------------------
  |  Branch (5647:21): [True: 0, False: 0]
  ------------------
 5648|      0|                    call->setUserDefined();
 5649|      0|                    intermediate.addToCallGraph(infoSink, currentCaller, callerName);
 5650|      0|                }
 5651|      0|            }
 5652|       |
 5653|       |            // for decompositions, since we want to operate on the function node, not the aggregate holding
 5654|       |            // output conversions.
 5655|      0|            const TIntermTyped* fnNode = result;
 5656|       |
 5657|      0|            decomposeStructBufferMethods(loc, result, arguments); // HLSL->AST struct buffer method decompositions
 5658|      0|            decomposeIntrinsic(loc, result, arguments);           // HLSL->AST intrinsic decompositions
 5659|      0|            decomposeSampleMethods(loc, result, arguments);       // HLSL->AST sample method decompositions
 5660|      0|            decomposeGeometryMethods(loc, result, arguments);     // HLSL->AST geometry method decompositions
 5661|       |
 5662|       |            // Create the qualifier list, carried in the AST for the call.
 5663|       |            // Because some arguments expand to multiple arguments, the qualifier list will
 5664|       |            // be longer than the formal parameter list.
 5665|      0|            if (result == fnNode && result->getAsAggregate()) {
  ------------------
  |  Branch (5665:17): [True: 0, False: 0]
  |  Branch (5665:37): [True: 0, False: 0]
  ------------------
 5666|      0|                TQualifierList& qualifierList = result->getAsAggregate()->getQualifierList();
 5667|      0|                for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
  ------------------
  |  Branch (5667:33): [True: 0, False: 0]
  ------------------
 5668|      0|                    TStorageQualifier qual = (*fnCandidate)[i].type->getQualifier().storage;
 5669|      0|                    if (hasStructBuffCounter(*(*fnCandidate)[i].type)) {
  ------------------
  |  Branch (5669:25): [True: 0, False: 0]
  ------------------
 5670|       |                        // add buffer and counter buffer argument qualifier
 5671|      0|                        qualifierList.push_back(qual);
 5672|      0|                        qualifierList.push_back(qual);
 5673|      0|                    } else if (shouldFlatten(*(*fnCandidate)[i].type, (*fnCandidate)[i].type->getQualifier().storage,
  ------------------
  |  Branch (5673:32): [True: 0, False: 0]
  ------------------
 5674|      0|                                             true)) {
 5675|       |                        // add structure member expansion
 5676|      0|                        for (int memb = 0; memb < (int)(*fnCandidate)[i].type->getStruct()->size(); ++memb)
  ------------------
  |  Branch (5676:44): [True: 0, False: 0]
  ------------------
 5677|      0|                            qualifierList.push_back(qual);
 5678|      0|                    } else {
 5679|       |                        // Normal 1:1 case
 5680|      0|                        qualifierList.push_back(qual);
 5681|      0|                    }
 5682|      0|                }
 5683|      0|            }
 5684|       |
 5685|       |            // Convert 'out' arguments.  If it was a constant folded built-in, it won't be an aggregate anymore.
 5686|       |            // Built-ins with a single argument aren't called with an aggregate, but they also don't have an output.
 5687|       |            // Also, build the qualifier list for user function calls, which are always called with an aggregate.
 5688|       |            // We don't do this is if there has been a decomposition, which will have added its own conversions
 5689|       |            // for output parameters.
 5690|      0|            if (result == fnNode && result->getAsAggregate())
  ------------------
  |  Branch (5690:17): [True: 0, False: 0]
  |  Branch (5690:37): [True: 0, False: 0]
  ------------------
 5691|      0|                result = addOutputArgumentConversions(*fnCandidate, *result->getAsOperator());
 5692|      0|        }
 5693|      0|    }
 5694|       |
 5695|       |    // generic error recovery
 5696|       |    // TODO: simplification: localize all the error recoveries that look like this, and taking type into account to
 5697|       |    //       reduce cascades
 5698|      5|    if (result == nullptr)
  ------------------
  |  Branch (5698:9): [True: 0, False: 5]
  ------------------
 5699|      0|        result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
 5700|       |
 5701|      5|    return result;
 5702|      5|}
_ZN7glslang16HlslParseContext19makeConstructorCallERKNS_10TSourceLocERKNS_5TTypeE:
 6240|    334|{
 6241|    334|    TOperator op = intermediate.mapTypeToConstructorOp(type);
 6242|       |
 6243|    334|    if (op == EOpNull) {
  ------------------
  |  Branch (6243:9): [True: 0, False: 334]
  ------------------
 6244|      0|        error(loc, "cannot construct this type", type.getBasicString(), "");
 6245|      0|        return nullptr;
 6246|      0|    }
 6247|       |
 6248|    334|    TString empty("");
 6249|       |
 6250|    334|    return new TFunction(&empty, type, op);
 6251|    334|}
_ZN7glslang16HlslParseContext28convertConditionalExpressionERKNS_10TSourceLocEPNS_12TIntermTypedEb:
 6477|     12|{
 6478|     12|    if (mustBeScalar && !condition->getType().isScalarOrVec1()) {
  ------------------
  |  Branch (6478:9): [True: 0, False: 12]
  |  Branch (6478:25): [True: 0, False: 0]
  ------------------
 6479|      0|        error(loc, "requires a scalar", "conditional expression", "");
 6480|      0|        return nullptr;
 6481|      0|    }
 6482|       |
 6483|     12|    return intermediate.addConversion(EOpConstructBool, TType(EbtBool, EvqTemporary, condition->getVectorSize()),
 6484|     12|                                      condition);
 6485|     12|}
_ZN7glslang16HlslParseContext13variableCheckERPNS_12TIntermTypedE:
 6523|      4|{
 6524|      4|    TIntermSymbol* symbol = nodePtr->getAsSymbolNode();
 6525|      4|    if (! symbol)
  ------------------
  |  Branch (6525:9): [True: 3, False: 1]
  ------------------
 6526|      3|        return;
 6527|       |
 6528|      1|    if (symbol->getType().getBasicType() == EbtVoid) {
  ------------------
  |  Branch (6528:9): [True: 1, False: 0]
  ------------------
 6529|      1|        error(symbol->getLoc(), "undeclared identifier", symbol->getName().c_str(), "");
 6530|       |
 6531|       |        // Add to symbol table to prevent future error messages on the same name
 6532|      1|        if (symbol->getName().size() > 0) {
  ------------------
  |  Branch (6532:13): [True: 1, False: 0]
  ------------------
 6533|      1|            TVariable* fakeVariable = new TVariable(&symbol->getName(), TType(EbtFloat));
 6534|      1|            symbolTable.insert(*fakeVariable);
 6535|       |
 6536|       |            // substitute a symbol node for this new variable
 6537|      1|            nodePtr = intermediate.addSymbol(*fakeVariable, symbol->getLoc());
 6538|      1|        }
 6539|      1|    }
 6540|      1|}
_ZN7glslang16HlslParseContext16constructorErrorERKNS_10TSourceLocEP11TIntermNodeRNS_9TFunctionENS_9TOperatorERNS_5TTypeE:
 6588|      5|{
 6589|      5|    type.shallowCopy(function.getType());
 6590|       |
 6591|      5|    bool constructingMatrix = false;
 6592|      5|    switch (op) {
 6593|      0|    case EOpConstructTextureSampler:
  ------------------
  |  Branch (6593:5): [True: 0, False: 5]
  ------------------
 6594|      0|        error(loc, "unhandled texture constructor", "constructor", "");
 6595|      0|        return true;
 6596|      0|    case EOpConstructMat2x2:
  ------------------
  |  Branch (6596:5): [True: 0, False: 5]
  ------------------
 6597|      0|    case EOpConstructMat2x3:
  ------------------
  |  Branch (6597:5): [True: 0, False: 5]
  ------------------
 6598|      0|    case EOpConstructMat2x4:
  ------------------
  |  Branch (6598:5): [True: 0, False: 5]
  ------------------
 6599|      0|    case EOpConstructMat3x2:
  ------------------
  |  Branch (6599:5): [True: 0, False: 5]
  ------------------
 6600|      0|    case EOpConstructMat3x3:
  ------------------
  |  Branch (6600:5): [True: 0, False: 5]
  ------------------
 6601|      0|    case EOpConstructMat3x4:
  ------------------
  |  Branch (6601:5): [True: 0, False: 5]
  ------------------
 6602|      0|    case EOpConstructMat4x2:
  ------------------
  |  Branch (6602:5): [True: 0, False: 5]
  ------------------
 6603|      0|    case EOpConstructMat4x3:
  ------------------
  |  Branch (6603:5): [True: 0, False: 5]
  ------------------
 6604|      0|    case EOpConstructMat4x4:
  ------------------
  |  Branch (6604:5): [True: 0, False: 5]
  ------------------
 6605|      0|    case EOpConstructDMat2x2:
  ------------------
  |  Branch (6605:5): [True: 0, False: 5]
  ------------------
 6606|      0|    case EOpConstructDMat2x3:
  ------------------
  |  Branch (6606:5): [True: 0, False: 5]
  ------------------
 6607|      0|    case EOpConstructDMat2x4:
  ------------------
  |  Branch (6607:5): [True: 0, False: 5]
  ------------------
 6608|      0|    case EOpConstructDMat3x2:
  ------------------
  |  Branch (6608:5): [True: 0, False: 5]
  ------------------
 6609|      0|    case EOpConstructDMat3x3:
  ------------------
  |  Branch (6609:5): [True: 0, False: 5]
  ------------------
 6610|      0|    case EOpConstructDMat3x4:
  ------------------
  |  Branch (6610:5): [True: 0, False: 5]
  ------------------
 6611|      0|    case EOpConstructDMat4x2:
  ------------------
  |  Branch (6611:5): [True: 0, False: 5]
  ------------------
 6612|      0|    case EOpConstructDMat4x3:
  ------------------
  |  Branch (6612:5): [True: 0, False: 5]
  ------------------
 6613|      0|    case EOpConstructDMat4x4:
  ------------------
  |  Branch (6613:5): [True: 0, False: 5]
  ------------------
 6614|      0|    case EOpConstructIMat2x2:
  ------------------
  |  Branch (6614:5): [True: 0, False: 5]
  ------------------
 6615|      0|    case EOpConstructIMat2x3:
  ------------------
  |  Branch (6615:5): [True: 0, False: 5]
  ------------------
 6616|      0|    case EOpConstructIMat2x4:
  ------------------
  |  Branch (6616:5): [True: 0, False: 5]
  ------------------
 6617|      0|    case EOpConstructIMat3x2:
  ------------------
  |  Branch (6617:5): [True: 0, False: 5]
  ------------------
 6618|      0|    case EOpConstructIMat3x3:
  ------------------
  |  Branch (6618:5): [True: 0, False: 5]
  ------------------
 6619|      0|    case EOpConstructIMat3x4:
  ------------------
  |  Branch (6619:5): [True: 0, False: 5]
  ------------------
 6620|      0|    case EOpConstructIMat4x2:
  ------------------
  |  Branch (6620:5): [True: 0, False: 5]
  ------------------
 6621|      0|    case EOpConstructIMat4x3:
  ------------------
  |  Branch (6621:5): [True: 0, False: 5]
  ------------------
 6622|      0|    case EOpConstructIMat4x4:
  ------------------
  |  Branch (6622:5): [True: 0, False: 5]
  ------------------
 6623|      0|    case EOpConstructUMat2x2:
  ------------------
  |  Branch (6623:5): [True: 0, False: 5]
  ------------------
 6624|      0|    case EOpConstructUMat2x3:
  ------------------
  |  Branch (6624:5): [True: 0, False: 5]
  ------------------
 6625|      0|    case EOpConstructUMat2x4:
  ------------------
  |  Branch (6625:5): [True: 0, False: 5]
  ------------------
 6626|      0|    case EOpConstructUMat3x2:
  ------------------
  |  Branch (6626:5): [True: 0, False: 5]
  ------------------
 6627|      0|    case EOpConstructUMat3x3:
  ------------------
  |  Branch (6627:5): [True: 0, False: 5]
  ------------------
 6628|      0|    case EOpConstructUMat3x4:
  ------------------
  |  Branch (6628:5): [True: 0, False: 5]
  ------------------
 6629|      0|    case EOpConstructUMat4x2:
  ------------------
  |  Branch (6629:5): [True: 0, False: 5]
  ------------------
 6630|      0|    case EOpConstructUMat4x3:
  ------------------
  |  Branch (6630:5): [True: 0, False: 5]
  ------------------
 6631|      0|    case EOpConstructUMat4x4:
  ------------------
  |  Branch (6631:5): [True: 0, False: 5]
  ------------------
 6632|      0|    case EOpConstructBMat2x2:
  ------------------
  |  Branch (6632:5): [True: 0, False: 5]
  ------------------
 6633|      0|    case EOpConstructBMat2x3:
  ------------------
  |  Branch (6633:5): [True: 0, False: 5]
  ------------------
 6634|      0|    case EOpConstructBMat2x4:
  ------------------
  |  Branch (6634:5): [True: 0, False: 5]
  ------------------
 6635|      0|    case EOpConstructBMat3x2:
  ------------------
  |  Branch (6635:5): [True: 0, False: 5]
  ------------------
 6636|      0|    case EOpConstructBMat3x3:
  ------------------
  |  Branch (6636:5): [True: 0, False: 5]
  ------------------
 6637|      0|    case EOpConstructBMat3x4:
  ------------------
  |  Branch (6637:5): [True: 0, False: 5]
  ------------------
 6638|      0|    case EOpConstructBMat4x2:
  ------------------
  |  Branch (6638:5): [True: 0, False: 5]
  ------------------
 6639|      0|    case EOpConstructBMat4x3:
  ------------------
  |  Branch (6639:5): [True: 0, False: 5]
  ------------------
 6640|      0|    case EOpConstructBMat4x4:
  ------------------
  |  Branch (6640:5): [True: 0, False: 5]
  ------------------
 6641|      0|        constructingMatrix = true;
 6642|      0|        break;
 6643|      5|    default:
  ------------------
  |  Branch (6643:5): [True: 5, False: 0]
  ------------------
 6644|      5|        break;
 6645|      5|    }
 6646|       |
 6647|       |    //
 6648|       |    // Walk the arguments for first-pass checks and collection of information.
 6649|       |    //
 6650|       |
 6651|      5|    int size = 0;
 6652|      5|    bool constType = true;
 6653|      5|    bool full = false;
 6654|      5|    bool overFull = false;
 6655|      5|    bool matrixInMatrix = false;
 6656|      5|    bool arrayArg = false;
 6657|     10|    for (int arg = 0; arg < function.getParamCount(); ++arg) {
  ------------------
  |  Branch (6657:23): [True: 5, False: 5]
  ------------------
 6658|      5|        if (function[arg].type->isArray()) {
  ------------------
  |  Branch (6658:13): [True: 0, False: 5]
  ------------------
 6659|      0|            if (function[arg].type->isUnsizedArray()) {
  ------------------
  |  Branch (6659:17): [True: 0, False: 0]
  ------------------
 6660|       |                // Can't construct from an unsized array.
 6661|      0|                error(loc, "array argument must be sized", "constructor", "");
 6662|      0|                return true;
 6663|      0|            }
 6664|      0|            arrayArg = true;
 6665|      0|        }
 6666|      5|        if (constructingMatrix && function[arg].type->isMatrix())
  ------------------
  |  Branch (6666:13): [True: 0, False: 5]
  |  Branch (6666:35): [True: 0, False: 0]
  ------------------
 6667|      0|            matrixInMatrix = true;
 6668|       |
 6669|       |        // 'full' will go to true when enough args have been seen.  If we loop
 6670|       |        // again, there is an extra argument.
 6671|      5|        if (full) {
  ------------------
  |  Branch (6671:13): [True: 0, False: 5]
  ------------------
 6672|       |            // For vectors and matrices, it's okay to have too many components
 6673|       |            // available, but not okay to have unused arguments.
 6674|      0|            overFull = true;
 6675|      0|        }
 6676|       |
 6677|      5|        size += function[arg].type->computeNumComponents();
 6678|      5|        if (op != EOpConstructStruct && ! type.isArray() && size >= type.computeNumComponents())
  ------------------
  |  Branch (6678:13): [True: 5, False: 0]
  |  Branch (6678:41): [True: 5, False: 0]
  |  Branch (6678:61): [True: 5, False: 0]
  ------------------
 6679|      5|            full = true;
 6680|       |
 6681|      5|        if (function[arg].type->getQualifier().storage != EvqConst)
  ------------------
  |  Branch (6681:13): [True: 5, False: 0]
  ------------------
 6682|      5|            constType = false;
 6683|      5|    }
 6684|       |
 6685|      5|    if (constType)
  ------------------
  |  Branch (6685:9): [True: 0, False: 5]
  ------------------
 6686|      0|        type.getQualifier().storage = EvqConst;
 6687|       |
 6688|      5|    if (type.isArray()) {
  ------------------
  |  Branch (6688:9): [True: 0, False: 5]
  ------------------
 6689|      0|        if (function.getParamCount() == 0) {
  ------------------
  |  Branch (6689:13): [True: 0, False: 0]
  ------------------
 6690|      0|            error(loc, "array constructor must have at least one argument", "constructor", "");
 6691|      0|            return true;
 6692|      0|        }
 6693|       |
 6694|      0|        if (type.isUnsizedArray()) {
  ------------------
  |  Branch (6694:13): [True: 0, False: 0]
  ------------------
 6695|       |            // auto adapt the constructor type to the number of arguments
 6696|      0|            type.changeOuterArraySize(function.getParamCount());
 6697|      0|        } else if (type.getOuterArraySize() != function.getParamCount() && type.computeNumComponents() > size) {
  ------------------
  |  Branch (6697:20): [True: 0, False: 0]
  |  Branch (6697:76): [True: 0, False: 0]
  ------------------
 6698|      0|            error(loc, "array constructor needs one argument per array element", "constructor", "");
 6699|      0|            return true;
 6700|      0|        }
 6701|       |
 6702|      0|        if (type.isArrayOfArrays()) {
  ------------------
  |  Branch (6702:13): [True: 0, False: 0]
  ------------------
 6703|       |            // Types have to match, but we're still making the type.
 6704|       |            // Finish making the type, and the comparison is done later
 6705|       |            // when checking for conversion.
 6706|      0|            TArraySizes& arraySizes = *type.getArraySizes();
 6707|       |
 6708|       |            // At least the dimensionalities have to match.
 6709|      0|            if (! function[0].type->isArray() ||
  ------------------
  |  Branch (6709:17): [True: 0, False: 0]
  ------------------
 6710|      0|                arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) {
  ------------------
  |  Branch (6710:17): [True: 0, False: 0]
  ------------------
 6711|      0|                error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
 6712|      0|                return true;
 6713|      0|            }
 6714|       |
 6715|      0|            if (arraySizes.isInnerUnsized()) {
  ------------------
  |  Branch (6715:17): [True: 0, False: 0]
  ------------------
 6716|       |                // "Arrays of arrays ..., and the size for any dimension is optional"
 6717|       |                // That means we need to adopt (from the first argument) the other array sizes into the type.
 6718|      0|                for (int d = 1; d < arraySizes.getNumDims(); ++d) {
  ------------------
  |  Branch (6718:33): [True: 0, False: 0]
  ------------------
 6719|      0|                    if (arraySizes.getDimSize(d) == UnsizedArraySize) {
  ------------------
  |  Branch (6719:25): [True: 0, False: 0]
  ------------------
 6720|      0|                        arraySizes.setDimSize(d, function[0].type->getArraySizes()->getDimSize(d - 1));
 6721|      0|                    }
 6722|      0|                }
 6723|      0|            }
 6724|      0|        }
 6725|      0|    }
 6726|       |
 6727|       |    // Some array -> array type casts are okay
 6728|      5|    if (arrayArg && function.getParamCount() == 1 && op != EOpConstructStruct && type.isArray() &&
  ------------------
  |  Branch (6728:9): [True: 0, False: 5]
  |  Branch (6728:21): [True: 0, False: 0]
  |  Branch (6728:54): [True: 0, False: 0]
  |  Branch (6728:82): [True: 0, False: 0]
  ------------------
 6729|      0|        !type.isArrayOfArrays() && !function[0].type->isArrayOfArrays() &&
  ------------------
  |  Branch (6729:9): [True: 0, False: 0]
  |  Branch (6729:36): [True: 0, False: 0]
  ------------------
 6730|      0|        type.getVectorSize() >= 1 && function[0].type->getVectorSize() >= 1)
  ------------------
  |  Branch (6730:9): [True: 0, False: 0]
  |  Branch (6730:38): [True: 0, False: 0]
  ------------------
 6731|      0|        return false;
 6732|       |
 6733|      5|    if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) {
  ------------------
  |  Branch (6733:9): [True: 0, False: 5]
  |  Branch (6733:21): [True: 0, False: 0]
  |  Branch (6733:49): [True: 0, False: 0]
  ------------------
 6734|      0|        error(loc, "constructing non-array constituent from array argument", "constructor", "");
 6735|      0|        return true;
 6736|      0|    }
 6737|       |
 6738|      5|    if (matrixInMatrix && ! type.isArray()) {
  ------------------
  |  Branch (6738:9): [True: 0, False: 5]
  |  Branch (6738:27): [True: 0, False: 0]
  ------------------
 6739|      0|        return false;
 6740|      0|    }
 6741|       |
 6742|      5|    if (overFull) {
  ------------------
  |  Branch (6742:9): [True: 0, False: 5]
  ------------------
 6743|      0|        error(loc, "too many arguments", "constructor", "");
 6744|      0|        return true;
 6745|      0|    }
 6746|       |
 6747|      5|    if (op == EOpConstructStruct && ! type.isArray()) {
  ------------------
  |  Branch (6747:9): [True: 0, False: 5]
  |  Branch (6747:37): [True: 0, False: 0]
  ------------------
 6748|      0|        if (isScalarConstructor(node))
  ------------------
  |  Branch (6748:13): [True: 0, False: 0]
  ------------------
 6749|      0|            return false;
 6750|       |
 6751|       |        // Self-type construction: e.g, we can construct a struct from a single identically typed object.
 6752|      0|        if (function.getParamCount() == 1 && type == *function[0].type)
  ------------------
  |  Branch (6752:13): [True: 0, False: 0]
  |  Branch (6752:46): [True: 0, False: 0]
  ------------------
 6753|      0|            return false;
 6754|       |
 6755|      0|        if ((int)type.getStruct()->size() != function.getParamCount()) {
  ------------------
  |  Branch (6755:13): [True: 0, False: 0]
  ------------------
 6756|      0|            error(loc, "Number of constructor parameters does not match the number of structure fields", "constructor", "");
 6757|      0|            return true;
 6758|      0|        }
 6759|      0|    }
 6760|       |
 6761|      5|    if ((op != EOpConstructStruct && size != 1 && size < type.computeNumComponents()) ||
  ------------------
  |  Branch (6761:10): [True: 5, False: 0]
  |  Branch (6761:38): [True: 3, False: 2]
  |  Branch (6761:51): [True: 0, False: 3]
  ------------------
 6762|      5|        (op == EOpConstructStruct && size < type.computeNumComponents())) {
  ------------------
  |  Branch (6762:10): [True: 0, False: 5]
  |  Branch (6762:38): [True: 0, False: 0]
  ------------------
 6763|      0|        error(loc, "not enough data provided for construction", "constructor", "");
 6764|      0|        return true;
 6765|      0|    }
 6766|       |
 6767|      5|    return false;
 6768|      5|}
_ZN7glslang16HlslParseContext14voidErrorCheckERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEENS_10TBasicTypeE:
 6792|      6|{
 6793|      6|    if (basicType == EbtVoid) {
  ------------------
  |  Branch (6793:9): [True: 0, False: 6]
  ------------------
 6794|      0|        error(loc, "illegal use of type 'void'", identifier.c_str(), "");
 6795|      0|        return true;
 6796|      0|    }
 6797|       |
 6798|      6|    return false;
 6799|      6|}
_ZN7glslang16HlslParseContext14arraySizeCheckERKNS_10TSourceLocEPNS_12TIntermTypedERNS_10TArraySizeE:
 6872|      3|{
 6873|      3|    bool isConst = false;
 6874|      3|    sizePair.size = 1;
 6875|      3|    sizePair.node = nullptr;
 6876|       |
 6877|      3|    TIntermConstantUnion* constant = expr->getAsConstantUnion();
 6878|      3|    if (constant) {
  ------------------
  |  Branch (6878:9): [True: 3, False: 0]
  ------------------
 6879|       |        // handle true (non-specialization) constant
 6880|      3|        sizePair.size = constant->getConstArray()[0].getIConst();
 6881|      3|        isConst = true;
 6882|      3|    } else {
 6883|       |        // see if it's a specialization constant instead
 6884|      0|        if (expr->getQualifier().isSpecConstant()) {
  ------------------
  |  Branch (6884:13): [True: 0, False: 0]
  ------------------
 6885|      0|            isConst = true;
 6886|      0|            sizePair.node = expr;
 6887|      0|            TIntermSymbol* symbol = expr->getAsSymbolNode();
 6888|      0|            if (symbol && symbol->getConstArray().size() > 0)
  ------------------
  |  Branch (6888:17): [True: 0, False: 0]
  |  Branch (6888:27): [True: 0, False: 0]
  ------------------
 6889|      0|                sizePair.size = symbol->getConstArray()[0].getIConst();
 6890|      0|        }
 6891|      0|    }
 6892|       |
 6893|      3|    if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
  ------------------
  |  Branch (6893:9): [True: 0, False: 3]
  |  Branch (6893:23): [True: 0, False: 3]
  |  Branch (6893:57): [True: 0, False: 0]
  ------------------
 6894|      0|        error(loc, "array size must be a constant integer expression", "", "");
 6895|      0|        return;
 6896|      0|    }
 6897|       |
 6898|      3|    if (sizePair.size <= 0) {
  ------------------
  |  Branch (6898:9): [True: 0, False: 3]
  ------------------
 6899|      0|        error(loc, "array size must be a positive integer", "", "");
 6900|      0|        return;
 6901|      0|    }
 6902|      3|}
_ZN7glslang16HlslParseContext12declareArrayERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_5TTypeERPNS_7TSymbolEb:
 6929|      5|{
 6930|      5|    if (symbol == nullptr) {
  ------------------
  |  Branch (6930:9): [True: 5, False: 0]
  ------------------
 6931|      5|        bool currentScope;
 6932|      5|        symbol = symbolTable.find(identifier, nullptr, &currentScope);
 6933|       |
 6934|      5|        if (symbol && builtInName(identifier) && ! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (6934:13): [True: 0, False: 5]
  |  Branch (6934:23): [True: 0, False: 0]
  |  Branch (6934:50): [True: 0, False: 0]
  ------------------
 6935|       |            // bad shader (errors already reported) trying to redeclare a built-in name as an array
 6936|      0|            return;
 6937|      0|        }
 6938|      5|        if (symbol == nullptr || ! currentScope) {
  ------------------
  |  Branch (6938:13): [True: 5, False: 0]
  |  Branch (6938:34): [True: 0, False: 0]
  ------------------
 6939|       |            //
 6940|       |            // Successfully process a new definition.
 6941|       |            // (Redeclarations have to take place at the same scope; otherwise they are hiding declarations)
 6942|       |            //
 6943|      5|            symbol = new TVariable(&identifier, type);
 6944|      5|            symbolTable.insert(*symbol);
 6945|      5|            if (track && symbolTable.atGlobalLevel())
  ------------------
  |  Branch (6945:17): [True: 5, False: 0]
  |  Branch (6945:26): [True: 5, False: 0]
  ------------------
 6946|      5|                trackLinkage(*symbol);
 6947|       |
 6948|      5|            return;
 6949|      5|        }
 6950|      0|        if (symbol->getAsAnonMember()) {
  ------------------
  |  Branch (6950:13): [True: 0, False: 0]
  ------------------
 6951|      0|            error(loc, "cannot redeclare a user-block member array", identifier.c_str(), "");
 6952|      0|            symbol = nullptr;
 6953|      0|            return;
 6954|      0|        }
 6955|      0|    }
 6956|       |
 6957|       |    //
 6958|       |    // Process a redeclaration.
 6959|       |    //
 6960|       |
 6961|      0|    if (symbol == nullptr) {
  ------------------
  |  Branch (6961:9): [True: 0, False: 0]
  ------------------
 6962|      0|        error(loc, "array variable name expected", identifier.c_str(), "");
 6963|      0|        return;
 6964|      0|    }
 6965|       |
 6966|       |    // redeclareBuiltinVariable() should have already done the copyUp()
 6967|      0|    TType& existingType = symbol->getWritableType();
 6968|       |
 6969|      0|    if (existingType.isSizedArray()) {
  ------------------
  |  Branch (6969:9): [True: 0, False: 0]
  ------------------
 6970|       |        // be more lenient for input arrays to geometry shaders and tessellation control outputs,
 6971|       |        // where the redeclaration is the same size
 6972|      0|        return;
 6973|      0|    }
 6974|       |
 6975|      0|    existingType.updateArraySizes(type);
 6976|      0|}
_ZN7glslang16HlslParseContext12fixConstInitERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeERPNS_12TIntermTypedE:
 6983|      6|{
 6984|       |    //
 6985|       |    // Make the qualifier make sense, given that there is an initializer.
 6986|       |    //
 6987|      6|    if (initializer == nullptr) {
  ------------------
  |  Branch (6987:9): [True: 6, False: 0]
  ------------------
 6988|      6|        if (type.getQualifier().storage == EvqConst ||
  ------------------
  |  Branch (6988:13): [True: 0, False: 6]
  ------------------
 6989|      6|            type.getQualifier().storage == EvqConstReadOnly) {
  ------------------
  |  Branch (6989:13): [True: 0, False: 6]
  ------------------
 6990|      0|            initializer = intermediate.makeAggregate(loc);
 6991|      0|            warn(loc, "variable with qualifier 'const' not initialized; zero initializing", identifier.c_str(), "");
 6992|      0|        }
 6993|      6|    }
 6994|      6|}
_ZNK7glslang16HlslParseContext24indexStructBufferContentERKNS_10TSourceLocEPNS_12TIntermTypedE:
 7020|      1|{
 7021|       |    // Bail out if not a struct buffer
 7022|      1|    if (buffer == nullptr || ! isStructBufferType(buffer->getType()))
  ------------------
  |  Branch (7022:9): [True: 0, False: 1]
  |  Branch (7022:30): [True: 1, False: 0]
  ------------------
 7023|      1|        return nullptr;
 7024|       |
 7025|       |    // Runtime sized array is always the last element.
 7026|      0|    const TTypeList* bufferStruct = buffer->getType().getStruct();
 7027|      0|    TIntermTyped* arrayPosition = intermediate.addConstantUnion(unsigned(bufferStruct->size()-1), loc);
 7028|       |
 7029|      0|    TIntermTyped* argArray = intermediate.addIndex(EOpIndexDirectStruct, buffer, arrayPosition, loc);
 7030|      0|    argArray->setType(*(*bufferStruct)[bufferStruct->size()-1].type);
 7031|       |
 7032|      0|    return argArray;
 7033|      1|}
_ZNK7glslang16HlslParseContext26getStructBufferContentTypeERKNS_5TTypeE:
 7040|      1|{
 7041|      1|    if (type.getBasicType() != EbtBlock || type.getQualifier().storage != EvqBuffer)
  ------------------
  |  Branch (7041:9): [True: 1, False: 0]
  |  Branch (7041:44): [True: 0, False: 0]
  ------------------
 7042|      1|        return nullptr;
 7043|       |
 7044|      0|    const int memberCount = (int)type.getStruct()->size();
 7045|      0|    assert(memberCount > 0);
 7046|       |
 7047|      0|    TType* contentType = (*type.getStruct())[memberCount-1].type;
 7048|       |
 7049|      0|    return contentType->isUnsizedArray() ? contentType : nullptr;
  ------------------
  |  Branch (7049:12): [True: 0, False: 0]
  ------------------
 7050|      1|}
_ZN7glslang16HlslParseContext8paramFixERNS_5TTypeE:
 7109|  1.07M|{
 7110|  1.07M|    switch (type.getQualifier().storage) {
 7111|      0|    case EvqConst:
  ------------------
  |  Branch (7111:5): [True: 0, False: 1.07M]
  ------------------
 7112|      0|        type.getQualifier().storage = EvqConstReadOnly;
 7113|      0|        break;
 7114|      0|    case EvqGlobal:
  ------------------
  |  Branch (7114:5): [True: 0, False: 1.07M]
  ------------------
 7115|   974k|    case EvqTemporary:
  ------------------
  |  Branch (7115:5): [True: 974k, False: 104k]
  ------------------
 7116|   974k|        type.getQualifier().storage = EvqIn;
 7117|   974k|        break;
 7118|      0|    case EvqBuffer:
  ------------------
  |  Branch (7118:5): [True: 0, False: 1.07M]
  ------------------
 7119|      0|        {
 7120|       |            // SSBO parameter.  These do not go through the declareBlock path since they are fn parameters.
 7121|      0|            correctUniform(type.getQualifier());
 7122|      0|            TQualifier bufferQualifier = globalBufferDefaults;
 7123|      0|            mergeObjectLayoutQualifiers(bufferQualifier, type.getQualifier(), true);
 7124|      0|            bufferQualifier.storage = type.getQualifier().storage;
 7125|      0|            bufferQualifier.readonly = type.getQualifier().readonly;
 7126|      0|            bufferQualifier.coherent = type.getQualifier().coherent;
 7127|      0|            bufferQualifier.declaredBuiltIn = type.getQualifier().declaredBuiltIn;
 7128|      0|            type.getQualifier() = bufferQualifier;
 7129|      0|            break;
 7130|      0|        }
 7131|   104k|    default:
  ------------------
  |  Branch (7131:5): [True: 104k, False: 974k]
  ------------------
 7132|   104k|        break;
 7133|  1.07M|    }
 7134|  1.07M|}
_ZN7glslang16HlslParseContext13declareStructERKNS_10TSourceLocERNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeE:
 7887|      2|{
 7888|       |    // If it was named, which means the type can be reused later, add
 7889|       |    // it to the symbol table.  (Unless it's a block, in which
 7890|       |    // case the name is not a type.)
 7891|      2|    if (type.getBasicType() == EbtBlock || structName.size() == 0)
  ------------------
  |  Branch (7891:9): [True: 0, False: 2]
  |  Branch (7891:44): [True: 0, False: 2]
  ------------------
 7892|      0|        return;
 7893|       |
 7894|      2|    TVariable* userTypeDef = new TVariable(&structName, type, true);
 7895|      2|    if (! symbolTable.insert(*userTypeDef)) {
  ------------------
  |  Branch (7895:9): [True: 0, False: 2]
  ------------------
 7896|      0|        error(loc, "redefinition", structName.c_str(), "struct");
 7897|      0|        return;
 7898|      0|    }
 7899|       |
 7900|       |    // See if we need IO aliases for the structure typeList
 7901|       |
 7902|      2|    const auto condAlloc = [](bool pred, TTypeList*& list) {
 7903|      2|        if (pred && list == nullptr)
 7904|      2|            list = new TTypeList;
 7905|      2|    };
 7906|       |
 7907|      2|    tIoKinds newLists = { nullptr, nullptr, nullptr }; // allocate for each kind found
 7908|      4|    for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) {
  ------------------
  |  Branch (7908:51): [True: 2, False: 2]
  ------------------
 7909|      2|        condAlloc(hasUniform(member->type->getQualifier()), newLists.uniform);
 7910|      2|        condAlloc(  hasInput(member->type->getQualifier()), newLists.input);
 7911|      2|        condAlloc( hasOutput(member->type->getQualifier()), newLists.output);
 7912|       |
 7913|      2|        if (member->type->isStruct()) {
  ------------------
  |  Branch (7913:13): [True: 1, False: 1]
  ------------------
 7914|      1|            auto it = ioTypeMap.find(member->type->getStruct());
 7915|      1|            if (it != ioTypeMap.end()) {
  ------------------
  |  Branch (7915:17): [True: 0, False: 1]
  ------------------
 7916|      0|                condAlloc(it->second.uniform != nullptr, newLists.uniform);
 7917|      0|                condAlloc(it->second.input   != nullptr, newLists.input);
 7918|      0|                condAlloc(it->second.output  != nullptr, newLists.output);
 7919|      0|            }
 7920|      1|        }
 7921|      2|    }
 7922|      2|    if (newLists.uniform == nullptr &&
  ------------------
  |  Branch (7922:9): [True: 2, False: 0]
  ------------------
 7923|      2|        newLists.input   == nullptr &&
  ------------------
  |  Branch (7923:9): [True: 2, False: 0]
  ------------------
 7924|      2|        newLists.output  == nullptr) {
  ------------------
  |  Branch (7924:9): [True: 2, False: 0]
  ------------------
 7925|       |        // Won't do any IO caching, clear up the type and get out now.
 7926|      4|        for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member)
  ------------------
  |  Branch (7926:55): [True: 2, False: 2]
  ------------------
 7927|      2|            clearUniformInputOutput(member->type->getQualifier());
 7928|      2|        return;
 7929|      2|    }
 7930|       |
 7931|       |    // We have IO involved.
 7932|       |
 7933|       |    // Make a pure typeList for the symbol table, and cache side copies of IO versions.
 7934|      0|    for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) {
  ------------------
  |  Branch (7934:51): [True: 0, False: 0]
  ------------------
 7935|      0|        const auto inheritStruct = [&](TTypeList* s, TTypeLoc& ioMember) {
 7936|      0|            if (s != nullptr) {
 7937|      0|                ioMember.type = new TType;
 7938|      0|                ioMember.type->shallowCopy(*member->type);
 7939|      0|                ioMember.type->setStruct(s);
 7940|      0|            }
 7941|      0|        };
 7942|      0|        const auto newMember = [&](TTypeLoc& m) {
 7943|      0|            if (m.type == nullptr) {
 7944|      0|                m.type = new TType;
 7945|      0|                m.type->shallowCopy(*member->type);
 7946|      0|            }
 7947|      0|        };
 7948|       |
 7949|      0|        TTypeLoc newUniformMember = { nullptr, member->loc };
 7950|      0|        TTypeLoc newInputMember   = { nullptr, member->loc };
 7951|      0|        TTypeLoc newOutputMember  = { nullptr, member->loc };
 7952|      0|        if (member->type->isStruct()) {
  ------------------
  |  Branch (7952:13): [True: 0, False: 0]
  ------------------
 7953|       |            // swap in an IO child if there is one
 7954|      0|            auto it = ioTypeMap.find(member->type->getStruct());
 7955|      0|            if (it != ioTypeMap.end()) {
  ------------------
  |  Branch (7955:17): [True: 0, False: 0]
  ------------------
 7956|      0|                inheritStruct(it->second.uniform, newUniformMember);
 7957|      0|                inheritStruct(it->second.input,   newInputMember);
 7958|      0|                inheritStruct(it->second.output,  newOutputMember);
 7959|      0|            }
 7960|      0|        }
 7961|      0|        if (newLists.uniform) {
  ------------------
  |  Branch (7961:13): [True: 0, False: 0]
  ------------------
 7962|      0|            newMember(newUniformMember);
 7963|       |
 7964|       |            // inherit default matrix layout (changeable via #pragma pack_matrix), if none given.
 7965|      0|            if (member->type->isMatrix() && member->type->getQualifier().layoutMatrix == ElmNone)
  ------------------
  |  Branch (7965:17): [True: 0, False: 0]
  |  Branch (7965:45): [True: 0, False: 0]
  ------------------
 7966|      0|                newUniformMember.type->getQualifier().layoutMatrix = globalUniformDefaults.layoutMatrix;
 7967|       |
 7968|      0|            correctUniform(newUniformMember.type->getQualifier());
 7969|      0|            newLists.uniform->push_back(newUniformMember);
 7970|      0|        }
 7971|      0|        if (newLists.input) {
  ------------------
  |  Branch (7971:13): [True: 0, False: 0]
  ------------------
 7972|      0|            newMember(newInputMember);
 7973|      0|            correctInput(newInputMember.type->getQualifier());
 7974|      0|            newLists.input->push_back(newInputMember);
 7975|      0|        }
 7976|      0|        if (newLists.output) {
  ------------------
  |  Branch (7976:13): [True: 0, False: 0]
  ------------------
 7977|      0|            newMember(newOutputMember);
 7978|      0|            correctOutput(newOutputMember.type->getQualifier());
 7979|      0|            newLists.output->push_back(newOutputMember);
 7980|      0|        }
 7981|       |
 7982|       |        // make original pure
 7983|      0|        clearUniformInputOutput(member->type->getQualifier());
 7984|      0|    }
 7985|      0|    ioTypeMap[type.getStruct()] = newLists;
 7986|      0|}
_ZN7glslang16HlslParseContext14lookupUserTypeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeE:
 7992|    683|{
 7993|    683|    TSymbol* symbol = symbolTable.find(typeName);
 7994|    683|    if (symbol && symbol->getAsVariable() && symbol->getAsVariable()->isUserType()) {
  ------------------
  |  Branch (7994:9): [True: 6, False: 677]
  |  Branch (7994:19): [True: 3, False: 3]
  |  Branch (7994:46): [True: 3, False: 0]
  ------------------
 7995|      3|        type.shallowCopy(symbol->getType());
 7996|      3|        return symbol;
 7997|      3|    } else
 7998|    680|        return nullptr;
 7999|    683|}
_ZN7glslang16HlslParseContext15declareVariableERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeEPNS_12TIntermTypedE:
 8014|      6|{
 8015|      6|    if (voidErrorCheck(loc, identifier, type.getBasicType()))
  ------------------
  |  Branch (8015:9): [True: 0, False: 6]
  ------------------
 8016|      0|        return nullptr;
 8017|       |
 8018|       |    // Global consts with initializers that are non-const act like EvqGlobal in HLSL.
 8019|       |    // This test is implicitly recursive, because initializers propagate constness
 8020|       |    // up the aggregate node tree during creation.  E.g, for:
 8021|       |    //    { { 1, 2 }, { 3, 4 } }
 8022|       |    // the initializer list is marked EvqConst at the top node, and remains so here.  However:
 8023|       |    //    { 1, { myvar, 2 }, 3 }
 8024|       |    // is not a const intializer, and still becomes EvqGlobal here.
 8025|       |
 8026|      6|    const bool nonConstInitializer = (initializer != nullptr && initializer->getQualifier().storage != EvqConst);
  ------------------
  |  Branch (8026:39): [True: 0, False: 6]
  |  Branch (8026:65): [True: 0, False: 0]
  ------------------
 8027|       |
 8028|      6|    if (type.getQualifier().storage == EvqConst && symbolTable.atGlobalLevel() && nonConstInitializer) {
  ------------------
  |  Branch (8028:9): [True: 0, False: 6]
  |  Branch (8028:52): [True: 0, False: 0]
  |  Branch (8028:83): [True: 0, False: 0]
  ------------------
 8029|       |        // Force to global
 8030|      0|        type.getQualifier().storage = EvqGlobal;
 8031|      0|    }
 8032|       |
 8033|       |    // make const and initialization consistent
 8034|      6|    fixConstInit(loc, identifier, type, initializer);
 8035|       |
 8036|       |    // Check for redeclaration of built-ins and/or attempting to declare a reserved name
 8037|      6|    TSymbol* symbol = nullptr;
 8038|       |
 8039|      6|    inheritGlobalDefaults(type.getQualifier());
 8040|       |
 8041|      6|    const bool flattenVar = shouldFlatten(type, type.getQualifier().storage, true);
 8042|       |
 8043|       |    // correct IO in the type
 8044|      6|    switch (type.getQualifier().storage) {
 8045|      0|    case EvqGlobal:
  ------------------
  |  Branch (8045:5): [True: 0, False: 6]
  ------------------
 8046|      0|    case EvqTemporary:
  ------------------
  |  Branch (8046:5): [True: 0, False: 6]
  ------------------
 8047|      0|        clearUniformInputOutput(type.getQualifier());
 8048|      0|        break;
 8049|      5|    case EvqUniform:
  ------------------
  |  Branch (8049:5): [True: 5, False: 1]
  ------------------
 8050|      5|    case EvqBuffer:
  ------------------
  |  Branch (8050:5): [True: 0, False: 6]
  ------------------
 8051|      5|        correctUniform(type.getQualifier());
 8052|      5|        if (type.isStruct()) {
  ------------------
  |  Branch (8052:13): [True: 0, False: 5]
  ------------------
 8053|      0|            auto it = ioTypeMap.find(type.getStruct());
 8054|      0|            if (it != ioTypeMap.end())
  ------------------
  |  Branch (8054:17): [True: 0, False: 0]
  ------------------
 8055|      0|                type.setStruct(it->second.uniform);
 8056|      0|        }
 8057|       |
 8058|      5|        break;
 8059|      1|    default:
  ------------------
  |  Branch (8059:5): [True: 1, False: 5]
  ------------------
 8060|      1|        break;
 8061|      6|    }
 8062|       |
 8063|       |    // Declare the variable
 8064|      6|    if (type.isArray()) {
  ------------------
  |  Branch (8064:9): [True: 5, False: 1]
  ------------------
 8065|       |        // array case
 8066|      5|        declareArray(loc, identifier, type, symbol, !flattenVar);
 8067|      5|    } else {
 8068|       |        // non-array case
 8069|      1|        if (symbol == nullptr)
  ------------------
  |  Branch (8069:13): [True: 1, False: 0]
  ------------------
 8070|      1|            symbol = declareNonArray(loc, identifier, type, !flattenVar);
 8071|      0|        else if (type != symbol->getType())
  ------------------
  |  Branch (8071:18): [True: 0, False: 0]
  ------------------
 8072|      0|            error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
 8073|      1|    }
 8074|       |
 8075|      6|    if (symbol == nullptr)
  ------------------
  |  Branch (8075:9): [True: 0, False: 6]
  ------------------
 8076|      0|        return nullptr;
 8077|       |
 8078|      6|    if (flattenVar)
  ------------------
  |  Branch (8078:9): [True: 0, False: 6]
  ------------------
 8079|      0|        flatten(*symbol->getAsVariable(), symbolTable.atGlobalLevel());
 8080|       |
 8081|      6|    TVariable* variable = symbol->getAsVariable();
 8082|       |
 8083|      6|    if (initializer == nullptr) {
  ------------------
  |  Branch (8083:9): [True: 6, False: 0]
  ------------------
 8084|      6|        if (intermediate.getDebugInfo())
  ------------------
  |  Branch (8084:13): [True: 0, False: 6]
  ------------------
 8085|      0|            return executeDeclaration(loc, variable);
 8086|      6|        else
 8087|      6|            return nullptr;
 8088|      6|    }
 8089|       |
 8090|       |    // Deal with initializer
 8091|      0|    if (variable == nullptr) {
  ------------------
  |  Branch (8091:9): [True: 0, False: 0]
  ------------------
 8092|      0|        error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
 8093|      0|        return nullptr;
 8094|      0|    }
 8095|      0|    return executeInitializer(loc, initializer, variable);
 8096|      0|}
_ZNK7glslang16HlslParseContext21inheritGlobalDefaultsERNS_10TQualifierE:
 8100|      6|{
 8101|      6|    if (dst.storage == EvqVaryingOut) {
  ------------------
  |  Branch (8101:9): [True: 0, False: 6]
  ------------------
 8102|      0|        if (! dst.hasStream() && language == EShLangGeometry)
  ------------------
  |  Branch (8102:13): [True: 0, False: 0]
  |  Branch (8102:34): [True: 0, False: 0]
  ------------------
 8103|      0|            dst.layoutStream = globalOutputDefaults.layoutStream;
 8104|      0|        if (! dst.hasXfbBuffer())
  ------------------
  |  Branch (8104:13): [True: 0, False: 0]
  ------------------
 8105|      0|            dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
 8106|      0|    }
 8107|      6|}
_ZN7glslang16HlslParseContext15declareNonArrayERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_5TTypeEb:
 8142|      1|{
 8143|       |    // make a new variable
 8144|      1|    TVariable* variable = new TVariable(&identifier, type);
 8145|       |
 8146|       |    // add variable to symbol table
 8147|      1|    if (symbolTable.insert(*variable)) {
  ------------------
  |  Branch (8147:9): [True: 1, False: 0]
  ------------------
 8148|      1|        if (track && symbolTable.atGlobalLevel())
  ------------------
  |  Branch (8148:13): [True: 1, False: 0]
  |  Branch (8148:22): [True: 1, False: 0]
  ------------------
 8149|      1|            trackLinkage(*variable);
 8150|      1|        return variable;
 8151|      1|    }
 8152|       |
 8153|      0|    error(loc, "redefinition", variable->getName().c_str(), "");
 8154|      0|    return nullptr;
 8155|      1|}
_ZN7glslang16HlslParseContext17handleConstructorERKNS_10TSourceLocEPNS_12TIntermTypedERKNS_5TTypeE:
 8448|      5|{
 8449|      5|    if (node == nullptr)
  ------------------
  |  Branch (8449:9): [True: 0, False: 5]
  ------------------
 8450|      0|        return nullptr;
 8451|       |
 8452|       |    // Construct identical type
 8453|      5|    if (type == node->getType())
  ------------------
  |  Branch (8453:9): [True: 2, False: 3]
  ------------------
 8454|      2|        return node;
 8455|       |
 8456|       |    // Handle the idiom "(struct type)<scalar value>"
 8457|      3|    if (type.isStruct() && isScalarConstructor(node)) {
  ------------------
  |  Branch (8457:9): [True: 0, False: 3]
  |  Branch (8457:28): [True: 0, False: 0]
  ------------------
 8458|       |        // 'node' will almost always get used multiple times, so should not be used directly,
 8459|       |        // it would create a DAG instead of a tree, which might be okay (would
 8460|       |        // like to formalize that for constants and symbols), but if it has
 8461|       |        // side effects, they would get executed multiple times, which is not okay.
 8462|      0|        if (node->getAsConstantUnion() == nullptr && node->getAsSymbolNode() == nullptr) {
  ------------------
  |  Branch (8462:13): [True: 0, False: 0]
  |  Branch (8462:54): [True: 0, False: 0]
  ------------------
 8463|      0|            TIntermAggregate* seq = intermediate.makeAggregate(loc);
 8464|      0|            TIntermSymbol* copy = makeInternalVariableNode(loc, "scalarCopy", node->getType());
 8465|      0|            seq = intermediate.growAggregate(seq, intermediate.addBinaryNode(EOpAssign, copy, node, loc));
 8466|      0|            seq = intermediate.growAggregate(seq, convertInitializerList(loc, type, intermediate.makeAggregate(loc), copy));
 8467|      0|            seq->setOp(EOpComma);
 8468|      0|            seq->setType(type);
 8469|      0|            return seq;
 8470|      0|        } else
 8471|      0|            return convertInitializerList(loc, type, intermediate.makeAggregate(loc), node);
 8472|      0|    }
 8473|       |
 8474|      3|    return addConstructor(loc, node, type);
 8475|      3|}
_ZN7glslang16HlslParseContext14addConstructorERKNS_10TSourceLocEPNS_12TIntermTypedERKNS_5TTypeE:
 8486|      6|{
 8487|      6|    TIntermAggregate* aggrNode = node->getAsAggregate();
 8488|      6|    TOperator op = intermediate.mapTypeToConstructorOp(type);
 8489|       |
 8490|      6|    if (op == EOpConstructTextureSampler)
  ------------------
  |  Branch (8490:9): [True: 0, False: 6]
  ------------------
 8491|      0|        return intermediate.setAggregateOperator(aggrNode, op, type, loc);
 8492|       |
 8493|      6|    TTypeList::const_iterator memberTypes;
 8494|      6|    if (op == EOpConstructStruct)
  ------------------
  |  Branch (8494:9): [True: 0, False: 6]
  ------------------
 8495|      0|        memberTypes = type.getStruct()->begin();
 8496|       |
 8497|      6|    TType elementType;
 8498|      6|    if (type.isArray()) {
  ------------------
  |  Branch (8498:9): [True: 0, False: 6]
  ------------------
 8499|      0|        TType dereferenced(type, 0);
 8500|      0|        elementType.shallowCopy(dereferenced);
 8501|      0|    } else
 8502|      6|        elementType.shallowCopy(type);
 8503|       |
 8504|      6|    bool singleArg;
 8505|      6|    if (aggrNode != nullptr) {
  ------------------
  |  Branch (8505:9): [True: 0, False: 6]
  ------------------
 8506|      0|        if (aggrNode->getOp() != EOpNull)
  ------------------
  |  Branch (8506:13): [True: 0, False: 0]
  ------------------
 8507|      0|            singleArg = true;
 8508|      0|        else
 8509|      0|            singleArg = false;
 8510|      0|    } else
 8511|      6|        singleArg = true;
 8512|       |
 8513|      6|    TIntermTyped *newNode;
 8514|      6|    if (singleArg) {
  ------------------
  |  Branch (8514:9): [True: 6, False: 0]
  ------------------
 8515|       |        // Handle array -> array conversion
 8516|       |        // Constructing an array of one type from an array of another type is allowed,
 8517|       |        // assuming there are enough components available (semantic-checked earlier).
 8518|      6|        if (type.isArray() && node->isArray())
  ------------------
  |  Branch (8518:13): [True: 0, False: 6]
  |  Branch (8518:31): [True: 0, False: 0]
  ------------------
 8519|      0|            newNode = convertArray(node, type);
 8520|       |
 8521|       |        // If structure constructor or array constructor is being called
 8522|       |        // for only one parameter inside the aggregate, we need to call constructAggregate function once.
 8523|      6|        else if (type.isArray())
  ------------------
  |  Branch (8523:18): [True: 0, False: 6]
  ------------------
 8524|      0|            newNode = constructAggregate(node, elementType, 1, node->getLoc());
 8525|      6|        else if (op == EOpConstructStruct)
  ------------------
  |  Branch (8525:18): [True: 0, False: 6]
  ------------------
 8526|      0|            newNode = constructAggregate(node, *(*memberTypes).type, 1, node->getLoc());
 8527|      6|        else {
 8528|       |            // shape conversion for matrix constructor from scalar.  HLSL semantics are: scalar
 8529|       |            // is replicated into every element of the matrix (not just the diagnonal), so
 8530|       |            // that is handled specially here.
 8531|      6|            if (type.isMatrix() && node->getType().isScalarOrVec1())
  ------------------
  |  Branch (8531:17): [True: 0, False: 6]
  |  Branch (8531:36): [True: 0, False: 0]
  ------------------
 8532|      0|                node = intermediate.addShapeConversion(type, node);
 8533|       |
 8534|      6|            newNode = constructBuiltIn(type, op, node, node->getLoc(), false);
 8535|      6|        }
 8536|       |
 8537|      6|        if (newNode && (type.isArray() || op == EOpConstructStruct))
  ------------------
  |  Branch (8537:13): [True: 6, False: 0]
  |  Branch (8537:25): [True: 0, False: 6]
  |  Branch (8537:43): [True: 0, False: 6]
  ------------------
 8538|      0|            newNode = intermediate.setAggregateOperator(newNode, EOpConstructStruct, type, loc);
 8539|       |
 8540|      6|        return newNode;
 8541|      6|    }
 8542|       |
 8543|       |    //
 8544|       |    // Handle list of arguments.
 8545|       |    //
 8546|      0|    TIntermSequence& sequenceVector = aggrNode->getSequence();    // Stores the information about the parameter to the constructor
 8547|       |    // if the structure constructor contains more than one parameter, then construct
 8548|       |    // each parameter
 8549|       |
 8550|      0|    int paramCount = 0;  // keeps a track of the constructor parameter number being checked
 8551|       |
 8552|       |    // for each parameter to the constructor call, check to see if the right type is passed or convert them
 8553|       |    // to the right type if possible (and allowed).
 8554|       |    // for structure constructors, just check if the right type is passed, no conversion is allowed.
 8555|       |
 8556|      0|    for (TIntermSequence::iterator p = sequenceVector.begin();
 8557|      0|        p != sequenceVector.end(); p++, paramCount++) {
  ------------------
  |  Branch (8557:9): [True: 0, False: 0]
  ------------------
 8558|      0|        if (type.isArray())
  ------------------
  |  Branch (8558:13): [True: 0, False: 0]
  ------------------
 8559|      0|            newNode = constructAggregate(*p, elementType, paramCount + 1, node->getLoc());
 8560|      0|        else if (op == EOpConstructStruct)
  ------------------
  |  Branch (8560:18): [True: 0, False: 0]
  ------------------
 8561|      0|            newNode = constructAggregate(*p, *(memberTypes[paramCount]).type, paramCount + 1, node->getLoc());
 8562|      0|        else
 8563|      0|            newNode = constructBuiltIn(type, op, (*p)->getAsTyped(), node->getLoc(), true);
 8564|       |
 8565|      0|        if (newNode)
  ------------------
  |  Branch (8565:13): [True: 0, False: 0]
  ------------------
 8566|      0|            *p = newNode;
 8567|      0|        else
 8568|      0|            return nullptr;
 8569|      0|    }
 8570|       |
 8571|      0|    TIntermTyped* constructor = intermediate.setAggregateOperator(aggrNode, op, type, loc);
 8572|       |
 8573|      0|    return constructor;
 8574|      0|}
_ZN7glslang16HlslParseContext16constructBuiltInERKNS_5TTypeENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocEb:
 8585|      6|{
 8586|      6|    TIntermTyped* newNode;
 8587|      6|    TOperator basicOp;
 8588|       |
 8589|       |    //
 8590|       |    // First, convert types as needed.
 8591|       |    //
 8592|      6|    switch (op) {
 8593|      0|    case EOpConstructF16Vec2:
  ------------------
  |  Branch (8593:5): [True: 0, False: 6]
  ------------------
 8594|      0|    case EOpConstructF16Vec3:
  ------------------
  |  Branch (8594:5): [True: 0, False: 6]
  ------------------
 8595|      0|    case EOpConstructF16Vec4:
  ------------------
  |  Branch (8595:5): [True: 0, False: 6]
  ------------------
 8596|      0|    case EOpConstructF16Mat2x2:
  ------------------
  |  Branch (8596:5): [True: 0, False: 6]
  ------------------
 8597|      0|    case EOpConstructF16Mat2x3:
  ------------------
  |  Branch (8597:5): [True: 0, False: 6]
  ------------------
 8598|      0|    case EOpConstructF16Mat2x4:
  ------------------
  |  Branch (8598:5): [True: 0, False: 6]
  ------------------
 8599|      0|    case EOpConstructF16Mat3x2:
  ------------------
  |  Branch (8599:5): [True: 0, False: 6]
  ------------------
 8600|      0|    case EOpConstructF16Mat3x3:
  ------------------
  |  Branch (8600:5): [True: 0, False: 6]
  ------------------
 8601|      0|    case EOpConstructF16Mat3x4:
  ------------------
  |  Branch (8601:5): [True: 0, False: 6]
  ------------------
 8602|      0|    case EOpConstructF16Mat4x2:
  ------------------
  |  Branch (8602:5): [True: 0, False: 6]
  ------------------
 8603|      0|    case EOpConstructF16Mat4x3:
  ------------------
  |  Branch (8603:5): [True: 0, False: 6]
  ------------------
 8604|      0|    case EOpConstructF16Mat4x4:
  ------------------
  |  Branch (8604:5): [True: 0, False: 6]
  ------------------
 8605|      0|    case EOpConstructFloat16:
  ------------------
  |  Branch (8605:5): [True: 0, False: 6]
  ------------------
 8606|      0|        basicOp = EOpConstructFloat16;
 8607|      0|        break;
 8608|       |
 8609|      0|    case EOpConstructVec2:
  ------------------
  |  Branch (8609:5): [True: 0, False: 6]
  ------------------
 8610|      0|    case EOpConstructVec3:
  ------------------
  |  Branch (8610:5): [True: 0, False: 6]
  ------------------
 8611|      0|    case EOpConstructVec4:
  ------------------
  |  Branch (8611:5): [True: 0, False: 6]
  ------------------
 8612|      0|    case EOpConstructMat2x2:
  ------------------
  |  Branch (8612:5): [True: 0, False: 6]
  ------------------
 8613|      0|    case EOpConstructMat2x3:
  ------------------
  |  Branch (8613:5): [True: 0, False: 6]
  ------------------
 8614|      0|    case EOpConstructMat2x4:
  ------------------
  |  Branch (8614:5): [True: 0, False: 6]
  ------------------
 8615|      0|    case EOpConstructMat3x2:
  ------------------
  |  Branch (8615:5): [True: 0, False: 6]
  ------------------
 8616|      0|    case EOpConstructMat3x3:
  ------------------
  |  Branch (8616:5): [True: 0, False: 6]
  ------------------
 8617|      0|    case EOpConstructMat3x4:
  ------------------
  |  Branch (8617:5): [True: 0, False: 6]
  ------------------
 8618|      0|    case EOpConstructMat4x2:
  ------------------
  |  Branch (8618:5): [True: 0, False: 6]
  ------------------
 8619|      0|    case EOpConstructMat4x3:
  ------------------
  |  Branch (8619:5): [True: 0, False: 6]
  ------------------
 8620|      0|    case EOpConstructMat4x4:
  ------------------
  |  Branch (8620:5): [True: 0, False: 6]
  ------------------
 8621|      0|    case EOpConstructFloat:
  ------------------
  |  Branch (8621:5): [True: 0, False: 6]
  ------------------
 8622|      0|        basicOp = EOpConstructFloat;
 8623|      0|        break;
 8624|       |
 8625|      0|    case EOpConstructDVec2:
  ------------------
  |  Branch (8625:5): [True: 0, False: 6]
  ------------------
 8626|      0|    case EOpConstructDVec3:
  ------------------
  |  Branch (8626:5): [True: 0, False: 6]
  ------------------
 8627|      0|    case EOpConstructDVec4:
  ------------------
  |  Branch (8627:5): [True: 0, False: 6]
  ------------------
 8628|      0|    case EOpConstructDMat2x2:
  ------------------
  |  Branch (8628:5): [True: 0, False: 6]
  ------------------
 8629|      0|    case EOpConstructDMat2x3:
  ------------------
  |  Branch (8629:5): [True: 0, False: 6]
  ------------------
 8630|      0|    case EOpConstructDMat2x4:
  ------------------
  |  Branch (8630:5): [True: 0, False: 6]
  ------------------
 8631|      0|    case EOpConstructDMat3x2:
  ------------------
  |  Branch (8631:5): [True: 0, False: 6]
  ------------------
 8632|      0|    case EOpConstructDMat3x3:
  ------------------
  |  Branch (8632:5): [True: 0, False: 6]
  ------------------
 8633|      0|    case EOpConstructDMat3x4:
  ------------------
  |  Branch (8633:5): [True: 0, False: 6]
  ------------------
 8634|      0|    case EOpConstructDMat4x2:
  ------------------
  |  Branch (8634:5): [True: 0, False: 6]
  ------------------
 8635|      0|    case EOpConstructDMat4x3:
  ------------------
  |  Branch (8635:5): [True: 0, False: 6]
  ------------------
 8636|      0|    case EOpConstructDMat4x4:
  ------------------
  |  Branch (8636:5): [True: 0, False: 6]
  ------------------
 8637|      0|    case EOpConstructDouble:
  ------------------
  |  Branch (8637:5): [True: 0, False: 6]
  ------------------
 8638|      0|        basicOp = EOpConstructDouble;
 8639|      0|        break;
 8640|       |
 8641|      0|    case EOpConstructI16Vec2:
  ------------------
  |  Branch (8641:5): [True: 0, False: 6]
  ------------------
 8642|      0|    case EOpConstructI16Vec3:
  ------------------
  |  Branch (8642:5): [True: 0, False: 6]
  ------------------
 8643|      0|    case EOpConstructI16Vec4:
  ------------------
  |  Branch (8643:5): [True: 0, False: 6]
  ------------------
 8644|      0|    case EOpConstructInt16:
  ------------------
  |  Branch (8644:5): [True: 0, False: 6]
  ------------------
 8645|      0|        basicOp = EOpConstructInt16;
 8646|      0|        break;
 8647|       |
 8648|      3|    case EOpConstructIVec2:
  ------------------
  |  Branch (8648:5): [True: 3, False: 3]
  ------------------
 8649|      3|    case EOpConstructIVec3:
  ------------------
  |  Branch (8649:5): [True: 0, False: 6]
  ------------------
 8650|      3|    case EOpConstructIVec4:
  ------------------
  |  Branch (8650:5): [True: 0, False: 6]
  ------------------
 8651|      3|    case EOpConstructIMat2x2:
  ------------------
  |  Branch (8651:5): [True: 0, False: 6]
  ------------------
 8652|      3|    case EOpConstructIMat2x3:
  ------------------
  |  Branch (8652:5): [True: 0, False: 6]
  ------------------
 8653|      3|    case EOpConstructIMat2x4:
  ------------------
  |  Branch (8653:5): [True: 0, False: 6]
  ------------------
 8654|      3|    case EOpConstructIMat3x2:
  ------------------
  |  Branch (8654:5): [True: 0, False: 6]
  ------------------
 8655|      3|    case EOpConstructIMat3x3:
  ------------------
  |  Branch (8655:5): [True: 0, False: 6]
  ------------------
 8656|      3|    case EOpConstructIMat3x4:
  ------------------
  |  Branch (8656:5): [True: 0, False: 6]
  ------------------
 8657|      3|    case EOpConstructIMat4x2:
  ------------------
  |  Branch (8657:5): [True: 0, False: 6]
  ------------------
 8658|      3|    case EOpConstructIMat4x3:
  ------------------
  |  Branch (8658:5): [True: 0, False: 6]
  ------------------
 8659|      3|    case EOpConstructIMat4x4:
  ------------------
  |  Branch (8659:5): [True: 0, False: 6]
  ------------------
 8660|      6|    case EOpConstructInt:
  ------------------
  |  Branch (8660:5): [True: 3, False: 3]
  ------------------
 8661|      6|        basicOp = EOpConstructInt;
 8662|      6|        break;
 8663|       |
 8664|      0|    case EOpConstructU16Vec2:
  ------------------
  |  Branch (8664:5): [True: 0, False: 6]
  ------------------
 8665|      0|    case EOpConstructU16Vec3:
  ------------------
  |  Branch (8665:5): [True: 0, False: 6]
  ------------------
 8666|      0|    case EOpConstructU16Vec4:
  ------------------
  |  Branch (8666:5): [True: 0, False: 6]
  ------------------
 8667|      0|    case EOpConstructUint16:
  ------------------
  |  Branch (8667:5): [True: 0, False: 6]
  ------------------
 8668|      0|        basicOp = EOpConstructUint16;
 8669|      0|        break;
 8670|       |
 8671|      0|    case EOpConstructUVec2:
  ------------------
  |  Branch (8671:5): [True: 0, False: 6]
  ------------------
 8672|      0|    case EOpConstructUVec3:
  ------------------
  |  Branch (8672:5): [True: 0, False: 6]
  ------------------
 8673|      0|    case EOpConstructUVec4:
  ------------------
  |  Branch (8673:5): [True: 0, False: 6]
  ------------------
 8674|      0|    case EOpConstructUMat2x2:
  ------------------
  |  Branch (8674:5): [True: 0, False: 6]
  ------------------
 8675|      0|    case EOpConstructUMat2x3:
  ------------------
  |  Branch (8675:5): [True: 0, False: 6]
  ------------------
 8676|      0|    case EOpConstructUMat2x4:
  ------------------
  |  Branch (8676:5): [True: 0, False: 6]
  ------------------
 8677|      0|    case EOpConstructUMat3x2:
  ------------------
  |  Branch (8677:5): [True: 0, False: 6]
  ------------------
 8678|      0|    case EOpConstructUMat3x3:
  ------------------
  |  Branch (8678:5): [True: 0, False: 6]
  ------------------
 8679|      0|    case EOpConstructUMat3x4:
  ------------------
  |  Branch (8679:5): [True: 0, False: 6]
  ------------------
 8680|      0|    case EOpConstructUMat4x2:
  ------------------
  |  Branch (8680:5): [True: 0, False: 6]
  ------------------
 8681|      0|    case EOpConstructUMat4x3:
  ------------------
  |  Branch (8681:5): [True: 0, False: 6]
  ------------------
 8682|      0|    case EOpConstructUMat4x4:
  ------------------
  |  Branch (8682:5): [True: 0, False: 6]
  ------------------
 8683|      0|    case EOpConstructUint:
  ------------------
  |  Branch (8683:5): [True: 0, False: 6]
  ------------------
 8684|      0|        basicOp = EOpConstructUint;
 8685|      0|        break;
 8686|       |
 8687|      0|    case EOpConstructBVec2:
  ------------------
  |  Branch (8687:5): [True: 0, False: 6]
  ------------------
 8688|      0|    case EOpConstructBVec3:
  ------------------
  |  Branch (8688:5): [True: 0, False: 6]
  ------------------
 8689|      0|    case EOpConstructBVec4:
  ------------------
  |  Branch (8689:5): [True: 0, False: 6]
  ------------------
 8690|      0|    case EOpConstructBMat2x2:
  ------------------
  |  Branch (8690:5): [True: 0, False: 6]
  ------------------
 8691|      0|    case EOpConstructBMat2x3:
  ------------------
  |  Branch (8691:5): [True: 0, False: 6]
  ------------------
 8692|      0|    case EOpConstructBMat2x4:
  ------------------
  |  Branch (8692:5): [True: 0, False: 6]
  ------------------
 8693|      0|    case EOpConstructBMat3x2:
  ------------------
  |  Branch (8693:5): [True: 0, False: 6]
  ------------------
 8694|      0|    case EOpConstructBMat3x3:
  ------------------
  |  Branch (8694:5): [True: 0, False: 6]
  ------------------
 8695|      0|    case EOpConstructBMat3x4:
  ------------------
  |  Branch (8695:5): [True: 0, False: 6]
  ------------------
 8696|      0|    case EOpConstructBMat4x2:
  ------------------
  |  Branch (8696:5): [True: 0, False: 6]
  ------------------
 8697|      0|    case EOpConstructBMat4x3:
  ------------------
  |  Branch (8697:5): [True: 0, False: 6]
  ------------------
 8698|      0|    case EOpConstructBMat4x4:
  ------------------
  |  Branch (8698:5): [True: 0, False: 6]
  ------------------
 8699|      0|    case EOpConstructBool:
  ------------------
  |  Branch (8699:5): [True: 0, False: 6]
  ------------------
 8700|      0|        basicOp = EOpConstructBool;
 8701|      0|        break;
 8702|       |
 8703|      0|    default:
  ------------------
  |  Branch (8703:5): [True: 0, False: 6]
  ------------------
 8704|      0|        error(loc, "unsupported construction", "", "");
 8705|       |
 8706|      0|        return nullptr;
 8707|      6|    }
 8708|      6|    newNode = intermediate.addUnaryMath(basicOp, node, node->getLoc());
 8709|      6|    if (newNode == nullptr) {
  ------------------
  |  Branch (8709:9): [True: 0, False: 6]
  ------------------
 8710|      0|        error(loc, "can't convert", "constructor", "");
 8711|      0|        return nullptr;
 8712|      0|    }
 8713|       |
 8714|       |    //
 8715|       |    // Now, if there still isn't an operation to do the construction, and we need one, add one.
 8716|       |    //
 8717|       |
 8718|       |    // Otherwise, skip out early.
 8719|      6|    if (subset || (newNode != node && newNode->getType() == type))
  ------------------
  |  Branch (8719:9): [True: 0, False: 6]
  |  Branch (8719:20): [True: 3, False: 3]
  |  Branch (8719:39): [True: 0, False: 3]
  ------------------
 8720|      0|        return newNode;
 8721|       |
 8722|       |    // setAggregateOperator will insert a new node for the constructor, as needed.
 8723|      6|    return intermediate.setAggregateOperator(newNode, op, type, loc);
 8724|      6|}
_ZN7glslang16HlslParseContext19handleInputGeometryERKNS_10TSourceLocERKNS_15TLayoutGeometryE:
 9165|      1|{
 9166|       |    // these can be declared on non-entry-points, in which case they lose their meaning
 9167|      1|    if (! parsingEntrypointParameters)
  ------------------
  |  Branch (9167:9): [True: 1, False: 0]
  ------------------
 9168|      1|        return true;
 9169|       |
 9170|      0|    switch (geometry) {
 9171|      0|    case ElgPoints:             // fall through
  ------------------
  |  Branch (9171:5): [True: 0, False: 0]
  ------------------
 9172|      0|    case ElgLines:              // ...
  ------------------
  |  Branch (9172:5): [True: 0, False: 0]
  ------------------
 9173|      0|    case ElgTriangles:          // ...
  ------------------
  |  Branch (9173:5): [True: 0, False: 0]
  ------------------
 9174|      0|    case ElgLinesAdjacency:     // ...
  ------------------
  |  Branch (9174:5): [True: 0, False: 0]
  ------------------
 9175|      0|    case ElgTrianglesAdjacency: // ...
  ------------------
  |  Branch (9175:5): [True: 0, False: 0]
  ------------------
 9176|      0|        if (! intermediate.setInputPrimitive(geometry)) {
  ------------------
  |  Branch (9176:13): [True: 0, False: 0]
  ------------------
 9177|      0|            error(loc, "input primitive geometry redefinition", TQualifier::getGeometryString(geometry), "");
 9178|      0|            return false;
 9179|      0|        }
 9180|      0|        break;
 9181|       |
 9182|      0|    default:
  ------------------
  |  Branch (9182:5): [True: 0, False: 0]
  ------------------
 9183|      0|        error(loc, "cannot apply to 'in'", TQualifier::getGeometryString(geometry), "");
 9184|      0|        return false;
 9185|      0|    }
 9186|       |
 9187|      0|    return true;
 9188|      0|}
_ZN7glslang16HlslParseContext13pushThisScopeERKNS_5TTypeERKNS_7TVectorINS_19TFunctionDeclaratorEEE:
 9471|      2|{
 9472|       |    // member variables
 9473|      2|    TVariable& thisVariable = *new TVariable(NewPoolTString(""), thisStruct);
 9474|      2|    symbolTable.pushThis(thisVariable);
 9475|       |
 9476|       |    // member functions
 9477|      2|    for (auto it = functionDeclarators.begin(); it != functionDeclarators.end(); ++it) {
  ------------------
  |  Branch (9477:49): [True: 0, False: 2]
  ------------------
 9478|       |        // member should have a prefix matching currentTypePrefix.back()
 9479|       |        // but, symbol lookup within the class scope will just use the
 9480|       |        // unprefixed name. Hence, there are two: one fully prefixed and
 9481|       |        // one with no prefix.
 9482|      0|        TFunction& member = *it->function->clone();
 9483|      0|        member.removePrefix(currentTypePrefix.back());
 9484|      0|        symbolTable.insert(member);
 9485|      0|    }
 9486|      2|}
_ZN7glslang16HlslParseContext13pushNamespaceERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 9497|      4|{
 9498|       |    // make new type prefix
 9499|      4|    TString newPrefix;
 9500|      4|    if (currentTypePrefix.size() > 0)
  ------------------
  |  Branch (9500:9): [True: 0, False: 4]
  ------------------
 9501|      0|        newPrefix = currentTypePrefix.back();
 9502|      4|    newPrefix.append(typeName);
 9503|      4|    newPrefix.append(scopeMangler);
 9504|      4|    currentTypePrefix.push_back(newPrefix);
 9505|      4|}
_ZN7glslang16HlslParseContext12popNamespaceEv:
 9509|      4|{
 9510|      4|    currentTypePrefix.pop_back();
 9511|      4|}
_ZNK7glslang16HlslParseContext20getFullNamespaceNameERPNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 9516|   480k|{
 9517|   480k|    if (currentTypePrefix.size() == 0)
  ------------------
  |  Branch (9517:9): [True: 480k, False: 0]
  ------------------
 9518|   480k|        return;
 9519|       |
 9520|      0|    TString* fullName = NewPoolTString(currentTypePrefix.back().c_str());
 9521|      0|    fullName->append(*name);
 9522|      0|    name = fullName;
 9523|      0|}
_ZNK7glslang16HlslParseContext10hasUniformERKNS_10TQualifierE:
 9533|      2|{
 9534|      2|    return qualifier.hasUniformLayout() ||
  ------------------
  |  Branch (9534:12): [True: 0, False: 2]
  ------------------
 9535|      2|           qualifier.layoutPushConstant;
  ------------------
  |  Branch (9535:12): [True: 0, False: 2]
  ------------------
 9536|      2|}
_ZN7glslang16HlslParseContext12clearUniformERNS_10TQualifierE:
 9542|      2|{
 9543|      2|    qualifier.clearUniformLayout();
 9544|      2|    qualifier.layoutPushConstant = false;
 9545|      2|}
_ZNK7glslang16HlslParseContext14isInputBuiltInERKNS_10TQualifierE:
 9549|      2|{
 9550|      2|    switch (qualifier.builtIn) {
 9551|      0|    case EbvPosition:
  ------------------
  |  Branch (9551:5): [True: 0, False: 2]
  ------------------
 9552|      0|    case EbvPointSize:
  ------------------
  |  Branch (9552:5): [True: 0, False: 2]
  ------------------
 9553|      0|        return language != EShLangVertex && language != EShLangCompute && language != EShLangFragment;
  ------------------
  |  Branch (9553:16): [True: 0, False: 0]
  |  Branch (9553:45): [True: 0, False: 0]
  |  Branch (9553:75): [True: 0, False: 0]
  ------------------
 9554|      0|    case EbvClipDistance:
  ------------------
  |  Branch (9554:5): [True: 0, False: 2]
  ------------------
 9555|      0|    case EbvCullDistance:
  ------------------
  |  Branch (9555:5): [True: 0, False: 2]
  ------------------
 9556|      0|        return language != EShLangVertex && language != EShLangCompute;
  ------------------
  |  Branch (9556:16): [True: 0, False: 0]
  |  Branch (9556:45): [True: 0, False: 0]
  ------------------
 9557|      0|    case EbvFragCoord:
  ------------------
  |  Branch (9557:5): [True: 0, False: 2]
  ------------------
 9558|      0|    case EbvFace:
  ------------------
  |  Branch (9558:5): [True: 0, False: 2]
  ------------------
 9559|      0|    case EbvHelperInvocation:
  ------------------
  |  Branch (9559:5): [True: 0, False: 2]
  ------------------
 9560|      0|    case EbvLayer:
  ------------------
  |  Branch (9560:5): [True: 0, False: 2]
  ------------------
 9561|      0|    case EbvPointCoord:
  ------------------
  |  Branch (9561:5): [True: 0, False: 2]
  ------------------
 9562|      0|    case EbvSampleId:
  ------------------
  |  Branch (9562:5): [True: 0, False: 2]
  ------------------
 9563|      0|    case EbvSampleMask:
  ------------------
  |  Branch (9563:5): [True: 0, False: 2]
  ------------------
 9564|      0|    case EbvSamplePosition:
  ------------------
  |  Branch (9564:5): [True: 0, False: 2]
  ------------------
 9565|      0|    case EbvViewportIndex:
  ------------------
  |  Branch (9565:5): [True: 0, False: 2]
  ------------------
 9566|      0|        return language == EShLangFragment;
 9567|      0|    case EbvGlobalInvocationId:
  ------------------
  |  Branch (9567:5): [True: 0, False: 2]
  ------------------
 9568|      0|    case EbvLocalInvocationIndex:
  ------------------
  |  Branch (9568:5): [True: 0, False: 2]
  ------------------
 9569|      0|    case EbvLocalInvocationId:
  ------------------
  |  Branch (9569:5): [True: 0, False: 2]
  ------------------
 9570|      0|    case EbvNumWorkGroups:
  ------------------
  |  Branch (9570:5): [True: 0, False: 2]
  ------------------
 9571|      0|    case EbvWorkGroupId:
  ------------------
  |  Branch (9571:5): [True: 0, False: 2]
  ------------------
 9572|      0|    case EbvWorkGroupSize:
  ------------------
  |  Branch (9572:5): [True: 0, False: 2]
  ------------------
 9573|      0|        return language == EShLangCompute;
 9574|      0|    case EbvInvocationId:
  ------------------
  |  Branch (9574:5): [True: 0, False: 2]
  ------------------
 9575|      0|        return language == EShLangTessControl || language == EShLangTessEvaluation || language == EShLangGeometry;
  ------------------
  |  Branch (9575:16): [True: 0, False: 0]
  |  Branch (9575:50): [True: 0, False: 0]
  |  Branch (9575:87): [True: 0, False: 0]
  ------------------
 9576|      0|    case EbvPatchVertices:
  ------------------
  |  Branch (9576:5): [True: 0, False: 2]
  ------------------
 9577|      0|        return language == EShLangTessControl || language == EShLangTessEvaluation;
  ------------------
  |  Branch (9577:16): [True: 0, False: 0]
  |  Branch (9577:50): [True: 0, False: 0]
  ------------------
 9578|      0|    case EbvInstanceId:
  ------------------
  |  Branch (9578:5): [True: 0, False: 2]
  ------------------
 9579|      0|    case EbvInstanceIndex:
  ------------------
  |  Branch (9579:5): [True: 0, False: 2]
  ------------------
 9580|      0|    case EbvVertexId:
  ------------------
  |  Branch (9580:5): [True: 0, False: 2]
  ------------------
 9581|      0|    case EbvVertexIndex:
  ------------------
  |  Branch (9581:5): [True: 0, False: 2]
  ------------------
 9582|      0|        return language == EShLangVertex;
 9583|      0|    case EbvPrimitiveId:
  ------------------
  |  Branch (9583:5): [True: 0, False: 2]
  ------------------
 9584|      0|        return language == EShLangGeometry || language == EShLangFragment || language == EShLangTessControl;
  ------------------
  |  Branch (9584:16): [True: 0, False: 0]
  |  Branch (9584:47): [True: 0, False: 0]
  |  Branch (9584:78): [True: 0, False: 0]
  ------------------
 9585|      0|    case EbvTessLevelInner:
  ------------------
  |  Branch (9585:5): [True: 0, False: 2]
  ------------------
 9586|      0|    case EbvTessLevelOuter:
  ------------------
  |  Branch (9586:5): [True: 0, False: 2]
  ------------------
 9587|      0|        return language == EShLangTessEvaluation;
 9588|      0|    case EbvTessCoord:
  ------------------
  |  Branch (9588:5): [True: 0, False: 2]
  ------------------
 9589|      0|        return language == EShLangTessEvaluation;
 9590|      0|    case EbvViewIndex:
  ------------------
  |  Branch (9590:5): [True: 0, False: 2]
  ------------------
 9591|      0|        return language != EShLangCompute;
 9592|      2|    default:
  ------------------
  |  Branch (9592:5): [True: 2, False: 0]
  ------------------
 9593|      2|        return false;
 9594|      2|    }
 9595|      2|}
_ZNK7glslang16HlslParseContext8hasInputERKNS_10TQualifierE:
 9599|      2|{
 9600|      2|    if (qualifier.hasAnyLocation())
  ------------------
  |  Branch (9600:9): [True: 0, False: 2]
  ------------------
 9601|      0|        return true;
 9602|       |
 9603|      2|    if (language == EShLangFragment && (qualifier.isInterpolation() || qualifier.centroid || qualifier.sample))
  ------------------
  |  Branch (9603:9): [True: 0, False: 2]
  |  Branch (9603:41): [True: 0, False: 0]
  |  Branch (9603:72): [True: 0, False: 0]
  |  Branch (9603:94): [True: 0, False: 0]
  ------------------
 9604|      0|        return true;
 9605|       |
 9606|      2|    if (language == EShLangTessEvaluation && qualifier.patch)
  ------------------
  |  Branch (9606:9): [True: 0, False: 2]
  |  Branch (9606:46): [True: 0, False: 0]
  ------------------
 9607|      0|        return true;
 9608|       |
 9609|      2|    if (isInputBuiltIn(qualifier))
  ------------------
  |  Branch (9609:9): [True: 0, False: 2]
  ------------------
 9610|      0|        return true;
 9611|       |
 9612|      2|    return false;
 9613|      2|}
_ZNK7glslang16HlslParseContext15isOutputBuiltInERKNS_10TQualifierE:
 9617|      2|{
 9618|      2|    switch (qualifier.builtIn) {
 9619|      0|    case EbvPosition:
  ------------------
  |  Branch (9619:5): [True: 0, False: 2]
  ------------------
 9620|      0|    case EbvPointSize:
  ------------------
  |  Branch (9620:5): [True: 0, False: 2]
  ------------------
 9621|      0|    case EbvClipVertex:
  ------------------
  |  Branch (9621:5): [True: 0, False: 2]
  ------------------
 9622|      0|    case EbvClipDistance:
  ------------------
  |  Branch (9622:5): [True: 0, False: 2]
  ------------------
 9623|      0|    case EbvCullDistance:
  ------------------
  |  Branch (9623:5): [True: 0, False: 2]
  ------------------
 9624|      0|        return language != EShLangFragment && language != EShLangCompute;
  ------------------
  |  Branch (9624:16): [True: 0, False: 0]
  |  Branch (9624:47): [True: 0, False: 0]
  ------------------
 9625|      0|    case EbvFragDepth:
  ------------------
  |  Branch (9625:5): [True: 0, False: 2]
  ------------------
 9626|      0|    case EbvFragDepthGreater:
  ------------------
  |  Branch (9626:5): [True: 0, False: 2]
  ------------------
 9627|      0|    case EbvFragDepthLesser:
  ------------------
  |  Branch (9627:5): [True: 0, False: 2]
  ------------------
 9628|      0|    case EbvSampleMask:
  ------------------
  |  Branch (9628:5): [True: 0, False: 2]
  ------------------
 9629|      0|        return language == EShLangFragment;
 9630|      0|    case EbvLayer:
  ------------------
  |  Branch (9630:5): [True: 0, False: 2]
  ------------------
 9631|      0|    case EbvViewportIndex:
  ------------------
  |  Branch (9631:5): [True: 0, False: 2]
  ------------------
 9632|      0|        return language == EShLangGeometry || language == EShLangVertex;
  ------------------
  |  Branch (9632:16): [True: 0, False: 0]
  |  Branch (9632:47): [True: 0, False: 0]
  ------------------
 9633|      0|    case EbvPrimitiveId:
  ------------------
  |  Branch (9633:5): [True: 0, False: 2]
  ------------------
 9634|      0|        return language == EShLangGeometry;
 9635|      0|    case EbvTessLevelInner:
  ------------------
  |  Branch (9635:5): [True: 0, False: 2]
  ------------------
 9636|      0|    case EbvTessLevelOuter:
  ------------------
  |  Branch (9636:5): [True: 0, False: 2]
  ------------------
 9637|      0|        return language == EShLangTessControl;
 9638|      2|    default:
  ------------------
  |  Branch (9638:5): [True: 2, False: 0]
  ------------------
 9639|      2|        return false;
 9640|      2|    }
 9641|      2|}
_ZNK7glslang16HlslParseContext9hasOutputERKNS_10TQualifierE:
 9645|      2|{
 9646|      2|    if (qualifier.hasAnyLocation())
  ------------------
  |  Branch (9646:9): [True: 0, False: 2]
  ------------------
 9647|      0|        return true;
 9648|       |
 9649|      2|    if (language != EShLangFragment && language != EShLangCompute && qualifier.hasXfb())
  ------------------
  |  Branch (9649:9): [True: 2, False: 0]
  |  Branch (9649:40): [True: 2, False: 0]
  |  Branch (9649:70): [True: 0, False: 2]
  ------------------
 9650|      0|        return true;
 9651|       |
 9652|      2|    if (language == EShLangTessControl && qualifier.patch)
  ------------------
  |  Branch (9652:9): [True: 0, False: 2]
  |  Branch (9652:43): [True: 0, False: 0]
  ------------------
 9653|      0|        return true;
 9654|       |
 9655|      2|    if (language == EShLangGeometry && qualifier.hasStream())
  ------------------
  |  Branch (9655:9): [True: 0, False: 2]
  |  Branch (9655:40): [True: 0, False: 0]
  ------------------
 9656|      0|        return true;
 9657|       |
 9658|      2|    if (isOutputBuiltIn(qualifier))
  ------------------
  |  Branch (9658:9): [True: 0, False: 2]
  ------------------
 9659|      0|        return true;
 9660|       |
 9661|      2|    return false;
 9662|      2|}
_ZN7glslang16HlslParseContext14correctUniformERNS_10TQualifierE:
 9726|     13|{
 9727|     13|    if (qualifier.declaredBuiltIn == EbvNone)
  ------------------
  |  Branch (9727:9): [True: 13, False: 0]
  ------------------
 9728|     13|        qualifier.declaredBuiltIn = qualifier.builtIn;
 9729|       |
 9730|     13|    qualifier.builtIn = EbvNone;
 9731|     13|    qualifier.clearInterstage();
 9732|     13|    qualifier.clearInterstageLayout();
 9733|     13|}
_ZN7glslang16HlslParseContext23clearUniformInputOutputERNS_10TQualifierE:
 9737|      2|{
 9738|      2|    clearUniform(qualifier);
 9739|      2|    correctUniform(qualifier);
 9740|      2|}
_ZN7glslang16HlslParseContext20setTextureReturnTypeERNS_8TSamplerERKNS_5TTypeERKNS_10TSourceLocE:
 9745|  97.5k|{
 9746|       |    // Seed the output with an invalid index.  We will set it to a valid one if we can.
 9747|  97.5k|    sampler.structReturnIndex = TSampler::noReturnStruct;
 9748|       |
 9749|       |    // Arrays aren't supported.
 9750|  97.5k|    if (retType.isArray()) {
  ------------------
  |  Branch (9750:9): [True: 0, False: 97.5k]
  ------------------
 9751|      0|        error(loc, "Arrays not supported in texture template types", "", "");
 9752|      0|        return false;
 9753|      0|    }
 9754|       |
 9755|       |    // If return type is a vector, remember the vector size in the sampler, and return.
 9756|  97.5k|    if (retType.isVector() || retType.isScalar()) {
  ------------------
  |  Branch (9756:9): [True: 97.5k, False: 0]
  |  Branch (9756:31): [True: 0, False: 0]
  ------------------
 9757|  97.5k|        sampler.vectorSize = retType.getVectorSize();
 9758|  97.5k|        return true;
 9759|  97.5k|    }
 9760|       |
 9761|       |    // If it wasn't a vector, it must be a struct meeting certain requirements.  The requirements
 9762|       |    // are checked below: just check for struct-ness here.
 9763|      0|    if (!retType.isStruct()) {
  ------------------
  |  Branch (9763:9): [True: 0, False: 0]
  ------------------
 9764|      0|        error(loc, "Invalid texture template type", "", "");
 9765|      0|        return false;
 9766|      0|    }
 9767|       |
 9768|       |    // TODO: Subpass doesn't handle struct returns, due to some oddities with fn overloading.
 9769|      0|    if (sampler.isSubpass()) {
  ------------------
  |  Branch (9769:9): [True: 0, False: 0]
  ------------------
 9770|      0|        error(loc, "Unimplemented: structure template type in subpass input", "", "");
 9771|      0|        return false;
 9772|      0|    }
 9773|       |
 9774|      0|    TTypeList* members = retType.getWritableStruct();
 9775|       |
 9776|       |    // Check for too many or not enough structure members.
 9777|      0|    if (members->size() > 4 || members->size() == 0) {
  ------------------
  |  Branch (9777:9): [True: 0, False: 0]
  |  Branch (9777:32): [True: 0, False: 0]
  ------------------
 9778|      0|        error(loc, "Invalid member count in texture template structure", "", "");
 9779|      0|        return false;
 9780|      0|    }
 9781|       |
 9782|       |    // Error checking: We must have <= 4 total components, all of the same basic type.
 9783|      0|    unsigned totalComponents = 0;
 9784|      0|    for (unsigned m = 0; m < members->size(); ++m) {
  ------------------
  |  Branch (9784:26): [True: 0, False: 0]
  ------------------
 9785|       |        // Check for bad member types
 9786|      0|        if (!(*members)[m].type->isScalar() && !(*members)[m].type->isVector()) {
  ------------------
  |  Branch (9786:13): [True: 0, False: 0]
  |  Branch (9786:48): [True: 0, False: 0]
  ------------------
 9787|      0|            error(loc, "Invalid texture template struct member type", "", "");
 9788|      0|            return false;
 9789|      0|        }
 9790|       |
 9791|      0|        const unsigned memberVectorSize = (*members)[m].type->getVectorSize();
 9792|      0|        totalComponents += memberVectorSize;
 9793|       |
 9794|       |        // too many total member components
 9795|      0|        if (totalComponents > 4) {
  ------------------
  |  Branch (9795:13): [True: 0, False: 0]
  ------------------
 9796|      0|            error(loc, "Too many components in texture template structure type", "", "");
 9797|      0|            return false;
 9798|      0|        }
 9799|       |
 9800|       |        // All members must be of a common basic type
 9801|      0|        if ((*members)[m].type->getBasicType() != (*members)[0].type->getBasicType()) {
  ------------------
  |  Branch (9801:13): [True: 0, False: 0]
  ------------------
 9802|      0|            error(loc, "Texture template structure members must same basic type", "", "");
 9803|      0|            return false;
 9804|      0|        }
 9805|      0|    }
 9806|       |
 9807|       |    // If the structure in the return type already exists in the table, we'll use it.  Otherwise, we'll make
 9808|       |    // a new entry.  This is a linear search, but it hardly ever happens, and the list cannot be very large.
 9809|      0|    for (unsigned int idx = 0; idx < textureReturnStruct.size(); ++idx) {
  ------------------
  |  Branch (9809:32): [True: 0, False: 0]
  ------------------
 9810|      0|        if (textureReturnStruct[idx] == members) {
  ------------------
  |  Branch (9810:13): [True: 0, False: 0]
  ------------------
 9811|      0|            sampler.structReturnIndex = idx;
 9812|      0|            return true;
 9813|      0|        }
 9814|      0|    }
 9815|       |
 9816|       |    // It wasn't found as an existing entry.  See if we have room for a new one.
 9817|      0|    if (textureReturnStruct.size() >= TSampler::structReturnSlots) {
  ------------------
  |  Branch (9817:9): [True: 0, False: 0]
  ------------------
 9818|      0|        error(loc, "Texture template struct return slots exceeded", "", "");
 9819|      0|        return false;
 9820|      0|    }
 9821|       |
 9822|       |    // Insert it in the vector that tracks struct return types.
 9823|      0|    sampler.structReturnIndex = unsigned(textureReturnStruct.size());
 9824|      0|    textureReturnStruct.push_back(members);
 9825|       |
 9826|       |    // Success!
 9827|      0|    return true;
 9828|      0|}
_ZN7glslang16HlslParseContext26addPatchConstantInvocationEv:
 9894|    211|{
 9895|    211|    TSourceLoc loc;
 9896|    211|    loc.init();
 9897|       |
 9898|       |    // If there's no patch constant function, or we're not a HS, do nothing.
 9899|    211|    if (patchConstantFunctionName.empty() || language != EShLangTessControl)
  ------------------
  |  Branch (9899:9): [True: 211, False: 0]
  |  Branch (9899:46): [True: 0, False: 0]
  ------------------
 9900|    211|        return;
 9901|       |
 9902|       |    // Look for built-in variables in a function's parameter list.
 9903|      0|    const auto findBuiltIns = [&](const TFunction& function, std::set<tInterstageIoData>& builtIns) {
 9904|      0|        for (int p=0; p<function.getParamCount(); ++p) {
 9905|      0|            TStorageQualifier storage = function[p].type->getQualifier().storage;
 9906|       |
 9907|      0|            if (storage == EvqConstReadOnly) // treated identically to input
 9908|      0|                storage = EvqIn;
 9909|       |
 9910|      0|            if (function[p].getDeclaredBuiltIn() != EbvNone)
 9911|      0|                builtIns.insert(HlslParseContext::tInterstageIoData(function[p].getDeclaredBuiltIn(), storage));
 9912|      0|            else
 9913|      0|                builtIns.insert(HlslParseContext::tInterstageIoData(function[p].type->getQualifier().builtIn, storage));
 9914|      0|        }
 9915|      0|    };
 9916|       |
 9917|       |    // If we synthesize a built-in interface variable, we must add it to the linkage.
 9918|      0|    const auto addToLinkage = [&](const TType& type, const TString* name, TIntermSymbol** symbolNode) {
 9919|      0|        if (name == nullptr) {
 9920|      0|            error(loc, "unable to locate patch function parameter name", "", "");
 9921|      0|            return;
 9922|      0|        } else {
 9923|      0|            TVariable& variable = *new TVariable(name, type);
 9924|      0|            if (! symbolTable.insert(variable)) {
 9925|      0|                error(loc, "unable to declare patch constant function interface variable", name->c_str(), "");
 9926|      0|                return;
 9927|      0|            }
 9928|       |
 9929|      0|            globalQualifierFix(loc, variable.getWritableType().getQualifier());
 9930|       |
 9931|      0|            if (symbolNode != nullptr)
 9932|      0|                *symbolNode = intermediate.addSymbol(variable);
 9933|       |
 9934|      0|            trackLinkage(variable);
 9935|      0|        }
 9936|      0|    };
 9937|       |
 9938|      0|    const auto isOutputPatch = [](TFunction& patchConstantFunction, int param) {
 9939|      0|        const TType& type = *patchConstantFunction[param].type;
 9940|      0|        const TBuiltInVariable biType = patchConstantFunction[param].getDeclaredBuiltIn();
 9941|       |
 9942|      0|        return type.isSizedArray() && biType == EbvOutputPatch;
 9943|      0|    };
 9944|       |
 9945|       |    // We will perform these steps.  Each is in a scoped block for separation: they could
 9946|       |    // become separate functions to make addPatchConstantInvocation shorter.
 9947|       |    //
 9948|       |    // 1. Union the interfaces, and create built-ins for anything present in the PCF and
 9949|       |    //    declared as a built-in variable that isn't present in the entry point's signature.
 9950|       |    //
 9951|       |    // 2. Synthesizes a call to the patchconstfunction using built-in variables from either main,
 9952|       |    //    or the ones we created.  Matching is based on built-in type.  We may use synthesized
 9953|       |    //    variables from (1) above.
 9954|       |    //
 9955|       |    // 2B: Synthesize per control point invocations of wrapped entry point if the PCF requires them.
 9956|       |    //
 9957|       |    // 3. Create a return sequence: copy the return value (if any) from the PCF to a
 9958|       |    //    (non-sanitized) output variable.  In case this may involve multiple copies, such as for
 9959|       |    //    an arrayed variable, a temporary copy of the PCF output is created to avoid multiple
 9960|       |    //    indirections into a complex R-value coming from the call to the PCF.
 9961|       |    //
 9962|       |    // 4. Create a barrier.
 9963|       |    //
 9964|       |    // 5/5B. Call the PCF inside an if test for (invocation id == 0).
 9965|       |
 9966|      0|    TFunction* patchConstantFunctionPtr = const_cast<TFunction*>(findPatchConstantFunction(loc));
 9967|       |
 9968|      0|    if (patchConstantFunctionPtr == nullptr)
  ------------------
  |  Branch (9968:9): [True: 0, False: 0]
  ------------------
 9969|      0|        return;
 9970|       |
 9971|      0|    TFunction& patchConstantFunction = *patchConstantFunctionPtr;
 9972|       |
 9973|      0|    const int pcfParamCount = patchConstantFunction.getParamCount();
 9974|      0|    TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
 9975|      0|    TIntermSequence& epBodySeq = entryPointFunctionBody->getAsAggregate()->getSequence();
 9976|       |
 9977|      0|    int outPatchParam = -1; // -1 means there isn't one.
 9978|       |
 9979|       |    // ================ Step 1A: Union Interfaces ================
 9980|       |    // Our patch constant function.
 9981|      0|    {
 9982|      0|        std::set<tInterstageIoData> pcfBuiltIns;  // patch constant function built-ins
 9983|      0|        std::set<tInterstageIoData> epfBuiltIns;  // entry point function built-ins
 9984|       |
 9985|      0|        assert(entryPointFunction);
 9986|      0|        assert(entryPointFunctionBody);
 9987|       |
 9988|      0|        findBuiltIns(patchConstantFunction, pcfBuiltIns);
 9989|      0|        findBuiltIns(*entryPointFunction,   epfBuiltIns);
 9990|       |
 9991|       |        // Find the set of built-ins in the PCF that are not present in the entry point.
 9992|      0|        std::set<tInterstageIoData> notInEntryPoint;
 9993|       |
 9994|      0|        notInEntryPoint = pcfBuiltIns;
 9995|       |
 9996|       |        // std::set_difference not usable on unordered containers
 9997|      0|        for (auto bi = epfBuiltIns.begin(); bi != epfBuiltIns.end(); ++bi)
  ------------------
  |  Branch (9997:45): [True: 0, False: 0]
  ------------------
 9998|      0|            notInEntryPoint.erase(*bi);
 9999|       |
10000|       |        // Now we'll add those to the entry and to the linkage.
10001|      0|        for (int p=0; p<pcfParamCount; ++p) {
  ------------------
  |  Branch (10001:23): [True: 0, False: 0]
  ------------------
10002|      0|            const TBuiltInVariable biType   = patchConstantFunction[p].getDeclaredBuiltIn();
10003|      0|            TStorageQualifier storage = patchConstantFunction[p].type->getQualifier().storage;
10004|       |
10005|       |            // Track whether there is an output patch param
10006|      0|            if (isOutputPatch(patchConstantFunction, p)) {
  ------------------
  |  Branch (10006:17): [True: 0, False: 0]
  ------------------
10007|      0|                if (outPatchParam >= 0) {
  ------------------
  |  Branch (10007:21): [True: 0, False: 0]
  ------------------
10008|       |                    // Presently we only support one per ctrl pt input.
10009|      0|                    error(loc, "unimplemented: multiple output patches in patch constant function", "", "");
10010|      0|                    return;
10011|      0|                }
10012|      0|                outPatchParam = p;
10013|      0|            }
10014|       |
10015|      0|            if (biType != EbvNone) {
  ------------------
  |  Branch (10015:17): [True: 0, False: 0]
  ------------------
10016|      0|                TType* paramType = patchConstantFunction[p].type->clone();
10017|       |
10018|      0|                if (storage == EvqConstReadOnly) // treated identically to input
  ------------------
  |  Branch (10018:21): [True: 0, False: 0]
  ------------------
10019|      0|                    storage = EvqIn;
10020|       |
10021|       |                // Presently, the only non-built-in we support is InputPatch, which is treated as
10022|       |                // a pseudo-built-in.
10023|      0|                if (biType == EbvInputPatch) {
  ------------------
  |  Branch (10023:21): [True: 0, False: 0]
  ------------------
10024|      0|                    builtInTessLinkageSymbols[biType] = inputPatch;
10025|      0|                } else if (biType == EbvOutputPatch) {
  ------------------
  |  Branch (10025:28): [True: 0, False: 0]
  ------------------
10026|       |                    // Nothing...
10027|      0|                } else {
10028|       |                    // Use the original declaration type for the linkage
10029|      0|                    paramType->getQualifier().builtIn = biType;
10030|      0|                    if (biType == EbvTessLevelInner || biType == EbvTessLevelOuter)
  ------------------
  |  Branch (10030:25): [True: 0, False: 0]
  |  Branch (10030:56): [True: 0, False: 0]
  ------------------
10031|      0|                        paramType->getQualifier().patch = true;
10032|       |
10033|      0|                    if (notInEntryPoint.count(tInterstageIoData(biType, storage)) == 1)
  ------------------
  |  Branch (10033:25): [True: 0, False: 0]
  ------------------
10034|      0|                        addToLinkage(*paramType, patchConstantFunction[p].name, nullptr);
10035|      0|                }
10036|      0|            }
10037|      0|        }
10038|       |
10039|       |        // If we didn't find it because the shader made one, add our own.
10040|      0|        if (invocationIdSym == nullptr) {
  ------------------
  |  Branch (10040:13): [True: 0, False: 0]
  ------------------
10041|      0|            TType invocationIdType(EbtUint, EvqIn, 1);
10042|      0|            TString* invocationIdName = NewPoolTString("InvocationId");
10043|      0|            invocationIdType.getQualifier().builtIn = EbvInvocationId;
10044|      0|            addToLinkage(invocationIdType, invocationIdName, &invocationIdSym);
10045|      0|        }
10046|       |
10047|      0|        assert(invocationIdSym);
10048|      0|    }
10049|       |
10050|      0|    TIntermTyped* pcfArguments = nullptr;
10051|      0|    TVariable* perCtrlPtVar = nullptr;
10052|       |
10053|       |    // ================ Step 1B: Argument synthesis ================
10054|       |    // Create pcfArguments for synthesis of patchconstantfunction invocation
10055|      0|    {
10056|      0|        for (int p=0; p<pcfParamCount; ++p) {
  ------------------
  |  Branch (10056:23): [True: 0, False: 0]
  ------------------
10057|      0|            TIntermTyped* inputArg = nullptr;
10058|       |
10059|      0|            if (p == outPatchParam) {
  ------------------
  |  Branch (10059:17): [True: 0, False: 0]
  ------------------
10060|      0|                if (perCtrlPtVar == nullptr) {
  ------------------
  |  Branch (10060:21): [True: 0, False: 0]
  ------------------
10061|      0|                    perCtrlPtVar = makeInternalVariable(*patchConstantFunction[outPatchParam].name,
10062|      0|                                                        *patchConstantFunction[outPatchParam].type);
10063|       |
10064|      0|                    perCtrlPtVar->getWritableType().getQualifier().makeTemporary();
10065|      0|                }
10066|      0|                inputArg = intermediate.addSymbol(*perCtrlPtVar, loc);
10067|      0|            } else {
10068|       |                // find which built-in it is
10069|      0|                const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
10070|       |
10071|      0|                if (biType == EbvInputPatch && inputPatch == nullptr) {
  ------------------
  |  Branch (10071:21): [True: 0, False: 0]
  |  Branch (10071:48): [True: 0, False: 0]
  ------------------
10072|      0|                    error(loc, "unimplemented: PCF input patch without entry point input patch parameter", "", "");
10073|      0|                    return;
10074|      0|                }
10075|       |
10076|      0|                inputArg = findTessLinkageSymbol(biType);
10077|       |
10078|      0|                if (inputArg == nullptr) {
  ------------------
  |  Branch (10078:21): [True: 0, False: 0]
  ------------------
10079|      0|                    error(loc, "unable to find patch constant function built-in variable", "", "");
10080|      0|                    return;
10081|      0|                }
10082|      0|            }
10083|       |
10084|      0|            if (pcfParamCount == 1)
  ------------------
  |  Branch (10084:17): [True: 0, False: 0]
  ------------------
10085|      0|                pcfArguments = inputArg;
10086|      0|            else
10087|      0|                pcfArguments = intermediate.growAggregate(pcfArguments, inputArg);
10088|      0|        }
10089|      0|    }
10090|       |
10091|       |    // ================ Step 2: Synthesize call to PCF ================
10092|      0|    TIntermAggregate* pcfCallSequence = nullptr;
10093|      0|    TIntermTyped* pcfCall = nullptr;
10094|       |
10095|      0|    {
10096|       |        // Create a function call to the patchconstantfunction
10097|      0|        if (pcfArguments)
  ------------------
  |  Branch (10097:13): [True: 0, False: 0]
  ------------------
10098|      0|            addInputArgumentConversions(patchConstantFunction, pcfArguments);
10099|       |
10100|       |        // Synthetic call.
10101|      0|        pcfCall = intermediate.setAggregateOperator(pcfArguments, EOpFunctionCall, patchConstantFunction.getType(), loc);
10102|      0|        pcfCall->getAsAggregate()->setUserDefined();
10103|      0|        pcfCall->getAsAggregate()->setName(patchConstantFunction.getMangledName());
10104|      0|        intermediate.addToCallGraph(infoSink, intermediate.getEntryPointMangledName().c_str(),
10105|      0|                                    patchConstantFunction.getMangledName());
10106|       |
10107|      0|        if (pcfCall->getAsAggregate()) {
  ------------------
  |  Branch (10107:13): [True: 0, False: 0]
  ------------------
10108|      0|            TQualifierList& qualifierList = pcfCall->getAsAggregate()->getQualifierList();
10109|      0|            for (int i = 0; i < patchConstantFunction.getParamCount(); ++i) {
  ------------------
  |  Branch (10109:29): [True: 0, False: 0]
  ------------------
10110|      0|                TStorageQualifier qual = patchConstantFunction[i].type->getQualifier().storage;
10111|      0|                qualifierList.push_back(qual);
10112|      0|            }
10113|      0|            pcfCall = addOutputArgumentConversions(patchConstantFunction, *pcfCall->getAsOperator());
10114|      0|        }
10115|      0|    }
10116|       |
10117|       |    // ================ Step 2B: Per Control Point synthesis ================
10118|       |    // If there is per control point data, we must either emulate that with multiple
10119|       |    // invocations of the entry point to build up an array, or (TODO:) use a yet
10120|       |    // unavailable extension to look across the SIMD lanes.  This is the former
10121|       |    // as a placeholder for the latter.
10122|      0|    if (outPatchParam >= 0) {
  ------------------
  |  Branch (10122:9): [True: 0, False: 0]
  ------------------
10123|       |        // We must introduce a local temp variable of the type wanted by the PCF input.
10124|      0|        const int arraySize = patchConstantFunction[outPatchParam].type->getOuterArraySize();
10125|       |
10126|      0|        if (entryPointFunction->getType().getBasicType() == EbtVoid) {
  ------------------
  |  Branch (10126:13): [True: 0, False: 0]
  ------------------
10127|      0|            error(loc, "entry point must return a value for use with patch constant function", "", "");
10128|      0|            return;
10129|      0|        }
10130|       |
10131|       |        // Create calls to wrapped main to fill in the array.  We will substitute fixed values
10132|       |        // of invocation ID when calling the wrapped main.
10133|       |
10134|       |        // This is the type of the each member of the per ctrl point array.
10135|      0|        const TType derefType(perCtrlPtVar->getType(), 0);
10136|       |
10137|      0|        for (int cpt = 0; cpt < arraySize; ++cpt) {
  ------------------
  |  Branch (10137:27): [True: 0, False: 0]
  ------------------
10138|       |            // TODO: improve.  substr(1) here is to avoid the '@' that was grafted on but isn't in the symtab
10139|       |            // for this function.
10140|      0|            const TString origName = entryPointFunction->getName().substr(1);
10141|      0|            TFunction callee(&origName, TType(EbtVoid));
10142|      0|            TIntermTyped* callingArgs = nullptr;
10143|       |
10144|      0|            for (int i = 0; i < entryPointFunction->getParamCount(); i++) {
  ------------------
  |  Branch (10144:29): [True: 0, False: 0]
  ------------------
10145|      0|                TParameter& param = (*entryPointFunction)[i];
10146|      0|                TType& paramType = *param.type;
10147|       |
10148|      0|                if (paramType.getQualifier().isParamOutput()) {
  ------------------
  |  Branch (10148:21): [True: 0, False: 0]
  ------------------
10149|      0|                    error(loc, "unimplemented: entry point outputs in patch constant function invocation", "", "");
10150|      0|                    return;
10151|      0|                }
10152|       |
10153|      0|                if (paramType.getQualifier().isParamInput())  {
  ------------------
  |  Branch (10153:21): [True: 0, False: 0]
  ------------------
10154|      0|                    TIntermTyped* arg = nullptr;
10155|      0|                    if ((*entryPointFunction)[i].getDeclaredBuiltIn() == EbvInvocationId) {
  ------------------
  |  Branch (10155:25): [True: 0, False: 0]
  ------------------
10156|       |                        // substitute invocation ID with the array element ID
10157|      0|                        arg = intermediate.addConstantUnion(cpt, loc);
10158|      0|                    } else {
10159|      0|                        TVariable* argVar = makeInternalVariable(*param.name, *param.type);
10160|      0|                        argVar->getWritableType().getQualifier().makeTemporary();
10161|      0|                        arg = intermediate.addSymbol(*argVar);
10162|      0|                    }
10163|       |
10164|      0|                    handleFunctionArgument(&callee, callingArgs, arg);
10165|      0|                }
10166|      0|            }
10167|       |
10168|       |            // Call and assign to per ctrl point variable
10169|      0|            currentCaller = intermediate.getEntryPointMangledName().c_str();
10170|      0|            TIntermTyped* callReturn = handleFunctionCall(loc, &callee, callingArgs);
10171|      0|            TIntermTyped* index = intermediate.addConstantUnion(cpt, loc);
10172|      0|            TIntermSymbol* perCtrlPtSym = intermediate.addSymbol(*perCtrlPtVar, loc);
10173|      0|            TIntermTyped* element = intermediate.addIndex(EOpIndexDirect, perCtrlPtSym, index, loc);
10174|      0|            element->setType(derefType);
10175|      0|            element->setLoc(loc);
10176|       |
10177|      0|            pcfCallSequence = intermediate.growAggregate(pcfCallSequence,
10178|      0|                                                         handleAssign(loc, EOpAssign, element, callReturn));
10179|      0|        }
10180|      0|    }
10181|       |
10182|       |    // ================ Step 3: Create return Sequence ================
10183|       |    // Return sequence: copy PCF result to a temporary, then to shader output variable.
10184|      0|    if (pcfCall->getBasicType() != EbtVoid) {
  ------------------
  |  Branch (10184:9): [True: 0, False: 0]
  ------------------
10185|      0|        const TType* retType = &patchConstantFunction.getType();  // return type from the PCF
10186|      0|        TType outType; // output type that goes with the return type.
10187|      0|        outType.shallowCopy(*retType);
10188|       |
10189|       |        // substitute the output type
10190|      0|        const auto newLists = ioTypeMap.find(retType->getStruct());
10191|      0|        if (newLists != ioTypeMap.end())
  ------------------
  |  Branch (10191:13): [True: 0, False: 0]
  ------------------
10192|      0|            outType.setStruct(newLists->second.output);
10193|       |
10194|       |        // Substitute the top level type's built-in type
10195|      0|        if (patchConstantFunction.getDeclaredBuiltInType() != EbvNone)
  ------------------
  |  Branch (10195:13): [True: 0, False: 0]
  ------------------
10196|      0|            outType.getQualifier().builtIn = patchConstantFunction.getDeclaredBuiltInType();
10197|       |
10198|      0|        outType.getQualifier().patch = true; // make it a per-patch variable
10199|       |
10200|      0|        TVariable* pcfOutput = makeInternalVariable("@patchConstantOutput", outType);
10201|      0|        pcfOutput->getWritableType().getQualifier().storage = EvqVaryingOut;
10202|       |
10203|      0|        if (pcfOutput->getType().isStruct())
  ------------------
  |  Branch (10203:13): [True: 0, False: 0]
  ------------------
10204|      0|            flatten(*pcfOutput, false);
10205|       |
10206|      0|        assignToInterface(*pcfOutput);
10207|       |
10208|      0|        TIntermSymbol* pcfOutputSym = intermediate.addSymbol(*pcfOutput, loc);
10209|       |
10210|       |        // The call to the PCF is a complex R-value: we want to store it in a temp to avoid
10211|       |        // repeated calls to the PCF:
10212|      0|        TVariable* pcfCallResult = makeInternalVariable("@patchConstantResult", *retType);
10213|      0|        pcfCallResult->getWritableType().getQualifier().makeTemporary();
10214|       |
10215|      0|        TIntermSymbol* pcfResultVar = intermediate.addSymbol(*pcfCallResult, loc);
10216|      0|        TIntermNode* pcfResultAssign = handleAssign(loc, EOpAssign, pcfResultVar, pcfCall);
10217|      0|        TIntermNode* pcfResultToOut = handleAssign(loc, EOpAssign, pcfOutputSym,
10218|      0|                                                   intermediate.addSymbol(*pcfCallResult, loc));
10219|       |
10220|      0|        pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfResultAssign);
10221|      0|        pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfResultToOut);
10222|      0|    } else {
10223|      0|        pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfCall);
10224|      0|    }
10225|       |
10226|       |    // ================ Step 4: Barrier ================
10227|      0|    TIntermTyped* barrier = new TIntermAggregate(EOpBarrier);
10228|      0|    barrier->setLoc(loc);
10229|      0|    barrier->setType(TType(EbtVoid));
10230|      0|    epBodySeq.insert(epBodySeq.end(), barrier);
10231|       |
10232|       |    // ================ Step 5: Test on invocation ID ================
10233|      0|    TIntermTyped* zero = intermediate.addConstantUnion(0, loc, true);
10234|      0|    TIntermTyped* cmp =  intermediate.addBinaryNode(EOpEqual, invocationIdSym, zero, loc, TType(EbtBool));
10235|       |
10236|       |
10237|       |    // ================ Step 5B: Create if statement on Invocation ID == 0 ================
10238|      0|    intermediate.setAggregateOperator(pcfCallSequence, EOpSequence, TType(EbtVoid), loc);
10239|      0|    TIntermTyped* invocationIdTest = new TIntermSelection(cmp, pcfCallSequence, nullptr);
10240|      0|    invocationIdTest->setLoc(loc);
10241|       |
10242|       |    // add our test sequence before the return.
10243|      0|    epBodySeq.insert(epBodySeq.end(), invocationIdTest);
10244|      0|}
_ZN7glslang16HlslParseContext32removeUnusedStructBufferCountersEv:
10250|    211|{
10251|    211|    const auto endIt = std::remove_if(linkageSymbols.begin(), linkageSymbols.end(),
10252|    211|                                      [this](const TSymbol* sym) {
10253|    211|                                          const auto sbcIt = structBufferCounter.find(sym->getName());
10254|    211|                                          return sbcIt != structBufferCounter.end() && !sbcIt->second;
10255|    211|                                      });
10256|       |
10257|    211|    linkageSymbols.erase(endIt, linkageSymbols.end());
10258|    211|}
_ZN7glslang16HlslParseContext21fixTextureShadowModesEv:
10262|    211|{
10263|    211|    for (auto symbol = linkageSymbols.begin(); symbol != linkageSymbols.end(); ++symbol) {
  ------------------
  |  Branch (10263:48): [True: 0, False: 211]
  ------------------
10264|      0|        TSampler& sampler = (*symbol)->getWritableType().getSampler();
10265|       |
10266|      0|        if (sampler.isTexture()) {
  ------------------
  |  Branch (10266:13): [True: 0, False: 0]
  ------------------
10267|      0|            const auto shadowMode = textureShadowVariant.find((*symbol)->getUniqueId());
10268|      0|            if (shadowMode != textureShadowVariant.end()) {
  ------------------
  |  Branch (10268:17): [True: 0, False: 0]
  ------------------
10269|       |
10270|      0|                if (shadowMode->second->overloaded())
  ------------------
  |  Branch (10270:21): [True: 0, False: 0]
  ------------------
10271|       |                    // Texture needs legalization if it's been seen with both shadow and non-shadow modes.
10272|      0|                    intermediate.setNeedsLegalization();
10273|       |
10274|      0|                sampler.shadow = shadowMode->second->isShadowId((*symbol)->getUniqueId());
10275|      0|            }
10276|      0|        }
10277|      0|    }
10278|    211|}
_ZN7glslang16HlslParseContext21finalizeAppendMethodsEv:
10283|    211|{
10284|    211|    TSourceLoc loc;
10285|    211|    loc.init();
10286|       |
10287|       |    // Nothing to do: bypass test for valid stream output.
10288|    211|    if (gsAppends.empty())
  ------------------
  |  Branch (10288:9): [True: 211, False: 0]
  ------------------
10289|    211|        return;
10290|       |
10291|      0|    if (gsStreamOutput == nullptr) {
  ------------------
  |  Branch (10291:9): [True: 0, False: 0]
  ------------------
10292|      0|        error(loc, "unable to find output symbol for Append()", "", "");
10293|      0|        return;
10294|      0|    }
10295|       |
10296|       |    // Patch append sequences, now that we know the stream output symbol.
10297|      0|    for (auto append = gsAppends.begin(); append != gsAppends.end(); ++append) {
  ------------------
  |  Branch (10297:43): [True: 0, False: 0]
  ------------------
10298|      0|        append->node->getSequence()[0] =
10299|      0|            handleAssign(append->loc, EOpAssign,
10300|      0|                         intermediate.addSymbol(*gsStreamOutput, append->loc),
10301|      0|                         append->node->getSequence()[0]->getAsTyped());
10302|      0|    }
10303|      0|}
_ZN7glslang16HlslParseContext6finishEv:
10307|    211|{
10308|       |    // Error check: There was a dangling .mips operator.  These are not nested constructs in the grammar, so
10309|       |    // cannot be detected there.  This is not strictly needed in a non-validating parser; it's just helpful.
10310|    211|    if (! mipsOperatorMipArg.empty()) {
  ------------------
  |  Branch (10310:9): [True: 0, False: 211]
  ------------------
10311|      0|        error(mipsOperatorMipArg.back().loc, "unterminated mips operator:", "", "");
10312|      0|    }
10313|       |
10314|    211|    removeUnusedStructBufferCounters();
10315|    211|    addPatchConstantInvocation();
10316|    211|    fixTextureShadowModes();
10317|    211|    finalizeAppendMethods();
10318|       |
10319|       |    // Communicate out (esp. for command line) that we formed AST that will make
10320|       |    // illegal AST SPIR-V and it needs transforms to legalize it.
10321|    211|    if (intermediate.needsLegalization() && (messages & EShMsgHlslLegalization))
  ------------------
  |  Branch (10321:9): [True: 0, False: 211]
  |  Branch (10321:45): [True: 0, False: 0]
  ------------------
10322|      0|        infoSink.info << "WARNING: AST will form illegal SPIR-V; need to transform to legalize";
10323|       |
10324|    211|    TParseContextBase::finish();
10325|    211|}
hlslParseHelper.cpp:_ZZN7glslang16HlslParseContext19getLayoutFromTxTypeERKNS_10TSourceLocERKNS_5TTypeEENK3$_0clENS_13TLayoutFormatES8_S8_:
  206|  6.84k|    const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat {
  207|  6.84k|        if (intermediate.getNoStorageFormat())
  ------------------
  |  Branch (207:13): [True: 0, False: 6.84k]
  ------------------
  208|      0|            return ElfNone;
  209|       |
  210|  6.84k|        return components == 1 ? v1 :
  ------------------
  |  Branch (210:16): [True: 3.60k, False: 3.24k]
  ------------------
  211|  6.84k|               components == 2 ? v2 : v4;
  ------------------
  |  Branch (211:16): [True: 2.16k, False: 1.08k]
  ------------------
  212|  6.84k|    };
hlslParseHelper.cpp:_ZZN7glslang16HlslParseContext12handleAssignERKNS_10TSourceLocENS_9TOperatorEPNS_12TIntermTypedES6_ENK3$_2clEPKS5_:
 2885|      2|    const auto getSymbol = [](const TIntermTyped* node) -> const TIntermSymbol* {
 2886|      2|        const TIntermSymbol* symbolNode = node->getAsSymbolNode();
 2887|      2|        if (symbolNode != nullptr)
  ------------------
  |  Branch (2887:13): [True: 0, False: 2]
  ------------------
 2888|      0|            return symbolNode;
 2889|       |
 2890|      2|        const TIntermBinary* binaryNode = node->getAsBinaryNode();
 2891|      2|        if (binaryNode != nullptr && (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect))
  ------------------
  |  Branch (2891:13): [True: 2, False: 0]
  |  Branch (2891:39): [True: 0, False: 2]
  |  Branch (2891:80): [True: 0, False: 2]
  ------------------
 2892|      0|            return binaryNode->getLeft()->getAsSymbolNode();
 2893|       |
 2894|      2|        return nullptr;
 2895|      2|    };
hlslParseHelper.cpp:_ZZN7glslang16HlslParseContext12handleAssignERKNS_10TSourceLocENS_9TOperatorEPNS_12TIntermTypedES6_ENK3$_1clEPKS5_:
 2874|      2|    const auto indexesSplit = [this](const TIntermTyped* node) -> bool {
 2875|      2|        const TIntermBinary* binaryNode = node->getAsBinaryNode();
 2876|       |
 2877|      2|        if (binaryNode == nullptr)
  ------------------
  |  Branch (2877:13): [True: 0, False: 2]
  ------------------
 2878|      0|            return false;
 2879|       |
 2880|      2|        return (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect) &&
  ------------------
  |  Branch (2880:17): [True: 0, False: 2]
  |  Branch (2880:58): [True: 0, False: 2]
  ------------------
 2881|      0|               wasSplit(binaryNode->getLeft());
  ------------------
  |  Branch (2881:16): [True: 0, False: 0]
  ------------------
 2882|      2|    };
hlslParseHelper.cpp:_ZZN7glslang16HlslParseContext12handleAssignERKNS_10TSourceLocENS_9TOperatorEPNS_12TIntermTypedES6_ENK3$_3clEPKS5_:
 2898|      1|    const auto assignsClipPos = [this](const TIntermTyped* node) -> bool {
 2899|      1|        return node->getType().getQualifier().builtIn == EbvPosition &&
  ------------------
  |  Branch (2899:16): [True: 0, False: 1]
  ------------------
 2900|      0|               (language == EShLangVertex || language == EShLangGeometry || language == EShLangTessEvaluation);
  ------------------
  |  Branch (2900:17): [True: 0, False: 0]
  |  Branch (2900:46): [True: 0, False: 0]
  |  Branch (2900:77): [True: 0, False: 0]
  ------------------
 2901|      1|    };
hlslParseHelper.cpp:_ZZN7glslang16HlslParseContext13declareStructERKNS_10TSourceLocERNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeEENK3$_0clEbRPNS_7TVectorINS_8TTypeLocEEE:
 7902|      6|    const auto condAlloc = [](bool pred, TTypeList*& list) {
 7903|      6|        if (pred && list == nullptr)
  ------------------
  |  Branch (7903:13): [True: 0, False: 6]
  |  Branch (7903:21): [True: 0, False: 0]
  ------------------
 7904|      0|            list = new TTypeList;
 7905|      6|    };

_ZNK7glslang16HlslParseContext25getGlobalUniformBlockNameEv:
   60|      1|    virtual const char* getGlobalUniformBlockName() const override { return "$Global"; }
_ZNK7glslang16HlslParseContext23setUniformBlockDefaultsERNS_5TTypeE:
   62|      1|    {
   63|      1|        block.getQualifier().layoutPacking = globalUniformDefaults.layoutPacking;
   64|      1|        block.getQualifier().layoutMatrix = globalUniformDefaults.layoutMatrix;
   65|      1|    }
_ZN7glslang16HlslParseContext20reservedPpErrorCheckERKNS_10TSourceLocEPKcS5_:
   67|     12|    void reservedPpErrorCheck(const TSourceLoc&, const char* /*name*/, const char* /*op*/) override { }
_ZN7glslang16HlslParseContext21lineContinuationCheckERKNS_10TSourceLocEb:
   68|  14.2k|    bool lineContinuationCheck(const TSourceLoc&, bool /*endOfComment*/) override { return true; }
_ZNK7glslang16HlslParseContext30lineDirectiveShouldSetNextLineEv:
   69|      1|    bool lineDirectiveShouldSetNextLine() const override { return true; }
_ZN7glslang16HlslParseContext25getAnnotationNestingLevelEv:
  172|     12|    int getAnnotationNestingLevel() { return annotationNestingLevel; }
_ZN7glslang16HlslParseContext9pushScopeEv:
  173|      2|    void pushScope()         { symbolTable.push(); }
_ZN7glslang16HlslParseContext8popScopeEv:
  174|      2|    void popScope()          { symbolTable.pop(nullptr); }
_ZN7glslang16HlslParseContext12popThisScopeEv:
  177|      2|    void popThisScope()      { symbolTable.pop(nullptr); }
_ZN7glslang16HlslParseContext21beginParameterParsingERNS_9TFunctionE:
  189|   480k|    {
  190|   480k|        parsingEntrypointParameters = isEntrypointName(function.getName());
  191|   480k|    }
_ZN7glslang16HlslParseContext16isEntrypointNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  252|   480k|    bool isEntrypointName(const TString& name) { return name.compare(intermediate.getEntryPointName().c_str()) == 0; }
_ZNK7glslang16HlslParseContext18isStructBufferTypeERKNS_5TTypeE:
  309|      1|    bool isStructBufferType(const TType& type) const { return getStructBufferContentType(type) != nullptr; }
_ZN7glslang16HlslParseContext20isClipOrCullDistanceERKNS_10TQualifierE:
  328|      2|    static bool isClipOrCullDistance(const TQualifier& qual) { return isClipOrCullDistance(qual.builtIn); }
_ZN7glslang16HlslParseContext20isClipOrCullDistanceERKNS_5TTypeE:
  329|      2|    static bool isClipOrCullDistance(const TType& type) { return isClipOrCullDistance(type.getQualifier()); }

_ZN7glslang22TBuiltInParseablesHlslC2Ev:
  390|    240|{
  391|    240|}
_ZN7glslang22TBuiltInParseablesHlsl17createMatTimesMatEv:
  398|    120|{
  399|    120|    TString& s = commonBuiltins;
  400|       |
  401|    600|    for (int xRows = 1; xRows <=4; xRows++) {
  ------------------
  |  Branch (401:25): [True: 480, False: 120]
  ------------------
  402|  2.40k|        for (int xCols = 1; xCols <=4; xCols++) {
  ------------------
  |  Branch (402:29): [True: 1.92k, False: 480]
  ------------------
  403|  1.92k|            const int yRows = xCols;
  404|  9.60k|            for (int yCols = 1; yCols <=4; yCols++) {
  ------------------
  |  Branch (404:33): [True: 7.68k, False: 1.92k]
  ------------------
  405|  7.68k|                const int retRows = xRows;
  406|  7.68k|                const int retCols = yCols;
  407|       |
  408|       |                // Create a mat * mat of the appropriate dimensions
  409|  7.68k|                AppendTypeName(s, "M", "F", retRows, retCols);  // add return type
  410|  7.68k|                s.append(" ");                                  // space between type and name
  411|  7.68k|                s.append("mul");                                // intrinsic name
  412|  7.68k|                s.append("(");                                  // open paren
  413|       |
  414|  7.68k|                AppendTypeName(s, "M", "F", xRows, xCols);      // add X input
  415|  7.68k|                s.append(", ");
  416|  7.68k|                AppendTypeName(s, "M", "F", yRows, yCols);      // add Y input
  417|       |
  418|  7.68k|                s.append(");\n");                               // close paren
  419|  7.68k|            }
  420|       |
  421|       |            // Create M*V
  422|  1.92k|            AppendTypeName(s, "V", "F", xRows, 1);          // add return type
  423|  1.92k|            s.append(" ");                                  // space between type and name
  424|  1.92k|            s.append("mul");                                // intrinsic name
  425|  1.92k|            s.append("(");                                  // open paren
  426|       |
  427|  1.92k|            AppendTypeName(s, "M", "F", xRows, xCols);      // add X input
  428|  1.92k|            s.append(", ");
  429|  1.92k|            AppendTypeName(s, "V", "F", xCols, 1);          // add Y input
  430|       |
  431|  1.92k|            s.append(");\n");                               // close paren
  432|       |
  433|       |            // Create V*M
  434|  1.92k|            AppendTypeName(s, "V", "F", xCols, 1);          // add return type
  435|  1.92k|            s.append(" ");                                  // space between type and name
  436|  1.92k|            s.append("mul");                                // intrinsic name
  437|  1.92k|            s.append("(");                                  // open paren
  438|       |
  439|  1.92k|            AppendTypeName(s, "V", "F", xRows, 1);          // add Y input
  440|  1.92k|            s.append(", ");
  441|  1.92k|            AppendTypeName(s, "M", "F", xRows, xCols);      // add X input
  442|       |
  443|  1.92k|            s.append(");\n");                               // close paren
  444|  1.92k|        }
  445|    480|    }
  446|    120|}
_ZN7glslang22TBuiltInParseablesHlsl10initializeEi8EProfileRKNS_10SpvVersionE:
  457|    120|{
  458|    120|    static const EShLanguageMask EShLangAll    = EShLanguageMask(EShLangCount - 1);
  459|       |
  460|       |    // These are the actual stage masks defined in the documentation, in case they are
  461|       |    // needed for future validation.  For now, they are commented out, and set below
  462|       |    // to EShLangAll, to allow any intrinsic to be used in any shader, which is legal
  463|       |    // if it is not called.
  464|       |    //
  465|       |    // static const EShLanguageMask EShLangPSCS   = EShLanguageMask(EShLangFragmentMask | EShLangComputeMask);
  466|       |    // static const EShLanguageMask EShLangVSPSGS = EShLanguageMask(EShLangVertexMask | EShLangFragmentMask | EShLangGeometryMask);
  467|       |    // static const EShLanguageMask EShLangCS     = EShLangComputeMask;
  468|       |    // static const EShLanguageMask EShLangPS     = EShLangFragmentMask;
  469|       |    // static const EShLanguageMask EShLangHS     = EShLangTessControlMask;
  470|       |
  471|       |    // This set uses EShLangAll for everything.
  472|    120|    static const EShLanguageMask EShLangPSCS   = EShLangAll;
  473|    120|    static const EShLanguageMask EShLangVSPSGS = EShLangAll;
  474|    120|    static const EShLanguageMask EShLangCS     = EShLangAll;
  475|    120|    static const EShLanguageMask EShLangPS     = EShLangAll;
  476|    120|    static const EShLanguageMask EShLangHS     = EShLangAll;
  477|    120|    static const EShLanguageMask EShLangGS     = EShLangAll;
  478|       |
  479|       |    // This structure encodes the prototype information for each HLSL intrinsic.
  480|       |    // Because explicit enumeration would be cumbersome, it's procedurally generated.
  481|       |    // orderKey can be:
  482|       |    //   S = scalar, V = vector, M = matrix, - = void
  483|       |    // typekey can be:
  484|       |    //   D = double, F = float, U = uint, I = int, B = bool, S = sampler, s = shadowSampler, M = uint64_t, L = int64_t
  485|       |    // An empty order or type key repeats the first one.  E.g: SVM,, means 3 args each of SVM.
  486|       |    // '>' as first letter of order creates an output parameter
  487|       |    // '<' as first letter of order creates an input parameter
  488|       |    // '^' as first letter of order takes transpose dimensions
  489|       |    // '%' as first letter of order creates texture of given F/I/U type (texture, itexture, etc)
  490|       |    // '@' as first letter of order creates arrayed texture of given type
  491|       |    // '$' / '&' as first letter of order creates 2DMS / 2DMSArray textures
  492|       |    // '*' as first letter of order creates buffer object
  493|       |    // '!' as first letter of order creates image object
  494|       |    // '#' as first letter of order creates arrayed image object
  495|       |    // '~' as first letter of order creates an image buffer object
  496|       |    // '[' / ']' as first letter of order creates a SubpassInput/SubpassInputMS object
  497|       |
  498|    120|    static const struct {
  499|    120|        const char*   name;      // intrinsic name
  500|    120|        const char*   retOrder;  // return type key: empty matches order of 1st argument
  501|    120|        const char*   retType;   // return type key: empty matches type of 1st argument
  502|    120|        const char*   argOrder;  // argument order key
  503|    120|        const char*   argType;   // argument type key
  504|    120|        unsigned int  stage;     // stage mask
  505|    120|        bool          method;    // true if it's a method.
  506|    120|    } hlslIntrinsics[] = {
  507|       |        // name                               retOrd   retType    argOrder          argType          stage mask     method
  508|       |        // ----------------------------------------------------------------------------------------------------------------
  509|    120|        { "abort",                            nullptr, nullptr,   "-",              "-",             EShLangAll,    false },
  510|    120|        { "abs",                              nullptr, nullptr,   "SVM",            "DFUI",          EShLangAll,    false },
  511|    120|        { "acos",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  512|    120|        { "all",                              "S",    "B",        "SVM",            "BFIU",          EShLangAll,    false },
  513|    120|        { "AllMemoryBarrier",                 nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
  514|    120|        { "AllMemoryBarrierWithGroupSync",    nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
  515|    120|        { "any",                              "S",     "B",       "SVM",            "BFIU",          EShLangAll,    false },
  516|    120|        { "asdouble",                         "S",     "D",       "S,",             "UI,",           EShLangAll,    false },
  517|    120|        { "asdouble",                         "V2",    "D",       "V2,",            "UI,",           EShLangAll,    false },
  518|    120|        { "asfloat",                          nullptr, "F",       "SVM",            "BFIU",          EShLangAll,    false },
  519|    120|        { "asin",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  520|    120|        { "asint",                            nullptr, "I",       "SVM",            "FIU",           EShLangAll,    false },
  521|    120|        { "asuint",                           nullptr, "U",       "SVM",            "FIU",           EShLangAll,    false },
  522|    120|        { "atan",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  523|    120|        { "atan2",                            nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
  524|    120|        { "ceil",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  525|    120|        { "CheckAccessFullyMapped",           "S",     "B" ,      "S",              "U",             EShLangPSCS,   false },
  526|    120|        { "clamp",                            nullptr, nullptr,   "SVM,,",          "FUI,,",         EShLangAll,    false },
  527|    120|        { "clip",                             "-",     "-",       "SVM",            "FUI",           EShLangPS,     false },
  528|    120|        { "cos",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  529|    120|        { "cosh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  530|    120|        { "countbits",                        nullptr, nullptr,   "SV",             "UI",            EShLangAll,    false },
  531|    120|        { "cross",                            nullptr, nullptr,   "V3,",            "F,",            EShLangAll,    false },
  532|    120|        { "D3DCOLORtoUBYTE4",                 "V4",    "I",       "V4",             "F",             EShLangAll,    false },
  533|    120|        { "ddx",                              nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  534|    120|        { "ddx_coarse",                       nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  535|    120|        { "ddx_fine",                         nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  536|    120|        { "ddy",                              nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  537|    120|        { "ddy_coarse",                       nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  538|    120|        { "ddy_fine",                         nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  539|    120|        { "degrees",                          nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  540|    120|        { "determinant",                      "S",     "F",       "M",              "F",             EShLangAll,    false },
  541|    120|        { "DeviceMemoryBarrier",              nullptr, nullptr,   "-",              "-",             EShLangPSCS,   false },
  542|    120|        { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
  543|    120|        { "distance",                         "S",     "F",       "SV,",            "F,",            EShLangAll,    false },
  544|    120|        { "dot",                              "S",     nullptr,   "SV,",            "FI,",           EShLangAll,    false },
  545|    120|        { "dst",                              nullptr, nullptr,   "V4,",            "F,",            EShLangAll,    false },
  546|       |        // { "errorf",                           "-",     "-",       "",             "",             EShLangAll,    false }, TODO: varargs
  547|    120|        { "EvaluateAttributeAtCentroid",      nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  548|    120|        { "EvaluateAttributeAtSample",        nullptr, nullptr,   "SVM,S",          "F,U",           EShLangPS,     false },
  549|    120|        { "EvaluateAttributeSnapped",         nullptr, nullptr,   "SVM,V2",         "F,I",           EShLangPS,     false },
  550|    120|        { "exp",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  551|    120|        { "exp2",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  552|    120|        { "f16tof32",                         nullptr, "F",       "SV",             "U",             EShLangAll,    false },
  553|    120|        { "f32tof16",                         nullptr, "U",       "SV",             "F",             EShLangAll,    false },
  554|    120|        { "faceforward",                      nullptr, nullptr,   "V,,",            "F,,",           EShLangAll,    false },
  555|    120|        { "firstbithigh",                     nullptr, nullptr,   "SV",             "UI",            EShLangAll,    false },
  556|    120|        { "firstbitlow",                      nullptr, nullptr,   "SV",             "UI",            EShLangAll,    false },
  557|    120|        { "floor",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  558|    120|        { "fma",                              nullptr, nullptr,   "SVM,,",          "D,,",           EShLangAll,    false },
  559|    120|        { "fmod",                             nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
  560|    120|        { "frac",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  561|    120|        { "frexp",                            nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
  562|    120|        { "fwidth",                           nullptr, nullptr,   "SVM",            "F",             EShLangPS,     false },
  563|    120|        { "GetRenderTargetSampleCount",       "S",     "U",       "-",              "-",             EShLangAll,    false },
  564|    120|        { "GetRenderTargetSamplePosition",    "V2",    "F",       "V1",             "I",             EShLangAll,    false },
  565|    120|        { "GroupMemoryBarrier",               nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
  566|    120|        { "GroupMemoryBarrierWithGroupSync",  nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
  567|    120|        { "InterlockedAdd",                   "-",     "-",       "SVM,,>",         "FUI,,",          EShLangPSCS,   false },
  568|    120|        { "InterlockedAdd",                   "-",     "-",       "SVM,",           "FUI,",           EShLangPSCS,   false },
  569|    120|        { "InterlockedAnd",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
  570|    120|        { "InterlockedAnd",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS,   false },
  571|    120|        { "InterlockedCompareExchange",       "-",     "-",       "SVM,,,>",        "UI,,,",         EShLangPSCS,   false },
  572|    120|        { "InterlockedCompareStore",          "-",     "-",       "SVM,,",          "UI,,",          EShLangPSCS,   false },
  573|    120|        { "InterlockedExchange",              "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
  574|    120|        { "InterlockedMax",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
  575|    120|        { "InterlockedMax",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS,   false },
  576|    120|        { "InterlockedMin",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
  577|    120|        { "InterlockedMin",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS,   false },
  578|    120|        { "InterlockedOr",                    "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
  579|    120|        { "InterlockedOr",                    "-",     "-",       "SVM,",           "UI,",           EShLangPSCS,   false },
  580|    120|        { "InterlockedXor",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
  581|    120|        { "InterlockedXor",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS,   false },
  582|    120|        { "isfinite",                         nullptr, "B" ,      "SVM",            "F",             EShLangAll,    false },
  583|    120|        { "isinf",                            nullptr, "B" ,      "SVM",            "F",             EShLangAll,    false },
  584|    120|        { "isnan",                            nullptr, "B" ,      "SVM",            "F",             EShLangAll,    false },
  585|    120|        { "ldexp",                            nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
  586|    120|        { "length",                           "S",     "F",       "SV",             "F",             EShLangAll,    false },
  587|    120|        { "lerp",                             nullptr, nullptr,   "VM,,",           "F,,",           EShLangAll,    false },
  588|    120|        { "lerp",                             nullptr, nullptr,   "SVM,,S",         "F,,",           EShLangAll,    false },
  589|    120|        { "lit",                              "V4",    "F",       "S,,",            "F,,",           EShLangAll,    false },
  590|    120|        { "log",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  591|    120|        { "log10",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  592|    120|        { "log2",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  593|    120|        { "mad",                              nullptr, nullptr,   "SVM,,",          "DFUI,,",        EShLangAll,    false },
  594|    120|        { "max",                              nullptr, nullptr,   "SVM,",           "FIU,",          EShLangAll,    false },
  595|    120|        { "min",                              nullptr, nullptr,   "SVM,",           "FIU,",          EShLangAll,    false },
  596|    120|        { "modf",                             nullptr, nullptr,   "SVM,>",          "FIU,",          EShLangAll,    false },
  597|    120|        { "msad4",                            "V4",    "U",       "S,V2,V4",        "U,,",           EShLangAll,    false },
  598|    120|        { "mul",                              "S",     nullptr,   "S,S",            "FI,",           EShLangAll,    false },
  599|    120|        { "mul",                              "V",     nullptr,   "S,V",            "FI,",           EShLangAll,    false },
  600|    120|        { "mul",                              "M",     nullptr,   "S,M",            "FI,",           EShLangAll,    false },
  601|    120|        { "mul",                              "V",     nullptr,   "V,S",            "FI,",           EShLangAll,    false },
  602|    120|        { "mul",                              "S",     nullptr,   "V,V",            "FI,",           EShLangAll,    false },
  603|    120|        { "mul",                              "M",     nullptr,   "M,S",            "FI,",           EShLangAll,    false },
  604|       |        // mat*mat form of mul is handled in createMatTimesMat()
  605|    120|        { "noise",                            "S",     "F",       "V",              "F",             EShLangPS,     false },
  606|    120|        { "normalize",                        nullptr, nullptr,   "V",              "F",             EShLangAll,    false },
  607|    120|        { "pow",                              nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
  608|    120|        { "printf",                           nullptr, nullptr,   "-",              "-",             EShLangAll,    false },
  609|    120|        { "Process2DQuadTessFactorsAvg",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangHS,     false },
  610|    120|        { "Process2DQuadTessFactorsMax",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangHS,     false },
  611|    120|        { "Process2DQuadTessFactorsMin",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangHS,     false },
  612|    120|        { "ProcessIsolineTessFactors",        "-",     "-",       "S,,>,>",         "F,,,",          EShLangHS,     false },
  613|    120|        { "ProcessQuadTessFactorsAvg",        "-",     "-",       "V4,S,>V4,>V2,",  "F,,,,",         EShLangHS,     false },
  614|    120|        { "ProcessQuadTessFactorsMax",        "-",     "-",       "V4,S,>V4,>V2,",  "F,,,,",         EShLangHS,     false },
  615|    120|        { "ProcessQuadTessFactorsMin",        "-",     "-",       "V4,S,>V4,>V2,",  "F,,,,",         EShLangHS,     false },
  616|    120|        { "ProcessTriTessFactorsAvg",         "-",     "-",       "V3,S,>V3,>S,",   "F,,,,",         EShLangHS,     false },
  617|    120|        { "ProcessTriTessFactorsMax",         "-",     "-",       "V3,S,>V3,>S,",   "F,,,,",         EShLangHS,     false },
  618|    120|        { "ProcessTriTessFactorsMin",         "-",     "-",       "V3,S,>V3,>S,",   "F,,,,",         EShLangHS,     false },
  619|    120|        { "radians",                          nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  620|    120|        { "rcp",                              nullptr, nullptr,   "SVM",            "FD",            EShLangAll,    false },
  621|    120|        { "reflect",                          nullptr, nullptr,   "V,",             "F,",            EShLangAll,    false },
  622|    120|        { "refract",                          nullptr, nullptr,   "V,V,S",          "F,,",           EShLangAll,    false },
  623|    120|        { "reversebits",                      nullptr, nullptr,   "SV",             "UI",            EShLangAll,    false },
  624|    120|        { "round",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  625|    120|        { "rsqrt",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  626|    120|        { "saturate",                         nullptr, nullptr ,  "SVM",            "F",             EShLangAll,    false },
  627|    120|        { "sign",                             nullptr, nullptr,   "SVM",            "FI",            EShLangAll,    false },
  628|    120|        { "sin",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  629|    120|        { "sincos",                           "-",     "-",       "SVM,>,>",        "F,,",           EShLangAll,    false },
  630|    120|        { "sinh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  631|    120|        { "smoothstep",                       nullptr, nullptr,   "SVM,,",          "F,,",           EShLangAll,    false },
  632|    120|        { "sqrt",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  633|    120|        { "step",                             nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
  634|    120|        { "tan",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  635|    120|        { "tanh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  636|    120|        { "tex1D",                            "V4",    "F",       "S,S",            "S,F",           EShLangPS,     false },
  637|    120|        { "tex1D",                            "V4",    "F",       "S,S,V1,",        "S,F,,",         EShLangPS,     false },
  638|    120|        { "tex1Dbias",                        "V4",    "F",       "S,V4",           "S,F",           EShLangPS,     false },
  639|    120|        { "tex1Dgrad",                        "V4",    "F",       "S,,,",           "S,F,,",         EShLangPS,     false },
  640|    120|        { "tex1Dlod",                         "V4",    "F",       "S,V4",           "S,F",           EShLangPS,     false },
  641|    120|        { "tex1Dproj",                        "V4",    "F",       "S,V4",           "S,F",           EShLangPS,     false },
  642|    120|        { "tex2D",                            "V4",    "F",       "V2,",            "S,F",           EShLangPS,     false },
  643|    120|        { "tex2D",                            "V4",    "F",       "V2,,,",          "S,F,,",         EShLangPS,     false },
  644|    120|        { "tex2Dbias",                        "V4",    "F",       "V2,V4",          "S,F",           EShLangPS,     false },
  645|    120|        { "tex2Dgrad",                        "V4",    "F",       "V2,,,",          "S,F,,",         EShLangPS,     false },
  646|    120|        { "tex2Dlod",                         "V4",    "F",       "V2,V4",          "S,F",           EShLangAll,    false },
  647|    120|        { "tex2Dproj",                        "V4",    "F",       "V2,V4",          "S,F",           EShLangPS,     false },
  648|    120|        { "tex3D",                            "V4",    "F",       "V3,",            "S,F",           EShLangPS,     false },
  649|    120|        { "tex3D",                            "V4",    "F",       "V3,,,",          "S,F,,",         EShLangPS,     false },
  650|    120|        { "tex3Dbias",                        "V4",    "F",       "V3,V4",          "S,F",           EShLangPS,     false },
  651|    120|        { "tex3Dgrad",                        "V4",    "F",       "V3,,,",          "S,F,,",         EShLangPS,     false },
  652|    120|        { "tex3Dlod",                         "V4",    "F",       "V3,V4",          "S,F",           EShLangPS,     false },
  653|    120|        { "tex3Dproj",                        "V4",    "F",       "V3,V4",          "S,F",           EShLangPS,     false },
  654|    120|        { "texCUBE",                          "V4",    "F",       "V4,V3",          "S,F",           EShLangPS,     false },
  655|    120|        { "texCUBE",                          "V4",    "F",       "V4,V3,,",        "S,F,,",         EShLangPS,     false },
  656|    120|        { "texCUBEbias",                      "V4",    "F",       "V4,",            "S,F",           EShLangPS,     false },
  657|    120|        { "texCUBEgrad",                      "V4",    "F",       "V4,V3,,",        "S,F,,",         EShLangPS,     false },
  658|    120|        { "texCUBElod",                       "V4",    "F",       "V4,",            "S,F",           EShLangPS,     false },
  659|    120|        { "texCUBEproj",                      "V4",    "F",       "V4,",            "S,F",           EShLangPS,     false },
  660|    120|        { "transpose",                        "^M",    nullptr,   "M",              "FUIB",          EShLangAll,    false },
  661|    120|        { "trunc",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
  662|       |
  663|       |        // Texture object methods.  Return type can be overridden by shader declaration.
  664|       |        // !O = no offset, O = offset
  665|    120|        { "Sample",             /*!O*/        "V4",    nullptr,   "%@,S,V",         "FIU,S,F",        EShLangPS,    true },
  666|    120|        { "Sample",             /* O*/        "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",      EShLangPS,    true },
  667|       |
  668|    120|        { "SampleBias",         /*!O*/        "V4",    nullptr,   "%@,S,V,S",       "FIU,S,F,F",      EShLangPS,    true },
  669|    120|        { "SampleBias",         /* O*/        "V4",    nullptr,   "%@,S,V,S,V",     "FIU,S,F,F,I",    EShLangPS,    true },
  670|       |
  671|       |        // TODO: FXC accepts int/uint samplers here.  unclear what that means.
  672|    120|        { "SampleCmp",          /*!O*/        "S",     "F",       "%@,S,V,S",       "FIU,s,F,",       EShLangPS,    true },
  673|    120|        { "SampleCmp",          /* O*/        "S",     "F",       "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangPS,    true },
  674|       |
  675|       |        // TODO: FXC accepts int/uint samplers here.  unclear what that means.
  676|    120|        { "SampleCmpLevelZero", /*!O*/        "S",     "F",       "%@,S,V,S",       "FIU,s,F,F",      EShLangPS,    true },
  677|    120|        { "SampleCmpLevelZero", /* O*/        "S",     "F",       "%@,S,V,S,V",     "FIU,s,F,F,I",    EShLangPS,    true },
  678|       |
  679|    120|        { "SampleGrad",         /*!O*/        "V4",    nullptr,   "%@,S,V,,",       "FIU,S,F,,",      EShLangAll,   true },
  680|    120|        { "SampleGrad",         /* O*/        "V4",    nullptr,   "%@,S,V,,,",      "FIU,S,F,,,I",    EShLangAll,   true },
  681|       |
  682|    120|        { "SampleLevel",        /*!O*/        "V4",    nullptr,   "%@,S,V,S",       "FIU,S,F,",       EShLangAll,   true },
  683|    120|        { "SampleLevel",        /* O*/        "V4",    nullptr,   "%@,S,V,S,V",     "FIU,S,F,,I",     EShLangAll,   true },
  684|       |
  685|    120|        { "Load",               /*!O*/        "V4",    nullptr,   "%@,V",           "FIU,I",          EShLangAll,   true },
  686|    120|        { "Load",               /* O*/        "V4",    nullptr,   "%@,V,V",         "FIU,I,I",        EShLangAll,   true },
  687|    120|        { "Load", /* +sampleidex*/            "V4",    nullptr,   "$&,V,S",         "FIU,I,I",        EShLangAll,   true },
  688|    120|        { "Load", /* +samplindex, offset*/    "V4",    nullptr,   "$&,V,S,V",       "FIU,I,I,I",      EShLangAll,   true },
  689|       |
  690|       |        // RWTexture loads
  691|    120|        { "Load",                             "V4",    nullptr,   "!#,V",           "FIU,I",          EShLangAll,   true },
  692|       |        // (RW)Buffer loads
  693|    120|        { "Load",                             "V4",    nullptr,   "~*1,V",          "FIU,I",          EShLangAll,   true },
  694|       |
  695|    120|        { "Gather",             /*!O*/        "V4",    nullptr,   "%@,S,V",         "FIU,S,F",        EShLangAll,   true },
  696|    120|        { "Gather",             /* O*/        "V4",    nullptr,   "%@,S,V,V",       "FIU,S,F,I",      EShLangAll,   true },
  697|       |
  698|    120|        { "CalculateLevelOfDetail",           "S",     "F",       "%@,S,V",         "FUI,S,F",        EShLangPS,    true },
  699|    120|        { "CalculateLevelOfDetailUnclamped",  "S",     "F",       "%@,S,V",         "FUI,S,F",        EShLangPS,    true },
  700|       |
  701|    120|        { "GetSamplePosition",                "V2",    "F",       "$&2,S",          "FUI,I",          EShLangVSPSGS,true },
  702|       |
  703|       |        //
  704|       |        // UINT Width
  705|       |        // UINT MipLevel, UINT Width, UINT NumberOfLevels
  706|    120|        { "GetDimensions",   /* 1D */         "-",     "-",       "%!~1,>S",        "FUI,U",          EShLangAll,   true },
  707|    120|        { "GetDimensions",   /* 1D */         "-",     "-",       "%!~1,>S",        "FUI,F",          EShLangAll,   true },
  708|    120|        { "GetDimensions",   /* 1D */         "-",     "-",       "%1,S,>S,",       "FUI,U,,",        EShLangAll,   true },
  709|    120|        { "GetDimensions",   /* 1D */         "-",     "-",       "%1,S,>S,",       "FUI,U,F,",       EShLangAll,   true },
  710|       |
  711|       |        // UINT Width, UINT Elements
  712|       |        // UINT MipLevel, UINT Width, UINT Elements, UINT NumberOfLevels
  713|    120|        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@#1,>S,",        "FUI,U,",         EShLangAll,   true },
  714|    120|        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@#1,>S,",        "FUI,F,",         EShLangAll,   true },
  715|    120|        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@1,S,>S,,",      "FUI,U,,,",       EShLangAll,   true },
  716|    120|        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@1,S,>S,,",      "FUI,U,F,,",      EShLangAll,   true },
  717|       |
  718|       |        // UINT Width, UINT Height
  719|       |        // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels
  720|    120|        { "GetDimensions",   /* 2D */         "-",     "-",       "%!2,>S,",        "FUI,U,",         EShLangAll,   true },
  721|    120|        { "GetDimensions",   /* 2D */         "-",     "-",       "%!2,>S,",        "FUI,F,",         EShLangAll,   true },
  722|    120|        { "GetDimensions",   /* 2D */         "-",     "-",       "%2,S,>S,,",      "FUI,U,,,",       EShLangAll,   true },
  723|    120|        { "GetDimensions",   /* 2D */         "-",     "-",       "%2,S,>S,,",      "FUI,U,F,,",      EShLangAll,   true },
  724|       |
  725|       |        // UINT Width, UINT Height, UINT Elements
  726|       |        // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels
  727|    120|        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@#2,>S,,",       "FUI,U,,",        EShLangAll,   true },
  728|    120|        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@#2,>S,,",       "FUI,F,F,F",      EShLangAll,   true },
  729|    120|        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@2,S,>S,,,",     "FUI,U,,,,",      EShLangAll,   true },
  730|    120|        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@2,S,>S,,,",     "FUI,U,F,,,",     EShLangAll,   true },
  731|       |
  732|       |        // UINT Width, UINT Height, UINT Depth
  733|       |        // UINT MipLevel, UINT Width, UINT Height, UINT Depth, UINT NumberOfLevels
  734|    120|        { "GetDimensions",   /* 3D */         "-",     "-",       "%!3,>S,,",       "FUI,U,,",        EShLangAll,   true },
  735|    120|        { "GetDimensions",   /* 3D */         "-",     "-",       "%!3,>S,,",       "FUI,F,,",        EShLangAll,   true },
  736|    120|        { "GetDimensions",   /* 3D */         "-",     "-",       "%3,S,>S,,,",     "FUI,U,,,,",      EShLangAll,   true },
  737|    120|        { "GetDimensions",   /* 3D */         "-",     "-",       "%3,S,>S,,,",     "FUI,U,F,,,",     EShLangAll,   true },
  738|       |
  739|       |        // UINT Width, UINT Height
  740|       |        // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels
  741|    120|        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,>S,",         "FUI,U,",         EShLangAll,   true },
  742|    120|        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,>S,",         "FUI,F,",         EShLangAll,   true },
  743|    120|        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,S,>S,,",      "FUI,U,,,",       EShLangAll,   true },
  744|    120|        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,S,>S,,",      "FUI,U,F,,",      EShLangAll,   true },
  745|       |
  746|       |        // UINT Width, UINT Height, UINT Elements
  747|       |        // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels
  748|    120|        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,>S,,",        "FUI,U,,",        EShLangAll,   true },
  749|    120|        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,>S,,",        "FUI,F,,",        EShLangAll,   true },
  750|    120|        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,S,>S,,,",     "FUI,U,,,,",      EShLangAll,   true },
  751|    120|        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,S,>S,,,",     "FUI,U,F,,,",     EShLangAll,   true },
  752|       |
  753|       |        // UINT Width, UINT Height, UINT Samples
  754|       |        // UINT Width, UINT Height, UINT Elements, UINT Samples
  755|    120|        { "GetDimensions",   /* 2DMS */       "-",     "-",       "$2,>S,,",        "FUI,U,,",        EShLangAll,   true },
  756|    120|        { "GetDimensions",   /* 2DMS */       "-",     "-",       "$2,>S,,",        "FUI,U,,",        EShLangAll,   true },
  757|    120|        { "GetDimensions",   /* 2DMSArray */  "-",     "-",       "&2,>S,,,",       "FUI,U,,,",       EShLangAll,   true },
  758|    120|        { "GetDimensions",   /* 2DMSArray */  "-",     "-",       "&2,>S,,,",       "FUI,U,,,",       EShLangAll,   true },
  759|       |
  760|       |        // SM5 texture methods
  761|    120|        { "GatherRed",       /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",        EShLangAll,   true },
  762|    120|        { "GatherRed",       /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",      EShLangAll,   true },
  763|    120|        { "GatherRed",       /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",    EShLangAll,   true },
  764|    120|        { "GatherRed",       /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",   EShLangAll,   true },
  765|    120|        { "GatherRed",       /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U", EShLangAll,   true },
  766|       |
  767|    120|        { "GatherGreen",     /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",        EShLangAll,   true },
  768|    120|        { "GatherGreen",     /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",      EShLangAll,   true },
  769|    120|        { "GatherGreen",     /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",    EShLangAll,   true },
  770|    120|        { "GatherGreen",     /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",   EShLangAll,   true },
  771|    120|        { "GatherGreen",     /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U", EShLangAll,   true },
  772|       |
  773|    120|        { "GatherBlue",      /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",        EShLangAll,   true },
  774|    120|        { "GatherBlue",      /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",      EShLangAll,   true },
  775|    120|        { "GatherBlue",      /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",    EShLangAll,   true },
  776|    120|        { "GatherBlue",      /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",   EShLangAll,   true },
  777|    120|        { "GatherBlue",      /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U", EShLangAll,   true },
  778|       |
  779|    120|        { "GatherAlpha",     /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",        EShLangAll,   true },
  780|    120|        { "GatherAlpha",     /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",      EShLangAll,   true },
  781|    120|        { "GatherAlpha",     /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",    EShLangAll,   true },
  782|    120|        { "GatherAlpha",     /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",   EShLangAll,   true },
  783|    120|        { "GatherAlpha",     /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U", EShLangAll,   true },
  784|       |
  785|    120|        { "GatherCmp",       /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll,   true },
  786|    120|        { "GatherCmp",       /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll,   true },
  787|    120|        { "GatherCmp",       /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll,   true },
  788|    120|        { "GatherCmp",       /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll,   true },
  789|    120|        { "GatherCmp",       /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,V,S","FIU,s,F,,I,,,,U",EShLangAll,   true },
  790|       |
  791|    120|        { "GatherCmpRed",    /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll,   true },
  792|    120|        { "GatherCmpRed",    /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll,   true },
  793|    120|        { "GatherCmpRed",    /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll,   true },
  794|    120|        { "GatherCmpRed",    /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll,   true },
  795|    120|        { "GatherCmpRed",    /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,V,S","FIU,s,F,,I,,,,U",EShLangAll,   true },
  796|       |
  797|    120|        { "GatherCmpGreen",  /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll,   true },
  798|    120|        { "GatherCmpGreen",  /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll,   true },
  799|    120|        { "GatherCmpGreen",  /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll,   true },
  800|    120|        { "GatherCmpGreen",  /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll,   true },
  801|    120|        { "GatherCmpGreen",  /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll,   true },
  802|       |
  803|    120|        { "GatherCmpBlue",   /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll,   true },
  804|    120|        { "GatherCmpBlue",   /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll,   true },
  805|    120|        { "GatherCmpBlue",   /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll,   true },
  806|    120|        { "GatherCmpBlue",   /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll,   true },
  807|    120|        { "GatherCmpBlue",   /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll,   true },
  808|       |
  809|    120|        { "GatherCmpAlpha",  /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll,   true },
  810|    120|        { "GatherCmpAlpha",  /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll,   true },
  811|    120|        { "GatherCmpAlpha",  /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll,   true },
  812|    120|        { "GatherCmpAlpha",  /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll,   true },
  813|    120|        { "GatherCmpAlpha",  /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll,   true },
  814|       |
  815|       |        // geometry methods
  816|    120|        { "Append",                           "-",     "-",       "-",              "-",              EShLangGS ,   true },
  817|    120|        { "RestartStrip",                     "-",     "-",       "-",              "-",              EShLangGS ,   true },
  818|       |
  819|       |        // Methods for structurebuffers.  TODO: wildcard type matching.
  820|    120|        { "Load",                             nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  821|    120|        { "Load2",                            nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  822|    120|        { "Load3",                            nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  823|    120|        { "Load4",                            nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  824|    120|        { "Store",                            nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  825|    120|        { "Store2",                           nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  826|    120|        { "Store3",                           nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  827|    120|        { "Store4",                           nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  828|    120|        { "GetDimensions",                    nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  829|    120|        { "InterlockedAdd",                   nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  830|    120|        { "InterlockedAnd",                   nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  831|    120|        { "InterlockedCompareExchange",       nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  832|    120|        { "InterlockedCompareStore",          nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  833|    120|        { "InterlockedExchange",              nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  834|    120|        { "InterlockedMax",                   nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  835|    120|        { "InterlockedMin",                   nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  836|    120|        { "InterlockedOr",                    nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  837|    120|        { "InterlockedXor",                   nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  838|    120|        { "IncrementCounter",                 nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  839|    120|        { "DecrementCounter",                 nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  840|    120|        { "Consume",                          nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
  841|       |
  842|       |        // SM 6.0
  843|       |
  844|    120|        { "WaveIsFirstLane",                  "S",     "B",       "-",              "-",              EShLangPSCS,  false},
  845|    120|        { "WaveGetLaneCount",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
  846|    120|        { "WaveGetLaneIndex",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
  847|    120|        { "WaveActiveAnyTrue",                "S",     "B",       "S",              "B",              EShLangPSCS,  false},
  848|    120|        { "WaveActiveAllTrue",                "S",     "B",       "S",              "B",              EShLangPSCS,  false},
  849|    120|        { "WaveActiveBallot",                 "V4",    "U",       "S",              "B",              EShLangPSCS,  false},
  850|    120|        { "WaveReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
  851|    120|        { "WaveReadLaneFirst",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  852|    120|        { "WaveActiveAllEqual",               "S",     "B",       "SV",             "DFUI",           EShLangPSCS,  false},
  853|    120|        { "WaveActiveAllEqualBool",           "S",     "B",       "S",              "B",              EShLangPSCS,  false},
  854|    120|        { "WaveActiveCountBits",              "S",     "U",       "S",              "B",              EShLangPSCS,  false},
  855|       |
  856|    120|        { "WaveActiveSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  857|    120|        { "WaveActiveProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  858|    120|        { "WaveActiveBitAnd",                 nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  859|    120|        { "WaveActiveBitOr",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  860|    120|        { "WaveActiveBitXor",                 nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  861|    120|        { "WaveActiveMin",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  862|    120|        { "WaveActiveMax",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  863|    120|        { "WavePrefixSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  864|    120|        { "WavePrefixProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  865|    120|        { "WavePrefixCountBits",              "S",     "U",       "S",              "B",              EShLangPSCS,  false},
  866|    120|        { "QuadReadAcrossX",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  867|    120|        { "QuadReadAcrossY",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  868|    120|        { "QuadReadAcrossDiagonal",           nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
  869|    120|        { "QuadReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
  870|       |
  871|       |        // Methods for subpass input objects
  872|    120|        { "SubpassLoad",                      "V4",    nullptr,   "[",              "FIU",            EShLangPS,    true },
  873|    120|        { "SubpassLoad",                      "V4",    nullptr,   "],S",            "FIU,I",          EShLangPS,    true },
  874|       |
  875|       |        // Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet.
  876|    120|        { nullptr,                            nullptr, nullptr,   nullptr,      nullptr,  0, false },
  877|    120|    };
  878|       |
  879|       |    // Create prototypes for the intrinsics.  TODO: Avoid ranged based for until all compilers can handle it.
  880|  36.2k|    for (int icount = 0; hlslIntrinsics[icount].name; ++icount) {
  ------------------
  |  Branch (880:26): [True: 36.1k, False: 120]
  ------------------
  881|  36.1k|        const auto& intrinsic = hlslIntrinsics[icount];
  882|       |
  883|  36.1k|        for (int stage = 0; stage < EShLangCount; ++stage) {                                // for each stage...
  ------------------
  |  Branch (883:29): [True: 36.1k, False: 0]
  ------------------
  884|  36.1k|            if ((intrinsic.stage & (1<<stage)) == 0) // skip inapplicable stages
  ------------------
  |  Branch (884:17): [True: 0, False: 36.1k]
  ------------------
  885|      0|                continue;
  886|       |
  887|       |            // reference to either the common builtins, or stage specific builtins.
  888|  36.1k|            TString& s = (intrinsic.stage == EShLangAll) ? commonBuiltins : stageBuiltins[stage];
  ------------------
  |  Branch (888:26): [True: 36.1k, False: 0]
  ------------------
  889|       |
  890|   103k|            for (const char* argOrder = intrinsic.argOrder; !IsEndOfArg(argOrder); ++argOrder) { // for each order...
  ------------------
  |  Branch (890:61): [True: 67.0k, False: 36.1k]
  ------------------
  891|  67.0k|                const bool isTexture   = IsTextureType(*argOrder);
  892|  67.0k|                const bool isArrayed   = IsArrayed(*argOrder);
  893|  67.0k|                const bool isMS        = IsTextureMS(*argOrder);
  894|  67.0k|                const bool isBuffer    = IsBuffer(*argOrder);
  895|  67.0k|                const bool isImage     = IsImage(*argOrder);
  896|  67.0k|                const bool mipInCoord  = HasMipInCoord(intrinsic.name, isMS, isBuffer, isImage);
  897|  67.0k|                const int fixedVecSize = FixedVecSize(argOrder);
  898|  67.0k|                const int coordArg     = CoordinateArgPos(intrinsic.name, isTexture);
  899|       |
  900|       |                // calculate min and max vector and matrix dimensions
  901|  67.0k|                int dim0Min = 1;
  902|  67.0k|                int dim0Max = 1;
  903|  67.0k|                int dim1Min = 1;
  904|  67.0k|                int dim1Max = 1;
  905|       |
  906|  67.0k|                FindVectorMatrixBounds(argOrder, fixedVecSize, dim0Min, dim0Max, dim1Min, dim1Max);
  907|       |
  908|   209k|                for (const char* argType = intrinsic.argType; !IsEndOfArg(argType); ++argType) { // for each type...
  ------------------
  |  Branch (908:63): [True: 142k, False: 67.0k]
  ------------------
  909|   556k|                    for (int dim0 = dim0Min; dim0 <= dim0Max; ++dim0) {          // for each dim 0...
  ------------------
  |  Branch (909:46): [True: 414k, False: 142k]
  ------------------
  910|  1.02M|                        for (int dim1 = dim1Min; dim1 <= dim1Max; ++dim1) {      // for each dim 1...
  ------------------
  |  Branch (910:50): [True: 607k, False: 414k]
  ------------------
  911|   607k|                            const char* retOrder = intrinsic.retOrder ? intrinsic.retOrder : argOrder;
  ------------------
  |  Branch (911:52): [True: 355k, False: 252k]
  ------------------
  912|   607k|                            const char* retType  = intrinsic.retType  ? intrinsic.retType  : argType;
  ------------------
  |  Branch (912:52): [True: 193k, False: 414k]
  ------------------
  913|       |
  914|   607k|                            if (!IsValid(intrinsic.name, *retOrder, *retType, *argOrder, *argType, dim0, dim1))
  ------------------
  |  Branch (914:33): [True: 25.5k, False: 581k]
  ------------------
  915|  25.5k|                                continue;
  916|       |
  917|       |                            // Reject some forms of sample methods that don't exist.
  918|   581k|                            if (isTexture && IsIllegalSample(intrinsic.name, argOrder, dim0))
  ------------------
  |  Branch (918:33): [True: 207k, False: 374k]
  |  Branch (918:33): [True: 112k, False: 468k]
  |  Branch (918:46): [True: 112k, False: 94.6k]
  ------------------
  919|   112k|                                continue;
  920|       |
  921|   468k|                            AppendTypeName(s, retOrder, retType, dim0, dim1);  // add return type
  922|   468k|                            s.append(" ");                                     // space between type and name
  923|       |
  924|       |                            // methods have a prefix.  TODO: it would be better as an invalid identifier character,
  925|       |                            // but that requires a scanner change.
  926|   468k|                            if (intrinsic.method)
  ------------------
  |  Branch (926:33): [True: 100k, False: 368k]
  ------------------
  927|   100k|                                s.append(BUILTIN_PREFIX);
  ------------------
  |  |  513|   100k|#define BUILTIN_PREFIX "__BI_"
  ------------------
  928|       |
  929|   468k|                            s.append(intrinsic.name);                          // intrinsic name
  930|   468k|                            s.append("(");                                     // open paren
  931|       |
  932|   468k|                            const char* prevArgOrder = nullptr;
  933|   468k|                            const char* prevArgType = nullptr;
  934|       |
  935|       |                            // Append argument types, if any.
  936|  1.52M|                            for (int arg = 0; ; ++arg) {
  937|  1.52M|                                const char* nthArgOrder(NthArg(argOrder, arg));
  938|  1.52M|                                const char* nthArgType(NthArg(argType, arg));
  939|       |
  940|  1.52M|                                if (nthArgOrder == nullptr || nthArgType == nullptr)
  ------------------
  |  Branch (940:37): [True: 468k, False: 1.06M]
  |  Branch (940:63): [True: 0, False: 1.06M]
  ------------------
  941|   468k|                                    break;
  942|       |
  943|       |                                // cube textures use vec3 coordinates
  944|  1.06M|                                int argDim0 = isTexture && arg > 0 ? std::min(dim0, 3) : dim0;
  ------------------
  |  Branch (944:47): [True: 428k, False: 632k]
  |  Branch (944:60): [True: 333k, False: 94.6k]
  ------------------
  945|       |
  946|  1.06M|                                s.append(arg > 0 ? ", ": "");  // comma separator if needed
  ------------------
  |  Branch (946:42): [True: 591k, False: 468k]
  ------------------
  947|       |
  948|  1.06M|                                const char* orderBegin = nthArgOrder;
  949|  1.06M|                                nthArgOrder = IoParam(s, nthArgOrder);
  950|       |
  951|       |                                // Comma means use the previous argument order and type.
  952|  1.06M|                                HandleRepeatArg(nthArgOrder, prevArgOrder, orderBegin);
  953|  1.06M|                                HandleRepeatArg(nthArgType,  prevArgType, nthArgType);
  954|       |
  955|       |                                // In case the repeated arg has its own I/O marker
  956|  1.06M|                                nthArgOrder = IoParam(s, nthArgOrder);
  957|       |
  958|       |                                // arrayed textures have one extra coordinate dimension, except for
  959|       |                                // the CalculateLevelOfDetail family.
  960|  1.06M|                                if (isArrayed && arg == coordArg && !NoArrayCoord(intrinsic.name))
  ------------------
  |  Branch (960:37): [True: 201k, False: 858k]
  |  Branch (960:37): [True: 34.2k, False: 1.02M]
  |  Branch (960:50): [True: 36.3k, False: 165k]
  |  Branch (960:69): [True: 34.2k, False: 2.16k]
  ------------------
  961|  34.2k|                                    argDim0++;
  962|       |
  963|       |                                // Some texture methods use an addition arg dimension to hold mip
  964|  1.06M|                                if (arg == coordArg && mipInCoord)
  ------------------
  |  Branch (964:37): [True: 78.1k, False: 982k]
  |  Branch (964:56): [True: 3.60k, False: 74.5k]
  ------------------
  965|  3.60k|                                    argDim0++;
  966|       |
  967|       |                                // For textures, the 1D case isn't a 1-vector, but a scalar.
  968|  1.06M|                                if (isTexture && argDim0 == 1 && arg > 0 && *nthArgOrder == 'V')
  ------------------
  |  Branch (968:37): [True: 428k, False: 632k]
  |  Branch (968:50): [True: 58.6k, False: 369k]
  |  Branch (968:66): [True: 40.6k, False: 18.0k]
  |  Branch (968:77): [True: 14.7k, False: 25.9k]
  ------------------
  969|  14.7k|                                    nthArgOrder = "S";
  970|       |
  971|  1.06M|                                AppendTypeName(s, nthArgOrder, nthArgType, argDim0, dim1); // Add arguments
  972|  1.06M|                            }
  973|       |
  974|   468k|                            s.append(");\n");            // close paren and trailing semicolon
  975|   468k|                        } // dim 1 loop
  976|   414k|                    } // dim 0 loop
  977|   142k|                } // arg type loop
  978|       |
  979|       |                // skip over special characters
  980|  67.0k|                if (isTexture && isalpha(argOrder[1]))
  ------------------
  |  Branch (980:21): [True: 21.6k, False: 45.4k]
  |  Branch (980:34): [True: 0, False: 21.6k]
  ------------------
  981|      0|                    ++argOrder;
  982|  67.0k|                if (isdigit(argOrder[1]))
  ------------------
  |  Branch (982:21): [True: 7.92k, False: 59.1k]
  ------------------
  983|  7.92k|                    ++argOrder;
  984|  67.0k|            } // arg order loop
  985|       |
  986|  36.1k|            if (intrinsic.stage == EShLangAll) // common builtins are only added once.
  ------------------
  |  Branch (986:17): [True: 36.1k, False: 0]
  ------------------
  987|  36.1k|                break;
  988|  36.1k|        }
  989|  36.1k|    }
  990|       |
  991|    120|    createMatTimesMat(); // handle this case separately, for convenience
  992|       |
  993|       |    // printf("Common:\n%s\n",   getCommonString().c_str());
  994|       |    // printf("Frag:\n%s\n",     getStageString(EShLangFragment).c_str());
  995|       |    // printf("Vertex:\n%s\n",   getStageString(EShLangVertex).c_str());
  996|       |    // printf("Geo:\n%s\n",      getStageString(EShLangGeometry).c_str());
  997|       |    // printf("TessCtrl:\n%s\n", getStageString(EShLangTessControl).c_str());
  998|       |    // printf("TessEval:\n%s\n", getStageString(EShLangTessEvaluation).c_str());
  999|       |    // printf("Compute:\n%s\n",  getStageString(EShLangCompute).c_str());
 1000|    120|}
_ZN7glslang22TBuiltInParseablesHlsl10initializeERK16TBuiltInResourcei8EProfileRKNS_10SpvVersionE11EShLanguage:
 1011|    120|{
 1012|    120|}
_ZN7glslang22TBuiltInParseablesHlsl16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableE:
 1024|  1.68k|{
 1025|       |    // symbolTable.relateToOperator("abort",                       EOpAbort);
 1026|  1.68k|    symbolTable.relateToOperator("abs",                         EOpAbs);
 1027|  1.68k|    symbolTable.relateToOperator("acos",                        EOpAcos);
 1028|  1.68k|    symbolTable.relateToOperator("all",                         EOpAll);
 1029|  1.68k|    symbolTable.relateToOperator("AllMemoryBarrier",            EOpMemoryBarrier);
 1030|  1.68k|    symbolTable.relateToOperator("AllMemoryBarrierWithGroupSync", EOpAllMemoryBarrierWithGroupSync);
 1031|  1.68k|    symbolTable.relateToOperator("any",                         EOpAny);
 1032|  1.68k|    symbolTable.relateToOperator("asdouble",                    EOpAsDouble);
 1033|  1.68k|    symbolTable.relateToOperator("asfloat",                     EOpIntBitsToFloat);
 1034|  1.68k|    symbolTable.relateToOperator("asin",                        EOpAsin);
 1035|  1.68k|    symbolTable.relateToOperator("asint",                       EOpFloatBitsToInt);
 1036|  1.68k|    symbolTable.relateToOperator("asuint",                      EOpFloatBitsToUint);
 1037|  1.68k|    symbolTable.relateToOperator("atan",                        EOpAtan);
 1038|  1.68k|    symbolTable.relateToOperator("atan2",                       EOpAtan);
 1039|  1.68k|    symbolTable.relateToOperator("ceil",                        EOpCeil);
 1040|       |    // symbolTable.relateToOperator("CheckAccessFullyMapped");
 1041|  1.68k|    symbolTable.relateToOperator("clamp",                       EOpClamp);
 1042|  1.68k|    symbolTable.relateToOperator("clip",                        EOpClip);
 1043|  1.68k|    symbolTable.relateToOperator("cos",                         EOpCos);
 1044|  1.68k|    symbolTable.relateToOperator("cosh",                        EOpCosh);
 1045|  1.68k|    symbolTable.relateToOperator("countbits",                   EOpBitCount);
 1046|  1.68k|    symbolTable.relateToOperator("cross",                       EOpCross);
 1047|  1.68k|    symbolTable.relateToOperator("D3DCOLORtoUBYTE4",            EOpD3DCOLORtoUBYTE4);
 1048|  1.68k|    symbolTable.relateToOperator("ddx",                         EOpDPdx);
 1049|  1.68k|    symbolTable.relateToOperator("ddx_coarse",                  EOpDPdxCoarse);
 1050|  1.68k|    symbolTable.relateToOperator("ddx_fine",                    EOpDPdxFine);
 1051|  1.68k|    symbolTable.relateToOperator("ddy",                         EOpDPdy);
 1052|  1.68k|    symbolTable.relateToOperator("ddy_coarse",                  EOpDPdyCoarse);
 1053|  1.68k|    symbolTable.relateToOperator("ddy_fine",                    EOpDPdyFine);
 1054|  1.68k|    symbolTable.relateToOperator("degrees",                     EOpDegrees);
 1055|  1.68k|    symbolTable.relateToOperator("determinant",                 EOpDeterminant);
 1056|  1.68k|    symbolTable.relateToOperator("DeviceMemoryBarrier",         EOpDeviceMemoryBarrier);
 1057|  1.68k|    symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpDeviceMemoryBarrierWithGroupSync);
 1058|  1.68k|    symbolTable.relateToOperator("distance",                    EOpDistance);
 1059|  1.68k|    symbolTable.relateToOperator("dot",                         EOpDot);
 1060|  1.68k|    symbolTable.relateToOperator("dst",                         EOpDst);
 1061|       |    // symbolTable.relateToOperator("errorf",                      EOpErrorf);
 1062|  1.68k|    symbolTable.relateToOperator("EvaluateAttributeAtCentroid", EOpInterpolateAtCentroid);
 1063|  1.68k|    symbolTable.relateToOperator("EvaluateAttributeAtSample",   EOpInterpolateAtSample);
 1064|  1.68k|    symbolTable.relateToOperator("EvaluateAttributeSnapped",    EOpEvaluateAttributeSnapped);
 1065|  1.68k|    symbolTable.relateToOperator("exp",                         EOpExp);
 1066|  1.68k|    symbolTable.relateToOperator("exp2",                        EOpExp2);
 1067|  1.68k|    symbolTable.relateToOperator("f16tof32",                    EOpF16tof32);
 1068|  1.68k|    symbolTable.relateToOperator("f32tof16",                    EOpF32tof16);
 1069|  1.68k|    symbolTable.relateToOperator("faceforward",                 EOpFaceForward);
 1070|  1.68k|    symbolTable.relateToOperator("firstbithigh",                EOpFindMSB);
 1071|  1.68k|    symbolTable.relateToOperator("firstbitlow",                 EOpFindLSB);
 1072|  1.68k|    symbolTable.relateToOperator("floor",                       EOpFloor);
 1073|  1.68k|    symbolTable.relateToOperator("fma",                         EOpFma);
 1074|  1.68k|    symbolTable.relateToOperator("fmod",                        EOpMod);
 1075|  1.68k|    symbolTable.relateToOperator("frac",                        EOpFract);
 1076|  1.68k|    symbolTable.relateToOperator("frexp",                       EOpFrexp);
 1077|  1.68k|    symbolTable.relateToOperator("fwidth",                      EOpFwidth);
 1078|       |    // symbolTable.relateToOperator("GetRenderTargetSampleCount");
 1079|       |    // symbolTable.relateToOperator("GetRenderTargetSamplePosition");
 1080|  1.68k|    symbolTable.relateToOperator("GroupMemoryBarrier",          EOpWorkgroupMemoryBarrier);
 1081|  1.68k|    symbolTable.relateToOperator("GroupMemoryBarrierWithGroupSync", EOpWorkgroupMemoryBarrierWithGroupSync);
 1082|  1.68k|    symbolTable.relateToOperator("InterlockedAdd",              EOpInterlockedAdd);
 1083|  1.68k|    symbolTable.relateToOperator("InterlockedAnd",              EOpInterlockedAnd);
 1084|  1.68k|    symbolTable.relateToOperator("InterlockedCompareExchange",  EOpInterlockedCompareExchange);
 1085|  1.68k|    symbolTable.relateToOperator("InterlockedCompareStore",     EOpInterlockedCompareStore);
 1086|  1.68k|    symbolTable.relateToOperator("InterlockedExchange",         EOpInterlockedExchange);
 1087|  1.68k|    symbolTable.relateToOperator("InterlockedMax",              EOpInterlockedMax);
 1088|  1.68k|    symbolTable.relateToOperator("InterlockedMin",              EOpInterlockedMin);
 1089|  1.68k|    symbolTable.relateToOperator("InterlockedOr",               EOpInterlockedOr);
 1090|  1.68k|    symbolTable.relateToOperator("InterlockedXor",              EOpInterlockedXor);
 1091|  1.68k|    symbolTable.relateToOperator("isfinite",                    EOpIsFinite);
 1092|  1.68k|    symbolTable.relateToOperator("isinf",                       EOpIsInf);
 1093|  1.68k|    symbolTable.relateToOperator("isnan",                       EOpIsNan);
 1094|  1.68k|    symbolTable.relateToOperator("ldexp",                       EOpLdexp);
 1095|  1.68k|    symbolTable.relateToOperator("length",                      EOpLength);
 1096|  1.68k|    symbolTable.relateToOperator("lerp",                        EOpMix);
 1097|  1.68k|    symbolTable.relateToOperator("lit",                         EOpLit);
 1098|  1.68k|    symbolTable.relateToOperator("log",                         EOpLog);
 1099|  1.68k|    symbolTable.relateToOperator("log10",                       EOpLog10);
 1100|  1.68k|    symbolTable.relateToOperator("log2",                        EOpLog2);
 1101|  1.68k|    symbolTable.relateToOperator("mad",                         EOpFma);
 1102|  1.68k|    symbolTable.relateToOperator("max",                         EOpMax);
 1103|  1.68k|    symbolTable.relateToOperator("min",                         EOpMin);
 1104|  1.68k|    symbolTable.relateToOperator("modf",                        EOpModf);
 1105|       |    // symbolTable.relateToOperator("msad4",                       EOpMsad4);
 1106|  1.68k|    symbolTable.relateToOperator("mul",                         EOpGenMul);
 1107|       |    // symbolTable.relateToOperator("noise",                    EOpNoise); // TODO: check return type
 1108|  1.68k|    symbolTable.relateToOperator("normalize",                   EOpNormalize);
 1109|  1.68k|    symbolTable.relateToOperator("pow",                         EOpPow);
 1110|  1.68k|    symbolTable.relateToOperator("printf",                      EOpDebugPrintf);
 1111|       |    // symbolTable.relateToOperator("Process2DQuadTessFactorsAvg");
 1112|       |    // symbolTable.relateToOperator("Process2DQuadTessFactorsMax");
 1113|       |    // symbolTable.relateToOperator("Process2DQuadTessFactorsMin");
 1114|       |    // symbolTable.relateToOperator("ProcessIsolineTessFactors");
 1115|       |    // symbolTable.relateToOperator("ProcessQuadTessFactorsAvg");
 1116|       |    // symbolTable.relateToOperator("ProcessQuadTessFactorsMax");
 1117|       |    // symbolTable.relateToOperator("ProcessQuadTessFactorsMin");
 1118|       |    // symbolTable.relateToOperator("ProcessTriTessFactorsAvg");
 1119|       |    // symbolTable.relateToOperator("ProcessTriTessFactorsMax");
 1120|       |    // symbolTable.relateToOperator("ProcessTriTessFactorsMin");
 1121|  1.68k|    symbolTable.relateToOperator("radians",                     EOpRadians);
 1122|  1.68k|    symbolTable.relateToOperator("rcp",                         EOpRcp);
 1123|  1.68k|    symbolTable.relateToOperator("reflect",                     EOpReflect);
 1124|  1.68k|    symbolTable.relateToOperator("refract",                     EOpRefract);
 1125|  1.68k|    symbolTable.relateToOperator("reversebits",                 EOpBitFieldReverse);
 1126|  1.68k|    symbolTable.relateToOperator("round",                       EOpRound);
 1127|  1.68k|    symbolTable.relateToOperator("rsqrt",                       EOpInverseSqrt);
 1128|  1.68k|    symbolTable.relateToOperator("saturate",                    EOpSaturate);
 1129|  1.68k|    symbolTable.relateToOperator("sign",                        EOpSign);
 1130|  1.68k|    symbolTable.relateToOperator("sin",                         EOpSin);
 1131|  1.68k|    symbolTable.relateToOperator("sincos",                      EOpSinCos);
 1132|  1.68k|    symbolTable.relateToOperator("sinh",                        EOpSinh);
 1133|  1.68k|    symbolTable.relateToOperator("smoothstep",                  EOpSmoothStep);
 1134|  1.68k|    symbolTable.relateToOperator("sqrt",                        EOpSqrt);
 1135|  1.68k|    symbolTable.relateToOperator("step",                        EOpStep);
 1136|  1.68k|    symbolTable.relateToOperator("tan",                         EOpTan);
 1137|  1.68k|    symbolTable.relateToOperator("tanh",                        EOpTanh);
 1138|  1.68k|    symbolTable.relateToOperator("tex1D",                       EOpTexture);
 1139|  1.68k|    symbolTable.relateToOperator("tex1Dbias",                   EOpTextureBias);
 1140|  1.68k|    symbolTable.relateToOperator("tex1Dgrad",                   EOpTextureGrad);
 1141|  1.68k|    symbolTable.relateToOperator("tex1Dlod",                    EOpTextureLod);
 1142|  1.68k|    symbolTable.relateToOperator("tex1Dproj",                   EOpTextureProj);
 1143|  1.68k|    symbolTable.relateToOperator("tex2D",                       EOpTexture);
 1144|  1.68k|    symbolTable.relateToOperator("tex2Dbias",                   EOpTextureBias);
 1145|  1.68k|    symbolTable.relateToOperator("tex2Dgrad",                   EOpTextureGrad);
 1146|  1.68k|    symbolTable.relateToOperator("tex2Dlod",                    EOpTextureLod);
 1147|  1.68k|    symbolTable.relateToOperator("tex2Dproj",                   EOpTextureProj);
 1148|  1.68k|    symbolTable.relateToOperator("tex3D",                       EOpTexture);
 1149|  1.68k|    symbolTable.relateToOperator("tex3Dbias",                   EOpTextureBias);
 1150|  1.68k|    symbolTable.relateToOperator("tex3Dgrad",                   EOpTextureGrad);
 1151|  1.68k|    symbolTable.relateToOperator("tex3Dlod",                    EOpTextureLod);
 1152|  1.68k|    symbolTable.relateToOperator("tex3Dproj",                   EOpTextureProj);
 1153|  1.68k|    symbolTable.relateToOperator("texCUBE",                     EOpTexture);
 1154|  1.68k|    symbolTable.relateToOperator("texCUBEbias",                 EOpTextureBias);
 1155|  1.68k|    symbolTable.relateToOperator("texCUBEgrad",                 EOpTextureGrad);
 1156|  1.68k|    symbolTable.relateToOperator("texCUBElod",                  EOpTextureLod);
 1157|  1.68k|    symbolTable.relateToOperator("texCUBEproj",                 EOpTextureProj);
 1158|  1.68k|    symbolTable.relateToOperator("transpose",                   EOpTranspose);
 1159|  1.68k|    symbolTable.relateToOperator("trunc",                       EOpTrunc);
 1160|       |
 1161|       |    // Texture methods
 1162|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Sample",                      EOpMethodSample);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1163|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "SampleBias",                  EOpMethodSampleBias);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1164|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "SampleCmp",                   EOpMethodSampleCmp);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1165|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "SampleCmpLevelZero",          EOpMethodSampleCmpLevelZero);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1166|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "SampleGrad",                  EOpMethodSampleGrad);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1167|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "SampleLevel",                 EOpMethodSampleLevel);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1168|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Load",                        EOpMethodLoad);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1169|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GetDimensions",               EOpMethodGetDimensions);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1170|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GetSamplePosition",           EOpMethodGetSamplePosition);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1171|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Gather",                      EOpMethodGather);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1172|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "CalculateLevelOfDetail",      EOpMethodCalculateLevelOfDetail);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1173|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "CalculateLevelOfDetailUnclamped", EOpMethodCalculateLevelOfDetailUnclamped);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1174|       |
 1175|       |    // Structure buffer methods (excluding associations already made above for texture methods w/ same name)
 1176|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Load2",                       EOpMethodLoad2);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1177|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Load3",                       EOpMethodLoad3);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1178|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Load4",                       EOpMethodLoad4);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1179|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Store",                       EOpMethodStore);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1180|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Store2",                      EOpMethodStore2);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1181|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Store3",                      EOpMethodStore3);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1182|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Store4",                      EOpMethodStore4);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1183|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "IncrementCounter",            EOpMethodIncrementCounter);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1184|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "DecrementCounter",            EOpMethodDecrementCounter);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1185|       |    // Append is also a GS method: we don't add it twice
 1186|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Consume",                     EOpMethodConsume);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1187|       |
 1188|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedAdd",              EOpInterlockedAdd);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1189|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedAnd",              EOpInterlockedAnd);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1190|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedCompareExchange",  EOpInterlockedCompareExchange);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1191|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedCompareStore",     EOpInterlockedCompareStore);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1192|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedExchange",         EOpInterlockedExchange);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1193|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedMax",              EOpInterlockedMax);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1194|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedMin",              EOpInterlockedMin);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1195|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedOr",               EOpInterlockedOr);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1196|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedXor",              EOpInterlockedXor);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1197|       |
 1198|       |    // SM5 Texture methods
 1199|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherRed",                   EOpMethodGatherRed);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1200|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherGreen",                 EOpMethodGatherGreen);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1201|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherBlue",                  EOpMethodGatherBlue);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1202|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherAlpha",                 EOpMethodGatherAlpha);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1203|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmp",                   EOpMethodGatherCmpRed); // alias
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1204|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpRed",                EOpMethodGatherCmpRed);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1205|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpGreen",              EOpMethodGatherCmpGreen);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1206|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpBlue",               EOpMethodGatherCmpBlue);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1207|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpAlpha",              EOpMethodGatherCmpAlpha);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1208|       |
 1209|       |    // GS methods
 1210|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "Append",                      EOpMethodAppend);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1211|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "RestartStrip",                EOpMethodRestartStrip);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1212|       |
 1213|       |    // Wave ops
 1214|  1.68k|    symbolTable.relateToOperator("WaveIsFirstLane",                            EOpSubgroupElect);
 1215|  1.68k|    symbolTable.relateToOperator("WaveGetLaneCount",                           EOpWaveGetLaneCount);
 1216|  1.68k|    symbolTable.relateToOperator("WaveGetLaneIndex",                           EOpWaveGetLaneIndex);
 1217|  1.68k|    symbolTable.relateToOperator("WaveActiveAnyTrue",                          EOpSubgroupAny);
 1218|  1.68k|    symbolTable.relateToOperator("WaveActiveAllTrue",                          EOpSubgroupAll);
 1219|  1.68k|    symbolTable.relateToOperator("WaveActiveBallot",                           EOpSubgroupBallot);
 1220|  1.68k|    symbolTable.relateToOperator("WaveReadLaneFirst",                          EOpSubgroupBroadcastFirst);
 1221|  1.68k|    symbolTable.relateToOperator("WaveReadLaneAt",                             EOpSubgroupShuffle);
 1222|  1.68k|    symbolTable.relateToOperator("WaveActiveAllEqual",                         EOpSubgroupAllEqual);
 1223|  1.68k|    symbolTable.relateToOperator("WaveActiveAllEqualBool",                     EOpSubgroupAllEqual);
 1224|  1.68k|    symbolTable.relateToOperator("WaveActiveCountBits",                        EOpWaveActiveCountBits);
 1225|  1.68k|    symbolTable.relateToOperator("WaveActiveSum",                              EOpSubgroupAdd);
 1226|  1.68k|    symbolTable.relateToOperator("WaveActiveProduct",                          EOpSubgroupMul);
 1227|  1.68k|    symbolTable.relateToOperator("WaveActiveBitAnd",                           EOpSubgroupAnd);
 1228|  1.68k|    symbolTable.relateToOperator("WaveActiveBitOr",                            EOpSubgroupOr);
 1229|  1.68k|    symbolTable.relateToOperator("WaveActiveBitXor",                           EOpSubgroupXor);
 1230|  1.68k|    symbolTable.relateToOperator("WaveActiveMin",                              EOpSubgroupMin);
 1231|  1.68k|    symbolTable.relateToOperator("WaveActiveMax",                              EOpSubgroupMax);
 1232|  1.68k|    symbolTable.relateToOperator("WavePrefixSum",                              EOpSubgroupInclusiveAdd);
 1233|  1.68k|    symbolTable.relateToOperator("WavePrefixProduct",                          EOpSubgroupInclusiveMul);
 1234|  1.68k|    symbolTable.relateToOperator("WavePrefixCountBits",                        EOpWavePrefixCountBits);
 1235|  1.68k|    symbolTable.relateToOperator("QuadReadAcrossX",                            EOpSubgroupQuadSwapHorizontal);
 1236|  1.68k|    symbolTable.relateToOperator("QuadReadAcrossY",                            EOpSubgroupQuadSwapVertical);
 1237|  1.68k|    symbolTable.relateToOperator("QuadReadAcrossDiagonal",                     EOpSubgroupQuadSwapDiagonal);
 1238|  1.68k|    symbolTable.relateToOperator("QuadReadLaneAt",                             EOpSubgroupQuadBroadcast);
 1239|       |
 1240|       |    // Subpass input methods
 1241|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoad",                 EOpSubpassLoad);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1242|  1.68k|    symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoadMS",               EOpSubpassLoadMS);
  ------------------
  |  |  513|  1.68k|#define BUILTIN_PREFIX "__BI_"
  ------------------
 1243|  1.68k|}
_ZN7glslang22TBuiltInParseablesHlsl16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableERK16TBuiltInResource:
 1256|    120|{
 1257|    120|}
hlslParseables.cpp:_ZN12_GLOBAL__N_114AppendTypeNameERNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEEPKcSA_ii:
  214|  1.56M|{
  215|  1.56M|    const bool isTranspose = (argOrder[0] == '^');
  216|  1.56M|    const bool isTexture   = IsTextureType(argOrder[0]);
  217|  1.56M|    const bool isArrayed   = IsArrayed(argOrder[0]);
  218|  1.56M|    const bool isSampler   = IsSamplerType(argType[0]);
  219|  1.56M|    const bool isMS        = IsMS(argOrder[0]);
  220|  1.56M|    const bool isBuffer    = IsBuffer(argOrder[0]);
  221|  1.56M|    const bool isImage     = IsImage(argOrder[0]);
  222|  1.56M|    const bool isSubpass   = IsSubpassInput(argOrder[0]);
  223|       |
  224|  1.56M|    char type  = *argType;
  225|       |
  226|  1.56M|    if (isTranspose) {  // Take transpose of matrix dimensions
  ------------------
  |  Branch (226:9): [True: 7.68k, False: 1.55M]
  ------------------
  227|  7.68k|        std::swap(dim0, dim1);
  228|  1.55M|    } else if (isTexture || isSubpass) {
  ------------------
  |  Branch (228:16): [True: 94.6k, False: 1.46M]
  |  Branch (228:29): [True: 2.88k, False: 1.45M]
  ------------------
  229|  97.5k|        if (type == 'F')       // map base type to texture of that type.
  ------------------
  |  Branch (229:13): [True: 32.5k, False: 65.0k]
  ------------------
  230|  32.5k|            type = 'T';        // e.g, int -> itexture, uint -> utexture, etc.
  231|  65.0k|        else if (type == 'I')
  ------------------
  |  Branch (231:18): [True: 32.5k, False: 32.5k]
  ------------------
  232|  32.5k|            type = 'i';
  233|  32.5k|        else if (type == 'U')
  ------------------
  |  Branch (233:18): [True: 32.5k, False: 0]
  ------------------
  234|  32.5k|            type = 'u';
  235|  97.5k|    }
  236|       |
  237|  1.56M|    if (isTranspose)
  ------------------
  |  Branch (237:9): [True: 7.68k, False: 1.55M]
  ------------------
  238|  7.68k|        ++argOrder;
  239|       |
  240|  1.56M|    char order = *argOrder;
  241|       |
  242|  1.56M|    switch (type) {
  243|   111k|    case '-': s += "void";                                break;
  ------------------
  |  Branch (243:5): [True: 111k, False: 1.45M]
  ------------------
  244|   613k|    case 'F': s += "float";                               break;
  ------------------
  |  Branch (244:5): [True: 613k, False: 950k]
  ------------------
  245|  44.1k|    case 'D': s += "double";                              break;
  ------------------
  |  Branch (245:5): [True: 44.1k, False: 1.51M]
  ------------------
  246|   323k|    case 'I': s += "int";                                 break;
  ------------------
  |  Branch (246:5): [True: 323k, False: 1.24M]
  ------------------
  247|   259k|    case 'U': s += "uint";                                break;
  ------------------
  |  Branch (247:5): [True: 259k, False: 1.30M]
  ------------------
  248|      0|    case 'L': s += "int64_t";                             break;
  ------------------
  |  Branch (248:5): [True: 0, False: 1.56M]
  ------------------
  249|      0|    case 'M': s += "uint64_t";                            break;
  ------------------
  |  Branch (249:5): [True: 0, False: 1.56M]
  ------------------
  250|  40.6k|    case 'B': s += "bool";                                break;
  ------------------
  |  Branch (250:5): [True: 40.6k, False: 1.52M]
  ------------------
  251|  46.0k|    case 'S': s += "sampler";                             break;
  ------------------
  |  Branch (251:5): [True: 46.0k, False: 1.51M]
  ------------------
  252|  28.8k|    case 's': s += "SamplerComparisonState";              break;
  ------------------
  |  Branch (252:5): [True: 28.8k, False: 1.53M]
  ------------------
  253|  32.5k|    case 'T': s += ((isBuffer && isImage) ? "RWBuffer" :
  ------------------
  |  Branch (253:5): [True: 32.5k, False: 1.53M]
  |  Branch (253:22): [True: 480, False: 32.0k]
  |  Branch (253:34): [True: 360, False: 120]
  ------------------
  254|  32.5k|                    isSubpass ? "SubpassInput" :
  ------------------
  |  Branch (254:21): [True: 960, False: 31.2k]
  ------------------
  255|  32.1k|                    isBuffer ? "Buffer" :
  ------------------
  |  Branch (255:21): [True: 120, False: 31.0k]
  ------------------
  256|  31.2k|                    isImage  ? "RWTexture" : "Texture");  break;
  ------------------
  |  Branch (256:21): [True: 1.80k, False: 29.2k]
  ------------------
  257|  32.5k|    case 'i': s += ((isBuffer && isImage) ? "RWBuffer" :
  ------------------
  |  Branch (257:5): [True: 32.5k, False: 1.53M]
  |  Branch (257:22): [True: 480, False: 32.0k]
  |  Branch (257:34): [True: 360, False: 120]
  ------------------
  258|  32.5k|                    isSubpass ? "SubpassInput" :
  ------------------
  |  Branch (258:21): [True: 960, False: 31.2k]
  ------------------
  259|  32.1k|                    isBuffer ? "Buffer" :
  ------------------
  |  Branch (259:21): [True: 120, False: 31.0k]
  ------------------
  260|  31.2k|                    isImage ? "RWTexture" : "Texture");   break;
  ------------------
  |  Branch (260:21): [True: 1.80k, False: 29.2k]
  ------------------
  261|  32.5k|    case 'u': s += ((isBuffer && isImage) ? "RWBuffer" :
  ------------------
  |  Branch (261:5): [True: 32.5k, False: 1.53M]
  |  Branch (261:22): [True: 480, False: 32.0k]
  |  Branch (261:34): [True: 360, False: 120]
  ------------------
  262|  32.5k|                    isSubpass ? "SubpassInput" :
  ------------------
  |  Branch (262:21): [True: 960, False: 31.2k]
  ------------------
  263|  32.1k|                    isBuffer ? "Buffer" :
  ------------------
  |  Branch (263:21): [True: 120, False: 31.0k]
  ------------------
  264|  31.2k|                    isImage ? "RWTexture" : "Texture");   break;
  ------------------
  |  Branch (264:21): [True: 1.80k, False: 29.2k]
  ------------------
  265|      0|    default:  s += "UNKNOWN_TYPE";                        break;
  ------------------
  |  Branch (265:5): [True: 0, False: 1.56M]
  ------------------
  266|  1.56M|    }
  267|       |
  268|  1.56M|    if (isSubpass && isMS)
  ------------------
  |  Branch (268:9): [True: 2.88k, False: 1.56M]
  |  Branch (268:22): [True: 1.44k, False: 1.44k]
  ------------------
  269|  1.44k|        s += "MS";
  270|       |
  271|       |    // handle fixed vector sizes, such as float3, and only ever 3.
  272|  1.56M|    const int fixedVecSize = FixedVecSize(argOrder);
  273|  1.56M|    if (fixedVecSize != 0)
  ------------------
  |  Branch (273:9): [True: 109k, False: 1.45M]
  ------------------
  274|   109k|        dim0 = dim1 = fixedVecSize;
  275|       |
  276|  1.56M|    const char dim0Char = ('0' + char(dim0));
  277|  1.56M|    const char dim1Char = ('0' + char(dim1));
  278|       |
  279|       |    // Add sampler dimensions
  280|  1.56M|    if (isSampler || isTexture) {
  ------------------
  |  Branch (280:9): [True: 74.8k, False: 1.48M]
  |  Branch (280:22): [True: 94.6k, False: 1.39M]
  ------------------
  281|   169k|        if ((order == 'V' || isTexture) && !isBuffer) {
  ------------------
  |  Branch (281:14): [True: 2.16k, False: 167k]
  |  Branch (281:30): [True: 94.6k, False: 72.7k]
  |  Branch (281:44): [True: 95.4k, False: 1.44k]
  ------------------
  282|  95.4k|            switch (dim0) {
  283|  16.5k|            case 1: s += "1D";                   break;
  ------------------
  |  Branch (283:13): [True: 16.5k, False: 78.8k]
  ------------------
  284|  54.7k|            case 2: s += (isMS ? "2DMS" : "2D"); break;
  ------------------
  |  Branch (284:13): [True: 54.7k, False: 40.6k]
  |  Branch (284:27): [True: 3.60k, False: 51.1k]
  ------------------
  285|  7.56k|            case 3: s += "3D";                   break;
  ------------------
  |  Branch (285:13): [True: 7.56k, False: 87.8k]
  ------------------
  286|  16.5k|            case 4: s += (type == 'S'? "CUBE" : "Cube"); break;
  ------------------
  |  Branch (286:13): [True: 16.5k, False: 78.8k]
  |  Branch (286:27): [True: 720, False: 15.8k]
  ------------------
  287|      0|            default: s += "UNKNOWN_SAMPLER";     break;
  ------------------
  |  Branch (287:13): [True: 0, False: 95.4k]
  ------------------
  288|  95.4k|            }
  289|  95.4k|        }
  290|  1.39M|    } else {
  291|       |        // Non-sampler type:
  292|       |        // verify dimensions
  293|  1.39M|        if (((order == 'V' || order == 'M') && (dim0 < 1 || dim0 > 4)) ||
  ------------------
  |  Branch (293:15): [True: 417k, False: 977k]
  |  Branch (293:31): [True: 629k, False: 347k]
  |  Branch (293:49): [True: 0, False: 1.04M]
  |  Branch (293:61): [True: 0, False: 1.04M]
  ------------------
  294|  1.39M|            (order == 'M' && (dim1 < 1 || dim1 > 4))) {
  ------------------
  |  Branch (294:14): [True: 629k, False: 764k]
  |  Branch (294:31): [True: 0, False: 629k]
  |  Branch (294:43): [True: 0, False: 629k]
  ------------------
  295|      0|            s += "UNKNOWN_DIMENSION";
  296|      0|            return s;
  297|      0|        }
  298|       |
  299|  1.39M|        switch (order) {
  300|   111k|        case '-': break;  // no dimensions for voids
  ------------------
  |  Branch (300:9): [True: 111k, False: 1.28M]
  ------------------
  301|   233k|        case 'S': break;  // no dimensions on scalars
  ------------------
  |  Branch (301:9): [True: 233k, False: 1.16M]
  ------------------
  302|   417k|        case 'V':
  ------------------
  |  Branch (302:9): [True: 417k, False: 977k]
  ------------------
  303|   417k|            s += dim0Char;
  304|   417k|            break;
  305|   629k|        case 'M':
  ------------------
  |  Branch (305:9): [True: 629k, False: 764k]
  ------------------
  306|   629k|            s += dim0Char;
  307|   629k|            s += 'x';
  308|   629k|            s += dim1Char;
  309|   629k|            break;
  310|  2.88k|        default:
  ------------------
  |  Branch (310:9): [True: 2.88k, False: 1.39M]
  ------------------
  311|  2.88k|            break;
  312|  1.39M|        }
  313|  1.39M|    }
  314|       |
  315|       |    // handle arrayed textures
  316|  1.56M|    if (isArrayed)
  ------------------
  |  Branch (316:9): [True: 43.2k, False: 1.52M]
  ------------------
  317|  43.2k|        s += "Array";
  318|       |
  319|  1.56M|    switch (type) {
  320|  32.5k|    case 'i': s += "<int";   s += dim0Char; s += ">"; break;
  ------------------
  |  Branch (320:5): [True: 32.5k, False: 1.53M]
  ------------------
  321|  32.5k|    case 'u': s += "<uint";  s += dim0Char; s += ">"; break;
  ------------------
  |  Branch (321:5): [True: 32.5k, False: 1.53M]
  ------------------
  322|  32.5k|    case 'T': s += "<float"; s += dim0Char; s += ">"; break;
  ------------------
  |  Branch (322:5): [True: 32.5k, False: 1.53M]
  ------------------
  323|  1.46M|    default: break;
  ------------------
  |  Branch (323:5): [True: 1.46M, False: 97.5k]
  ------------------
  324|  1.56M|    }
  325|       |
  326|  1.56M|    return s;
  327|  1.56M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_113IsSamplerTypeEc:
   60|  1.56M|bool IsSamplerType(const char argType)     { return argType == 'S' || argType == 's'; }
  ------------------
  |  Branch (60:53): [True: 46.0k, False: 1.51M]
  |  Branch (60:71): [True: 28.8k, False: 1.48M]
  ------------------
hlslParseables.cpp:_ZN12_GLOBAL__N_14IsMSEc:
   66|  1.56M|bool IsMS(const char argOrder)             { return IsTextureMS(argOrder) || argOrder == ']'; }
  ------------------
  |  Branch (66:53): [True: 3.60k, False: 1.56M]
  |  Branch (66:78): [True: 1.44k, False: 1.55M]
  ------------------
hlslParseables.cpp:_ZN12_GLOBAL__N_114IsSubpassInputEc:
   63|  1.70M|bool IsSubpassInput(const char argOrder)   { return argOrder == '[' || argOrder == ']'; }
  ------------------
  |  Branch (63:53): [True: 1.56k, False: 1.70M]
  |  Branch (63:72): [True: 1.56k, False: 1.69M]
  ------------------
hlslParseables.cpp:_ZN12_GLOBAL__N_110IsEndOfArgEPKc:
  191|  14.4M|{
  192|  14.4M|    return arg == nullptr || *arg == '\0' || *arg == ',';
  ------------------
  |  Branch (192:12): [True: 0, False: 14.4M]
  |  Branch (192:30): [True: 1.72M, False: 12.6M]
  |  Branch (192:46): [True: 4.97M, False: 7.70M]
  ------------------
  193|  14.4M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_113IsTextureTypeEc:
   71|  2.23M|{
   72|  2.23M|    return IsTextureNonMS(argOrder) || IsArrayedTexture(argOrder) ||
  ------------------
  |  Branch (72:12): [True: 150k, False: 2.08M]
  |  Branch (72:40): [True: 143k, False: 1.94M]
  ------------------
   73|  1.94M|           IsTextureMS(argOrder) || IsBuffer(argOrder) || IsImage(argOrder);
  ------------------
  |  Branch (73:12): [True: 12.7k, False: 1.93M]
  |  Branch (73:37): [True: 3.36k, False: 1.92M]
  |  Branch (73:59): [True: 13.3k, False: 1.91M]
  ------------------
   74|  2.23M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_114IsTextureNonMSEc:
   62|  2.23M|bool IsTextureNonMS(const char argOrder)   { return argOrder == '%'; }
hlslParseables.cpp:_ZN12_GLOBAL__N_116IsArrayedTextureEc:
   64|  2.08M|bool IsArrayedTexture(const char argOrder) { return argOrder == '@'; }
hlslParseables.cpp:_ZN12_GLOBAL__N_19IsArrayedEc:
   61|  1.83M|bool IsArrayed(const char argOrder)        { return argOrder == '@' || argOrder == '&' || argOrder == '#'; }
  ------------------
  |  Branch (61:53): [True: 143k, False: 1.69M]
  |  Branch (61:72): [True: 6.36k, False: 1.68M]
  |  Branch (61:91): [True: 5.64k, False: 1.68M]
  ------------------
hlslParseables.cpp:_ZN12_GLOBAL__N_111IsTextureMSEc:
   65|  3.78M|bool IsTextureMS(const char argOrder)      { return argOrder == '$' || argOrder == '&'; }
  ------------------
  |  Branch (65:53): [True: 12.7k, False: 3.76M]
  |  Branch (65:72): [True: 12.7k, False: 3.75M]
  ------------------
hlslParseables.cpp:_ZN12_GLOBAL__N_18IsBufferEc:
   67|  3.76M|bool IsBuffer(const char argOrder)         { return argOrder == '*' || argOrder == '~'; }
  ------------------
  |  Branch (67:53): [True: 1.68k, False: 3.76M]
  |  Branch (67:72): [True: 5.04k, False: 3.76M]
  ------------------
hlslParseables.cpp:_ZN12_GLOBAL__N_17IsImageEc:
   68|  3.55M|bool IsImage(const char argOrder)          { return argOrder == '!' || argOrder == '#' || argOrder == '~'; }
  ------------------
  |  Branch (68:53): [True: 11.7k, False: 3.54M]
  |  Branch (68:72): [True: 8.40k, False: 3.53M]
  |  Branch (68:91): [True: 1.44k, False: 3.53M]
  ------------------
hlslParseables.cpp:_ZN12_GLOBAL__N_113HasMipInCoordERKNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEEbbb:
  155|  67.0k|{
  156|  67.0k|    return name == "Load" && !isMS && !isBuffer && !isImage;
  ------------------
  |  Branch (156:12): [True: 1.56k, False: 65.5k]
  |  Branch (156:30): [True: 1.08k, False: 480]
  |  Branch (156:39): [True: 840, False: 240]
  |  Branch (156:52): [True: 600, False: 240]
  ------------------
  157|  67.0k|}
hlslParseables.cpp:_ZN12_GLOBAL__N_112FixedVecSizeEPKc:
  197|  1.63M|{
  198|  3.54M|    while (!IsEndOfArg(arg)) {
  ------------------
  |  Branch (198:12): [True: 2.03M, False: 1.51M]
  ------------------
  199|  2.03M|        if (isdigit(*arg))
  ------------------
  |  Branch (199:13): [True: 118k, False: 1.91M]
  ------------------
  200|   118k|            return *arg - '0';
  201|  1.91M|        ++arg;
  202|  1.91M|    }
  203|       |
  204|  1.51M|    return 0; // none found.
  205|  1.63M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_116CoordinateArgPosERKNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEEb:
  144|  67.0k|{
  145|  67.0k|    if (!isTexture || (name == "GetDimensions"))
  ------------------
  |  Branch (145:9): [True: 45.4k, False: 21.6k]
  |  Branch (145:23): [True: 5.28k, False: 16.3k]
  ------------------
  146|  50.7k|        return -1;  // has none
  147|  16.3k|    else if (name == "Load")
  ------------------
  |  Branch (147:14): [True: 1.44k, False: 14.8k]
  ------------------
  148|  1.44k|        return 1;
  149|  14.8k|    else
  150|  14.8k|        return 2;  // other texture methods are 2
  151|  67.0k|}
hlslParseables.cpp:_ZN12_GLOBAL__N_122FindVectorMatrixBoundsEPKciRiS2_S2_S2_:
  370|  67.0k|{
  371|   248k|    for (int arg = 0; ; ++arg) {
  372|   248k|        const char* nthArgOrder(NthArg(argOrder, arg));
  373|   248k|        if (nthArgOrder == nullptr)
  ------------------
  |  Branch (373:13): [True: 67.0k, False: 181k]
  ------------------
  374|  67.0k|            break;
  375|   181k|        else if (*nthArgOrder == 'V' || IsSubpassInput(*nthArgOrder))
  ------------------
  |  Branch (375:18): [True: 42.8k, False: 138k]
  |  Branch (375:41): [True: 240, False: 138k]
  ------------------
  376|  43.0k|            dim0Max = 4;
  377|   138k|        else if (*nthArgOrder == 'M')
  ------------------
  |  Branch (377:18): [True: 9.72k, False: 128k]
  ------------------
  378|  9.72k|            dim0Max = dim1Max = 4;
  379|   248k|    }
  380|       |
  381|  67.0k|    if (fixedVecSize > 0) // handle fixed sized vectors
  ------------------
  |  Branch (381:9): [True: 9.60k, False: 57.4k]
  ------------------
  382|  9.60k|        dim0Min = dim0Max = fixedVecSize;
  383|  67.0k|}
hlslParseables.cpp:_ZN12_GLOBAL__N_17IsValidEPKcccccii:
  335|   607k|{
  336|   607k|    const bool isVec = (argOrder == 'V');
  337|       |
  338|   607k|    const std::string name(cname);
  339|       |
  340|       |    // these do not have vec1 versions
  341|   607k|    if (dim0 == 1 && (name == "normalize" || name == "reflect" || name == "refract"))
  ------------------
  |  Branch (341:9): [True: 174k, False: 432k]
  |  Branch (341:23): [True: 120, False: 174k]
  |  Branch (341:46): [True: 120, False: 174k]
  |  Branch (341:67): [True: 120, False: 174k]
  ------------------
  342|    360|        return false;
  343|       |
  344|   606k|    if (!IsTextureType(argOrder) && (isVec && dim0 == 1)) // avoid vec1
  ------------------
  |  Branch (344:9): [True: 399k, False: 207k]
  |  Branch (344:38): [True: 105k, False: 294k]
  |  Branch (344:47): [True: 25.2k, False: 80.1k]
  ------------------
  345|  25.2k|        return false;
  346|       |
  347|   581k|    return true;
  348|   606k|}
hlslParseables.cpp:_ZN12_GLOBAL__N_115IsIllegalSampleERKNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEEPKci:
   79|   207k|{
   80|   207k|    const bool isArrayed = IsArrayed(*argOrder);
   81|   207k|    const bool isMS      = IsTextureMS(*argOrder);
   82|   207k|    const bool isBuffer  = IsBuffer(*argOrder);
   83|       |
   84|       |    // there are no 3D arrayed textures, or 3D SampleCmp(LevelZero)
   85|   207k|    if (dim0 == 3 && (isArrayed || name == "SampleCmp" || name == "SampleCmpLevelZero"))
  ------------------
  |  Branch (85:9): [True: 49.6k, False: 157k]
  |  Branch (85:23): [True: 23.7k, False: 25.9k]
  |  Branch (85:36): [True: 720, False: 25.2k]
  |  Branch (85:59): [True: 720, False: 24.4k]
  ------------------
   86|  25.2k|        return true;
   87|       |
   88|   182k|    const int numArgs = int(std::count(argOrder, argOrder + strlen(argOrder), ',')) + 1;
   89|       |
   90|       |    // Reject invalid offset forms with cubemaps
   91|   182k|    if (dim0 == 4) {
  ------------------
  |  Branch (91:9): [True: 50.4k, False: 131k]
  ------------------
   92|  50.4k|        if ((name == "Sample"             && numArgs >= 4) ||
  ------------------
  |  Branch (92:14): [True: 1.44k, False: 48.9k]
  |  Branch (92:46): [True: 720, False: 720]
  ------------------
   93|  49.6k|            (name == "SampleBias"         && numArgs >= 5) ||
  ------------------
  |  Branch (93:14): [True: 1.44k, False: 48.2k]
  |  Branch (93:46): [True: 720, False: 720]
  ------------------
   94|  48.9k|            (name == "SampleCmp"          && numArgs >= 5) ||
  ------------------
  |  Branch (94:14): [True: 1.44k, False: 47.5k]
  |  Branch (94:46): [True: 720, False: 720]
  ------------------
   95|  48.2k|            (name == "SampleCmpLevelZero" && numArgs >= 5) ||
  ------------------
  |  Branch (95:14): [True: 1.44k, False: 46.8k]
  |  Branch (95:46): [True: 720, False: 720]
  ------------------
   96|  47.5k|            (name == "SampleGrad"         && numArgs >= 6) ||
  ------------------
  |  Branch (96:14): [True: 1.44k, False: 46.0k]
  |  Branch (96:46): [True: 720, False: 720]
  ------------------
   97|  46.8k|            (name == "SampleLevel"        && numArgs >= 5))
  ------------------
  |  Branch (97:14): [True: 1.44k, False: 45.3k]
  |  Branch (97:46): [True: 720, False: 720]
  ------------------
   98|  4.32k|            return true;
   99|  50.4k|    }
  100|       |
  101|   177k|    const bool isGather =
  102|   177k|        (name == "Gather" ||
  ------------------
  |  Branch (102:10): [True: 5.04k, False: 172k]
  ------------------
  103|   172k|         name == "GatherRed" ||
  ------------------
  |  Branch (103:10): [True: 12.6k, False: 160k]
  ------------------
  104|   160k|         name == "GatherGreen" ||
  ------------------
  |  Branch (104:10): [True: 12.6k, False: 147k]
  ------------------
  105|   147k|         name == "GatherBlue"  ||
  ------------------
  |  Branch (105:10): [True: 12.6k, False: 135k]
  ------------------
  106|   135k|         name == "GatherAlpha");
  ------------------
  |  Branch (106:10): [True: 12.6k, False: 122k]
  ------------------
  107|       |
  108|   177k|    const bool isGatherCmp =
  109|   177k|        (name == "GatherCmp"      ||
  ------------------
  |  Branch (109:10): [True: 12.6k, False: 165k]
  ------------------
  110|   165k|         name == "GatherCmpRed"   ||
  ------------------
  |  Branch (110:10): [True: 12.6k, False: 152k]
  ------------------
  111|   152k|         name == "GatherCmpGreen" ||
  ------------------
  |  Branch (111:10): [True: 12.6k, False: 140k]
  ------------------
  112|   140k|         name == "GatherCmpBlue"  ||
  ------------------
  |  Branch (112:10): [True: 12.6k, False: 127k]
  ------------------
  113|   127k|         name == "GatherCmpAlpha");
  ------------------
  |  Branch (113:10): [True: 12.6k, False: 114k]
  ------------------
  114|       |
  115|       |    // Reject invalid Gathers
  116|   177k|    if (isGather || isGatherCmp) {
  ------------------
  |  Branch (116:9): [True: 55.4k, False: 122k]
  |  Branch (116:21): [True: 63.0k, False: 59.4k]
  ------------------
  117|   118k|        if (dim0 == 1 || dim0 == 3)   // there are no 1D or 3D gathers
  ------------------
  |  Branch (117:13): [True: 33.8k, False: 84.6k]
  |  Branch (117:26): [True: 16.9k, False: 67.6k]
  ------------------
  118|  50.7k|            return true;
  119|       |
  120|       |        // no offset on cube or cube array gathers
  121|  67.6k|        if (dim0 == 4) {
  ------------------
  |  Branch (121:13): [True: 33.8k, False: 33.8k]
  ------------------
  122|  33.8k|            if ((isGather && numArgs > 3) || (isGatherCmp && numArgs > 4))
  ------------------
  |  Branch (122:18): [True: 15.8k, False: 18.0k]
  |  Branch (122:30): [True: 12.2k, False: 3.60k]
  |  Branch (122:47): [True: 18.0k, False: 3.60k]
  |  Branch (122:62): [True: 14.4k, False: 3.60k]
  ------------------
  123|  26.6k|                return true;
  124|  33.8k|        }
  125|  67.6k|    }
  126|       |
  127|       |    // Reject invalid Loads
  128|   100k|    if (name == "Load" && dim0 == 4)
  ------------------
  |  Branch (128:9): [True: 13.3k, False: 87.1k]
  |  Branch (128:27): [True: 3.60k, False: 9.72k]
  ------------------
  129|  3.60k|        return true; // Load does not support any cubemaps, arrayed or not.
  130|       |
  131|       |    // Multisample formats are only 2D and 2Darray
  132|  96.8k|    if (isMS && dim0 != 2)
  ------------------
  |  Branch (132:9): [True: 5.76k, False: 91.0k]
  |  Branch (132:17): [True: 2.16k, False: 3.60k]
  ------------------
  133|  2.16k|        return true;
  134|       |
  135|       |    // Buffer are only 1D
  136|  94.6k|    if (isBuffer && dim0 != 1)
  ------------------
  |  Branch (136:9): [True: 1.44k, False: 93.2k]
  |  Branch (136:21): [True: 0, False: 1.44k]
  ------------------
  137|      0|        return true;
  138|       |
  139|  94.6k|    return false;
  140|  94.6k|}
hlslParseables.cpp:_ZN12_GLOBAL__N_16NthArgEPKci:
  361|  3.30M|{
  362|  8.39M|    for (int x=0; x<n && arg; ++x)
  ------------------
  |  Branch (362:19): [True: 5.08M, False: 3.30M]
  |  Branch (362:26): [True: 5.08M, False: 0]
  ------------------
  363|  5.08M|        if ((arg = FindEndOfArg(arg)) != nullptr)
  ------------------
  |  Branch (363:13): [True: 4.08M, False: 1.00M]
  ------------------
  364|  4.08M|            ++arg;  // skip arg separator
  365|       |
  366|  3.30M|    return arg;
  367|  3.30M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_112FindEndOfArgEPKc:
  352|  5.08M|{
  353|  10.5M|    while (!IsEndOfArg(arg))
  ------------------
  |  Branch (353:12): [True: 5.46M, False: 5.08M]
  ------------------
  354|  5.46M|        ++arg;
  355|       |
  356|  5.08M|    return *arg == '\0' ? nullptr : arg;
  ------------------
  |  Branch (356:12): [True: 1.00M, False: 4.08M]
  ------------------
  357|  5.08M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_17IoParamERNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEEPKc:
  167|  2.12M|{
  168|  2.12M|    if (*nthArgOrder == '>') {           // output params
  ------------------
  |  Branch (168:9): [True: 104k, False: 2.01M]
  ------------------
  169|   104k|        ++nthArgOrder;
  170|   104k|        s.append("out ");
  171|  2.01M|    } else if (*nthArgOrder == '<') {    // input params
  ------------------
  |  Branch (171:16): [True: 0, False: 2.01M]
  ------------------
  172|      0|        ++nthArgOrder;
  173|      0|        s.append("in ");
  174|      0|    }
  175|       |
  176|  2.12M|    return nthArgOrder;
  177|  2.12M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_115HandleRepeatArgERPKcS2_S1_:
  181|  2.12M|{
  182|  2.12M|    if (*arg == ',' || *arg == '\0')
  ------------------
  |  Branch (182:9): [True: 293k, False: 1.82M]
  |  Branch (182:24): [True: 366k, False: 1.46M]
  ------------------
  183|   659k|        arg = prev;
  184|  1.46M|    else
  185|  1.46M|        prev = current;
  186|  2.12M|}
hlslParseables.cpp:_ZN12_GLOBAL__N_112NoArrayCoordERKNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEE:
  161|  36.3k|{
  162|  36.3k|    return name == "CalculateLevelOfDetail" || name == "CalculateLevelOfDetailUnclamped";
  ------------------
  |  Branch (162:12): [True: 1.08k, False: 35.2k]
  |  Branch (162:48): [True: 1.08k, False: 34.2k]
  ------------------
  163|  36.3k|}

_ZN7glslang15HlslScanContext8tokenizeERNS_9HlslTokenE:
  517|  4.48M|{
  518|  4.48M|    EHlslTokenClass tokenClass = tokenizeClass(token);
  519|  4.48M|    token.tokenClass = tokenClass;
  520|  4.48M|}
_ZN7glslang15HlslScanContext13tokenizeClassERNS_9HlslTokenE:
  537|  4.48M|{
  538|  5.53M|    do {
  539|  5.53M|        parserToken = &token;
  540|  5.53M|        TPpToken ppToken;
  541|  5.53M|        int token = ppContext.tokenize(ppToken);
  542|  5.53M|        if (token == EndOfInput)
  ------------------
  |  Branch (542:13): [True: 212, False: 5.53M]
  ------------------
  543|    212|            return EHTokNone;
  544|       |
  545|  5.53M|        tokenText = ppToken.name;
  546|  5.53M|        loc = ppToken.loc;
  547|  5.53M|        parserToken->loc = loc;
  548|  5.53M|        switch (token) {
  549|   480k|        case ';':                       return EHTokSemicolon;
  ------------------
  |  Branch (549:9): [True: 480k, False: 5.05M]
  ------------------
  550|   603k|        case ',':                       return EHTokComma;
  ------------------
  |  Branch (550:9): [True: 603k, False: 4.93M]
  ------------------
  551|     13|        case ':':                       return EHTokColon;
  ------------------
  |  Branch (551:9): [True: 13, False: 5.53M]
  ------------------
  552|      1|        case '=':                       return EHTokAssign;
  ------------------
  |  Branch (552:9): [True: 1, False: 5.53M]
  ------------------
  553|   482k|        case '(':                       return EHTokLeftParen;
  ------------------
  |  Branch (553:9): [True: 482k, False: 5.05M]
  ------------------
  554|   480k|        case ')':                       return EHTokRightParen;
  ------------------
  |  Branch (554:9): [True: 480k, False: 5.05M]
  ------------------
  555|      3|        case '.':                       return EHTokDot;
  ------------------
  |  Branch (555:9): [True: 3, False: 5.53M]
  ------------------
  556|     16|        case '!':                       return EHTokBang;
  ------------------
  |  Branch (556:9): [True: 16, False: 5.53M]
  ------------------
  557|      4|        case '-':                       return EHTokDash;
  ------------------
  |  Branch (557:9): [True: 4, False: 5.53M]
  ------------------
  558|     13|        case '~':                       return EHTokTilde;
  ------------------
  |  Branch (558:9): [True: 13, False: 5.53M]
  ------------------
  559|     12|        case '+':                       return EHTokPlus;
  ------------------
  |  Branch (559:9): [True: 12, False: 5.53M]
  ------------------
  560|      0|        case '*':                       return EHTokStar;
  ------------------
  |  Branch (560:9): [True: 0, False: 5.53M]
  ------------------
  561|     29|        case '/':                       return EHTokSlash;
  ------------------
  |  Branch (561:9): [True: 29, False: 5.53M]
  ------------------
  562|      6|        case '%':                       return EHTokPercent;
  ------------------
  |  Branch (562:9): [True: 6, False: 5.53M]
  ------------------
  563|  97.5k|        case '<':                       return EHTokLeftAngle;
  ------------------
  |  Branch (563:9): [True: 97.5k, False: 5.44M]
  ------------------
  564|  97.5k|        case '>':                       return EHTokRightAngle;
  ------------------
  |  Branch (564:9): [True: 97.5k, False: 5.44M]
  ------------------
  565|      0|        case '|':                       return EHTokVerticalBar;
  ------------------
  |  Branch (565:9): [True: 0, False: 5.53M]
  ------------------
  566|      0|        case '^':                       return EHTokCaret;
  ------------------
  |  Branch (566:9): [True: 0, False: 5.53M]
  ------------------
  567|      0|        case '&':                       return EHTokAmpersand;
  ------------------
  |  Branch (567:9): [True: 0, False: 5.53M]
  ------------------
  568|     12|        case '?':                       return EHTokQuestion;
  ------------------
  |  Branch (568:9): [True: 12, False: 5.53M]
  ------------------
  569|    158|        case '[':                       return EHTokLeftBracket;
  ------------------
  |  Branch (569:9): [True: 158, False: 5.53M]
  ------------------
  570|      6|        case ']':                       return EHTokRightBracket;
  ------------------
  |  Branch (570:9): [True: 6, False: 5.53M]
  ------------------
  571|      4|        case '{':                       return EHTokLeftBrace;
  ------------------
  |  Branch (571:9): [True: 4, False: 5.53M]
  ------------------
  572|      2|        case '}':                       return EHTokRightBrace;
  ------------------
  |  Branch (572:9): [True: 2, False: 5.53M]
  ------------------
  573|     22|        case '\\':
  ------------------
  |  Branch (573:9): [True: 22, False: 5.53M]
  ------------------
  574|     22|            parseContext.error(loc, "illegal use of escape character", "\\", "");
  575|     22|            break;
  576|       |
  577|      0|        case PPAtomAddAssign:          return EHTokAddAssign;
  ------------------
  |  Branch (577:9): [True: 0, False: 5.53M]
  ------------------
  578|      0|        case PPAtomSubAssign:          return EHTokSubAssign;
  ------------------
  |  Branch (578:9): [True: 0, False: 5.53M]
  ------------------
  579|      0|        case PPAtomMulAssign:          return EHTokMulAssign;
  ------------------
  |  Branch (579:9): [True: 0, False: 5.53M]
  ------------------
  580|      0|        case PPAtomDivAssign:          return EHTokDivAssign;
  ------------------
  |  Branch (580:9): [True: 0, False: 5.53M]
  ------------------
  581|      0|        case PPAtomModAssign:          return EHTokModAssign;
  ------------------
  |  Branch (581:9): [True: 0, False: 5.53M]
  ------------------
  582|       |
  583|      0|        case PpAtomRight:              return EHTokRightOp;
  ------------------
  |  Branch (583:9): [True: 0, False: 5.53M]
  ------------------
  584|      0|        case PpAtomLeft:               return EHTokLeftOp;
  ------------------
  |  Branch (584:9): [True: 0, False: 5.53M]
  ------------------
  585|       |
  586|      0|        case PpAtomRightAssign:        return EHTokRightAssign;
  ------------------
  |  Branch (586:9): [True: 0, False: 5.53M]
  ------------------
  587|      0|        case PpAtomLeftAssign:         return EHTokLeftAssign;
  ------------------
  |  Branch (587:9): [True: 0, False: 5.53M]
  ------------------
  588|      0|        case PpAtomAndAssign:          return EHTokAndAssign;
  ------------------
  |  Branch (588:9): [True: 0, False: 5.53M]
  ------------------
  589|      0|        case PpAtomOrAssign:           return EHTokOrAssign;
  ------------------
  |  Branch (589:9): [True: 0, False: 5.53M]
  ------------------
  590|      0|        case PpAtomXorAssign:          return EHTokXorAssign;
  ------------------
  |  Branch (590:9): [True: 0, False: 5.53M]
  ------------------
  591|       |
  592|      0|        case PpAtomAnd:                return EHTokAndOp;
  ------------------
  |  Branch (592:9): [True: 0, False: 5.53M]
  ------------------
  593|      0|        case PpAtomOr:                 return EHTokOrOp;
  ------------------
  |  Branch (593:9): [True: 0, False: 5.53M]
  ------------------
  594|      0|        case PpAtomXor:                return EHTokXorOp;
  ------------------
  |  Branch (594:9): [True: 0, False: 5.53M]
  ------------------
  595|       |
  596|      2|        case PpAtomEQ:                 return EHTokEqOp;
  ------------------
  |  Branch (596:9): [True: 2, False: 5.53M]
  ------------------
  597|      0|        case PpAtomGE:                 return EHTokGeOp;
  ------------------
  |  Branch (597:9): [True: 0, False: 5.53M]
  ------------------
  598|      0|        case PpAtomNE:                 return EHTokNeOp;
  ------------------
  |  Branch (598:9): [True: 0, False: 5.53M]
  ------------------
  599|      0|        case PpAtomLE:                 return EHTokLeOp;
  ------------------
  |  Branch (599:9): [True: 0, False: 5.53M]
  ------------------
  600|       |
  601|      0|        case PpAtomDecrement:          return EHTokDecOp;
  ------------------
  |  Branch (601:9): [True: 0, False: 5.53M]
  ------------------
  602|      4|        case PpAtomIncrement:          return EHTokIncOp;
  ------------------
  |  Branch (602:9): [True: 4, False: 5.53M]
  ------------------
  603|       |
  604|      1|        case PpAtomColonColon:         return EHTokColonColon;
  ------------------
  |  Branch (604:9): [True: 1, False: 5.53M]
  ------------------
  605|       |
  606|     39|        case PpAtomConstInt:           parserToken->i = ppToken.ival;       return EHTokIntConstant;
  ------------------
  |  Branch (606:9): [True: 39, False: 5.53M]
  ------------------
  607|      4|        case PpAtomConstUint:          parserToken->i = ppToken.ival;       return EHTokUintConstant;
  ------------------
  |  Branch (607:9): [True: 4, False: 5.53M]
  ------------------
  608|      0|        case PpAtomConstFloat16:       parserToken->d = ppToken.dval;       return EHTokFloat16Constant;
  ------------------
  |  Branch (608:9): [True: 0, False: 5.53M]
  ------------------
  609|      0|        case PpAtomConstFloat:         parserToken->d = ppToken.dval;       return EHTokFloatConstant;
  ------------------
  |  Branch (609:9): [True: 0, False: 5.53M]
  ------------------
  610|      0|        case PpAtomConstDouble:        parserToken->d = ppToken.dval;       return EHTokDoubleConstant;
  ------------------
  |  Branch (610:9): [True: 0, False: 5.53M]
  ------------------
  611|  2.24M|        case PpAtomIdentifier:
  ------------------
  |  Branch (611:9): [True: 2.24M, False: 3.29M]
  ------------------
  612|  2.24M|        {
  613|  2.24M|            EHlslTokenClass token = tokenizeIdentifier();
  614|  2.24M|            return token;
  615|      0|        }
  616|       |
  617|      0|        case PpAtomConstString: {
  ------------------
  |  Branch (617:9): [True: 0, False: 5.53M]
  ------------------
  618|      0|            parserToken->string = NewPoolTString(tokenText);
  619|      0|            return EHTokStringConstant;
  620|      0|        }
  621|       |
  622|      0|        case EndOfInput:               return EHTokNone;
  ------------------
  |  Branch (622:9): [True: 0, False: 5.53M]
  ------------------
  623|       |
  624|  1.05M|        default:
  ------------------
  |  Branch (624:9): [True: 1.05M, False: 4.48M]
  ------------------
  625|  1.05M|            if (token < PpAtomMaxSingle) {
  ------------------
  |  Branch (625:17): [True: 1.20k, False: 1.04M]
  ------------------
  626|  1.20k|                char buf[2];
  627|  1.20k|                buf[0] = (char)token;
  628|  1.20k|                buf[1] = 0;
  629|  1.20k|                parseContext.error(loc, "unexpected token", buf, "");
  630|  1.04M|            } else if (tokenText[0] != 0)
  ------------------
  |  Branch (630:24): [True: 1.04M, False: 0]
  ------------------
  631|  1.04M|                parseContext.error(loc, "unexpected token", tokenText, "");
  632|      0|            else
  633|      0|                parseContext.error(loc, "unexpected token", "", "");
  634|  1.05M|            break;
  635|  5.53M|        }
  636|  5.53M|    } while (true);
  ------------------
  |  Branch (636:14): [True: 1.05M, Folded]
  ------------------
  637|  4.48M|}
_ZN7glslang15HlslScanContext18tokenizeIdentifierEv:
  640|  2.24M|{
  641|  2.24M|    if (ReservedSet.find(tokenText) != ReservedSet.end())
  ------------------
  |  Branch (641:9): [True: 0, False: 2.24M]
  ------------------
  642|      0|        return reservedWord();
  643|       |
  644|  2.24M|    auto it = KeywordMap.find(tokenText);
  645|  2.24M|    if (it == KeywordMap.end()) {
  ------------------
  |  Branch (645:9): [True: 481k, False: 1.76M]
  ------------------
  646|       |        // Should have an identifier of some sort
  647|   481k|        return identifierOrType();
  648|   481k|    }
  649|  1.76M|    keyword = it->second;
  650|       |
  651|  1.76M|    switch (keyword) {
  652|       |
  653|       |    // qualifiers
  654|      0|    case EHTokStatic:
  ------------------
  |  Branch (654:5): [True: 0, False: 1.76M]
  ------------------
  655|      1|    case EHTokConst:
  ------------------
  |  Branch (655:5): [True: 1, False: 1.76M]
  ------------------
  656|      1|    case EHTokSNorm:
  ------------------
  |  Branch (656:5): [True: 0, False: 1.76M]
  ------------------
  657|      1|    case EHTokUnorm:
  ------------------
  |  Branch (657:5): [True: 0, False: 1.76M]
  ------------------
  658|      1|    case EHTokExtern:
  ------------------
  |  Branch (658:5): [True: 0, False: 1.76M]
  ------------------
  659|      1|    case EHTokUniform:
  ------------------
  |  Branch (659:5): [True: 0, False: 1.76M]
  ------------------
  660|      1|    case EHTokVolatile:
  ------------------
  |  Branch (660:5): [True: 0, False: 1.76M]
  ------------------
  661|      1|    case EHTokShared:
  ------------------
  |  Branch (661:5): [True: 0, False: 1.76M]
  ------------------
  662|      1|    case EHTokGroupShared:
  ------------------
  |  Branch (662:5): [True: 0, False: 1.76M]
  ------------------
  663|      1|    case EHTokLinear:
  ------------------
  |  Branch (663:5): [True: 0, False: 1.76M]
  ------------------
  664|      1|    case EHTokCentroid:
  ------------------
  |  Branch (664:5): [True: 0, False: 1.76M]
  ------------------
  665|      1|    case EHTokNointerpolation:
  ------------------
  |  Branch (665:5): [True: 0, False: 1.76M]
  ------------------
  666|      1|    case EHTokNoperspective:
  ------------------
  |  Branch (666:5): [True: 0, False: 1.76M]
  ------------------
  667|      1|    case EHTokSample:
  ------------------
  |  Branch (667:5): [True: 0, False: 1.76M]
  ------------------
  668|      1|    case EHTokRowMajor:
  ------------------
  |  Branch (668:5): [True: 0, False: 1.76M]
  ------------------
  669|      1|    case EHTokColumnMajor:
  ------------------
  |  Branch (669:5): [True: 0, False: 1.76M]
  ------------------
  670|      1|    case EHTokPackOffset:
  ------------------
  |  Branch (670:5): [True: 0, False: 1.76M]
  ------------------
  671|      1|    case EHTokIn:
  ------------------
  |  Branch (671:5): [True: 0, False: 1.76M]
  ------------------
  672|   104k|    case EHTokOut:
  ------------------
  |  Branch (672:5): [True: 104k, False: 1.66M]
  ------------------
  673|   104k|    case EHTokInOut:
  ------------------
  |  Branch (673:5): [True: 0, False: 1.76M]
  ------------------
  674|   104k|    case EHTokPrecise:
  ------------------
  |  Branch (674:5): [True: 0, False: 1.76M]
  ------------------
  675|   104k|    case EHTokLayout:
  ------------------
  |  Branch (675:5): [True: 0, False: 1.76M]
  ------------------
  676|   104k|    case EHTokGloballyCoherent:
  ------------------
  |  Branch (676:5): [True: 0, False: 1.76M]
  ------------------
  677|   104k|    case EHTokInline:
  ------------------
  |  Branch (677:5): [True: 0, False: 1.76M]
  ------------------
  678|   104k|        return keyword;
  679|       |
  680|       |    // primitive types
  681|      0|    case EHTokPoint:
  ------------------
  |  Branch (681:5): [True: 0, False: 1.76M]
  ------------------
  682|      0|    case EHTokLine:
  ------------------
  |  Branch (682:5): [True: 0, False: 1.76M]
  ------------------
  683|      0|    case EHTokTriangle:
  ------------------
  |  Branch (683:5): [True: 0, False: 1.76M]
  ------------------
  684|      0|    case EHTokLineAdj:
  ------------------
  |  Branch (684:5): [True: 0, False: 1.76M]
  ------------------
  685|      0|    case EHTokTriangleAdj:
  ------------------
  |  Branch (685:5): [True: 0, False: 1.76M]
  ------------------
  686|      0|        return keyword;
  687|       |
  688|       |    // stream out types
  689|      0|    case EHTokPointStream:
  ------------------
  |  Branch (689:5): [True: 0, False: 1.76M]
  ------------------
  690|      0|    case EHTokLineStream:
  ------------------
  |  Branch (690:5): [True: 0, False: 1.76M]
  ------------------
  691|      0|    case EHTokTriangleStream:
  ------------------
  |  Branch (691:5): [True: 0, False: 1.76M]
  ------------------
  692|      0|        return keyword;
  693|       |
  694|       |    // Tessellation patches
  695|      0|    case EHTokInputPatch:
  ------------------
  |  Branch (695:5): [True: 0, False: 1.76M]
  ------------------
  696|      0|    case EHTokOutputPatch:
  ------------------
  |  Branch (696:5): [True: 0, False: 1.76M]
  ------------------
  697|      0|        return keyword;
  698|       |
  699|    360|    case EHTokBuffer:
  ------------------
  |  Branch (699:5): [True: 360, False: 1.76M]
  ------------------
  700|    360|    case EHTokVector:
  ------------------
  |  Branch (700:5): [True: 0, False: 1.76M]
  ------------------
  701|    360|    case EHTokMatrix:
  ------------------
  |  Branch (701:5): [True: 0, False: 1.76M]
  ------------------
  702|    360|        return keyword;
  703|       |
  704|       |    // scalar types
  705|   111k|    case EHTokVoid:
  ------------------
  |  Branch (705:5): [True: 111k, False: 1.65M]
  ------------------
  706|   111k|    case EHTokString:
  ------------------
  |  Branch (706:5): [True: 0, False: 1.76M]
  ------------------
  707|   134k|    case EHTokBool:
  ------------------
  |  Branch (707:5): [True: 23.1k, False: 1.74M]
  ------------------
  708|   165k|    case EHTokInt:
  ------------------
  |  Branch (708:5): [True: 30.9k, False: 1.73M]
  ------------------
  709|   226k|    case EHTokUint:
  ------------------
  |  Branch (709:5): [True: 60.7k, False: 1.70M]
  ------------------
  710|   226k|    case EHTokUint64:
  ------------------
  |  Branch (710:5): [True: 5, False: 1.76M]
  ------------------
  711|   226k|    case EHTokDword:
  ------------------
  |  Branch (711:5): [True: 0, False: 1.76M]
  ------------------
  712|   226k|    case EHTokHalf:
  ------------------
  |  Branch (712:5): [True: 0, False: 1.76M]
  ------------------
  713|   339k|    case EHTokFloat:
  ------------------
  |  Branch (713:5): [True: 113k, False: 1.65M]
  ------------------
  714|   345k|    case EHTokDouble:
  ------------------
  |  Branch (714:5): [True: 5.40k, False: 1.76M]
  ------------------
  715|   345k|    case EHTokMin16float:
  ------------------
  |  Branch (715:5): [True: 0, False: 1.76M]
  ------------------
  716|   345k|    case EHTokMin10float:
  ------------------
  |  Branch (716:5): [True: 0, False: 1.76M]
  ------------------
  717|   345k|    case EHTokMin16int:
  ------------------
  |  Branch (717:5): [True: 0, False: 1.76M]
  ------------------
  718|   345k|    case EHTokMin12int:
  ------------------
  |  Branch (718:5): [True: 0, False: 1.76M]
  ------------------
  719|   345k|    case EHTokMin16uint:
  ------------------
  |  Branch (719:5): [True: 0, False: 1.76M]
  ------------------
  720|       |
  721|       |    // vector types
  722|   345k|    case EHTokBool1:
  ------------------
  |  Branch (722:5): [True: 0, False: 1.76M]
  ------------------
  723|   345k|    case EHTokBool2:
  ------------------
  |  Branch (723:5): [True: 720, False: 1.76M]
  ------------------
  724|   346k|    case EHTokBool3:
  ------------------
  |  Branch (724:5): [True: 720, False: 1.76M]
  ------------------
  725|   347k|    case EHTokBool4:
  ------------------
  |  Branch (725:5): [True: 720, False: 1.76M]
  ------------------
  726|   356k|    case EHTokFloat1:
  ------------------
  |  Branch (726:5): [True: 9.36k, False: 1.75M]
  ------------------
  727|   433k|    case EHTokFloat2:
  ------------------
  |  Branch (727:5): [True: 77.1k, False: 1.68M]
  ------------------
  728|   499k|    case EHTokFloat3:
  ------------------
  |  Branch (728:5): [True: 65.8k, False: 1.70M]
  ------------------
  729|   568k|    case EHTokFloat4:
  ------------------
  |  Branch (729:5): [True: 68.7k, False: 1.69M]
  ------------------
  730|   574k|    case EHTokInt1:
  ------------------
  |  Branch (730:5): [True: 6.48k, False: 1.75M]
  ------------------
  731|   682k|    case EHTokInt2:
  ------------------
  |  Branch (731:5): [True: 107k, False: 1.65M]
  ------------------
  732|   703k|    case EHTokInt3:
  ------------------
  |  Branch (732:5): [True: 21.2k, False: 1.74M]
  ------------------
  733|   747k|    case EHTokInt4:
  ------------------
  |  Branch (733:5): [True: 44.0k, False: 1.72M]
  ------------------
  734|   747k|    case EHTokDouble1:
  ------------------
  |  Branch (734:5): [True: 0, False: 1.76M]
  ------------------
  735|   752k|    case EHTokDouble2:
  ------------------
  |  Branch (735:5): [True: 5.40k, False: 1.76M]
  ------------------
  736|   758k|    case EHTokDouble3:
  ------------------
  |  Branch (736:5): [True: 5.16k, False: 1.76M]
  ------------------
  737|   763k|    case EHTokDouble4:
  ------------------
  |  Branch (737:5): [True: 5.16k, False: 1.76M]
  ------------------
  738|   769k|    case EHTokUint1:
  ------------------
  |  Branch (738:5): [True: 6.24k, False: 1.76M]
  ------------------
  739|   801k|    case EHTokUint2:
  ------------------
  |  Branch (739:5): [True: 32.0k, False: 1.73M]
  ------------------
  740|   817k|    case EHTokUint3:
  ------------------
  |  Branch (740:5): [True: 15.6k, False: 1.75M]
  ------------------
  741|   859k|    case EHTokUint4:
  ------------------
  |  Branch (741:5): [True: 42.6k, False: 1.72M]
  ------------------
  742|   859k|    case EHTokHalf1:
  ------------------
  |  Branch (742:5): [True: 0, False: 1.76M]
  ------------------
  743|   859k|    case EHTokHalf2:
  ------------------
  |  Branch (743:5): [True: 0, False: 1.76M]
  ------------------
  744|   859k|    case EHTokHalf3:
  ------------------
  |  Branch (744:5): [True: 0, False: 1.76M]
  ------------------
  745|   859k|    case EHTokHalf4:
  ------------------
  |  Branch (745:5): [True: 0, False: 1.76M]
  ------------------
  746|   859k|    case EHTokMin16float1:
  ------------------
  |  Branch (746:5): [True: 0, False: 1.76M]
  ------------------
  747|   859k|    case EHTokMin16float2:
  ------------------
  |  Branch (747:5): [True: 0, False: 1.76M]
  ------------------
  748|   859k|    case EHTokMin16float3:
  ------------------
  |  Branch (748:5): [True: 0, False: 1.76M]
  ------------------
  749|   859k|    case EHTokMin16float4:
  ------------------
  |  Branch (749:5): [True: 0, False: 1.76M]
  ------------------
  750|   859k|    case EHTokMin10float1:
  ------------------
  |  Branch (750:5): [True: 0, False: 1.76M]
  ------------------
  751|   859k|    case EHTokMin10float2:
  ------------------
  |  Branch (751:5): [True: 0, False: 1.76M]
  ------------------
  752|   859k|    case EHTokMin10float3:
  ------------------
  |  Branch (752:5): [True: 0, False: 1.76M]
  ------------------
  753|   859k|    case EHTokMin10float4:
  ------------------
  |  Branch (753:5): [True: 0, False: 1.76M]
  ------------------
  754|   859k|    case EHTokMin16int1:
  ------------------
  |  Branch (754:5): [True: 0, False: 1.76M]
  ------------------
  755|   859k|    case EHTokMin16int2:
  ------------------
  |  Branch (755:5): [True: 0, False: 1.76M]
  ------------------
  756|   859k|    case EHTokMin16int3:
  ------------------
  |  Branch (756:5): [True: 0, False: 1.76M]
  ------------------
  757|   859k|    case EHTokMin16int4:
  ------------------
  |  Branch (757:5): [True: 0, False: 1.76M]
  ------------------
  758|   859k|    case EHTokMin12int1:
  ------------------
  |  Branch (758:5): [True: 0, False: 1.76M]
  ------------------
  759|   859k|    case EHTokMin12int2:
  ------------------
  |  Branch (759:5): [True: 0, False: 1.76M]
  ------------------
  760|   859k|    case EHTokMin12int3:
  ------------------
  |  Branch (760:5): [True: 0, False: 1.76M]
  ------------------
  761|   859k|    case EHTokMin12int4:
  ------------------
  |  Branch (761:5): [True: 0, False: 1.76M]
  ------------------
  762|   859k|    case EHTokMin16uint1:
  ------------------
  |  Branch (762:5): [True: 0, False: 1.76M]
  ------------------
  763|   859k|    case EHTokMin16uint2:
  ------------------
  |  Branch (763:5): [True: 0, False: 1.76M]
  ------------------
  764|   859k|    case EHTokMin16uint3:
  ------------------
  |  Branch (764:5): [True: 0, False: 1.76M]
  ------------------
  765|   859k|    case EHTokMin16uint4:
  ------------------
  |  Branch (765:5): [True: 0, False: 1.76M]
  ------------------
  766|       |
  767|       |    // matrix types
  768|   860k|    case EHTokBool1x1:
  ------------------
  |  Branch (768:5): [True: 960, False: 1.76M]
  ------------------
  769|   861k|    case EHTokBool1x2:
  ------------------
  |  Branch (769:5): [True: 960, False: 1.76M]
  ------------------
  770|   862k|    case EHTokBool1x3:
  ------------------
  |  Branch (770:5): [True: 960, False: 1.76M]
  ------------------
  771|   863k|    case EHTokBool1x4:
  ------------------
  |  Branch (771:5): [True: 960, False: 1.76M]
  ------------------
  772|   864k|    case EHTokBool2x1:
  ------------------
  |  Branch (772:5): [True: 960, False: 1.76M]
  ------------------
  773|   865k|    case EHTokBool2x2:
  ------------------
  |  Branch (773:5): [True: 960, False: 1.76M]
  ------------------
  774|   866k|    case EHTokBool2x3:
  ------------------
  |  Branch (774:5): [True: 960, False: 1.76M]
  ------------------
  775|   867k|    case EHTokBool2x4:
  ------------------
  |  Branch (775:5): [True: 960, False: 1.76M]
  ------------------
  776|   868k|    case EHTokBool3x1:
  ------------------
  |  Branch (776:5): [True: 960, False: 1.76M]
  ------------------
  777|   869k|    case EHTokBool3x2:
  ------------------
  |  Branch (777:5): [True: 960, False: 1.76M]
  ------------------
  778|   870k|    case EHTokBool3x3:
  ------------------
  |  Branch (778:5): [True: 960, False: 1.76M]
  ------------------
  779|   871k|    case EHTokBool3x4:
  ------------------
  |  Branch (779:5): [True: 960, False: 1.76M]
  ------------------
  780|   872k|    case EHTokBool4x1:
  ------------------
  |  Branch (780:5): [True: 960, False: 1.76M]
  ------------------
  781|   873k|    case EHTokBool4x2:
  ------------------
  |  Branch (781:5): [True: 960, False: 1.76M]
  ------------------
  782|   874k|    case EHTokBool4x3:
  ------------------
  |  Branch (782:5): [True: 960, False: 1.76M]
  ------------------
  783|   875k|    case EHTokBool4x4:
  ------------------
  |  Branch (783:5): [True: 960, False: 1.76M]
  ------------------
  784|   884k|    case EHTokInt1x1:
  ------------------
  |  Branch (784:5): [True: 9.12k, False: 1.75M]
  ------------------
  785|   893k|    case EHTokInt1x2:
  ------------------
  |  Branch (785:5): [True: 9.12k, False: 1.75M]
  ------------------
  786|   902k|    case EHTokInt1x3:
  ------------------
  |  Branch (786:5): [True: 9.12k, False: 1.75M]
  ------------------
  787|   911k|    case EHTokInt1x4:
  ------------------
  |  Branch (787:5): [True: 9.12k, False: 1.75M]
  ------------------
  788|   920k|    case EHTokInt2x1:
  ------------------
  |  Branch (788:5): [True: 9.12k, False: 1.75M]
  ------------------
  789|   929k|    case EHTokInt2x2:
  ------------------
  |  Branch (789:5): [True: 9.12k, False: 1.75M]
  ------------------
  790|   938k|    case EHTokInt2x3:
  ------------------
  |  Branch (790:5): [True: 9.12k, False: 1.75M]
  ------------------
  791|   947k|    case EHTokInt2x4:
  ------------------
  |  Branch (791:5): [True: 9.12k, False: 1.75M]
  ------------------
  792|   957k|    case EHTokInt3x1:
  ------------------
  |  Branch (792:5): [True: 9.12k, False: 1.75M]
  ------------------
  793|   966k|    case EHTokInt3x2:
  ------------------
  |  Branch (793:5): [True: 9.12k, False: 1.75M]
  ------------------
  794|   975k|    case EHTokInt3x3:
  ------------------
  |  Branch (794:5): [True: 9.12k, False: 1.75M]
  ------------------
  795|   984k|    case EHTokInt3x4:
  ------------------
  |  Branch (795:5): [True: 9.12k, False: 1.75M]
  ------------------
  796|   993k|    case EHTokInt4x1:
  ------------------
  |  Branch (796:5): [True: 9.12k, False: 1.75M]
  ------------------
  797|  1.00M|    case EHTokInt4x2:
  ------------------
  |  Branch (797:5): [True: 9.12k, False: 1.75M]
  ------------------
  798|  1.01M|    case EHTokInt4x3:
  ------------------
  |  Branch (798:5): [True: 9.12k, False: 1.75M]
  ------------------
  799|  1.02M|    case EHTokInt4x4:
  ------------------
  |  Branch (799:5): [True: 9.12k, False: 1.75M]
  ------------------
  800|  1.02M|    case EHTokUint1x1:
  ------------------
  |  Branch (800:5): [True: 8.40k, False: 1.75M]
  ------------------
  801|  1.03M|    case EHTokUint1x2:
  ------------------
  |  Branch (801:5): [True: 8.40k, False: 1.75M]
  ------------------
  802|  1.04M|    case EHTokUint1x3:
  ------------------
  |  Branch (802:5): [True: 8.40k, False: 1.75M]
  ------------------
  803|  1.05M|    case EHTokUint1x4:
  ------------------
  |  Branch (803:5): [True: 8.40k, False: 1.75M]
  ------------------
  804|  1.06M|    case EHTokUint2x1:
  ------------------
  |  Branch (804:5): [True: 8.40k, False: 1.75M]
  ------------------
  805|  1.07M|    case EHTokUint2x2:
  ------------------
  |  Branch (805:5): [True: 8.40k, False: 1.75M]
  ------------------
  806|  1.07M|    case EHTokUint2x3:
  ------------------
  |  Branch (806:5): [True: 8.40k, False: 1.75M]
  ------------------
  807|  1.08M|    case EHTokUint2x4:
  ------------------
  |  Branch (807:5): [True: 8.40k, False: 1.75M]
  ------------------
  808|  1.09M|    case EHTokUint3x1:
  ------------------
  |  Branch (808:5): [True: 8.40k, False: 1.75M]
  ------------------
  809|  1.10M|    case EHTokUint3x2:
  ------------------
  |  Branch (809:5): [True: 8.40k, False: 1.75M]
  ------------------
  810|  1.11M|    case EHTokUint3x3:
  ------------------
  |  Branch (810:5): [True: 8.40k, False: 1.75M]
  ------------------
  811|  1.12M|    case EHTokUint3x4:
  ------------------
  |  Branch (811:5): [True: 8.40k, False: 1.75M]
  ------------------
  812|  1.13M|    case EHTokUint4x1:
  ------------------
  |  Branch (812:5): [True: 8.40k, False: 1.75M]
  ------------------
  813|  1.13M|    case EHTokUint4x2:
  ------------------
  |  Branch (813:5): [True: 8.40k, False: 1.75M]
  ------------------
  814|  1.14M|    case EHTokUint4x3:
  ------------------
  |  Branch (814:5): [True: 8.40k, False: 1.75M]
  ------------------
  815|  1.15M|    case EHTokUint4x4:
  ------------------
  |  Branch (815:5): [True: 8.40k, False: 1.75M]
  ------------------
  816|  1.17M|    case EHTokFloat1x1:
  ------------------
  |  Branch (816:5): [True: 19.4k, False: 1.74M]
  ------------------
  817|  1.19M|    case EHTokFloat1x2:
  ------------------
  |  Branch (817:5): [True: 19.4k, False: 1.74M]
  ------------------
  818|  1.21M|    case EHTokFloat1x3:
  ------------------
  |  Branch (818:5): [True: 19.4k, False: 1.74M]
  ------------------
  819|  1.23M|    case EHTokFloat1x4:
  ------------------
  |  Branch (819:5): [True: 19.4k, False: 1.74M]
  ------------------
  820|  1.25M|    case EHTokFloat2x1:
  ------------------
  |  Branch (820:5): [True: 19.4k, False: 1.74M]
  ------------------
  821|  1.27M|    case EHTokFloat2x2:
  ------------------
  |  Branch (821:5): [True: 19.4k, False: 1.74M]
  ------------------
  822|  1.29M|    case EHTokFloat2x3:
  ------------------
  |  Branch (822:5): [True: 19.4k, False: 1.74M]
  ------------------
  823|  1.31M|    case EHTokFloat2x4:
  ------------------
  |  Branch (823:5): [True: 19.4k, False: 1.74M]
  ------------------
  824|  1.33M|    case EHTokFloat3x1:
  ------------------
  |  Branch (824:5): [True: 19.4k, False: 1.74M]
  ------------------
  825|  1.34M|    case EHTokFloat3x2:
  ------------------
  |  Branch (825:5): [True: 19.4k, False: 1.74M]
  ------------------
  826|  1.36M|    case EHTokFloat3x3:
  ------------------
  |  Branch (826:5): [True: 19.4k, False: 1.74M]
  ------------------
  827|  1.38M|    case EHTokFloat3x4:
  ------------------
  |  Branch (827:5): [True: 19.4k, False: 1.74M]
  ------------------
  828|  1.40M|    case EHTokFloat4x1:
  ------------------
  |  Branch (828:5): [True: 19.4k, False: 1.74M]
  ------------------
  829|  1.42M|    case EHTokFloat4x2:
  ------------------
  |  Branch (829:5): [True: 19.4k, False: 1.74M]
  ------------------
  830|  1.44M|    case EHTokFloat4x3:
  ------------------
  |  Branch (830:5): [True: 19.4k, False: 1.74M]
  ------------------
  831|  1.46M|    case EHTokFloat4x4:
  ------------------
  |  Branch (831:5): [True: 19.4k, False: 1.74M]
  ------------------
  832|  1.46M|    case EHTokHalf1x1:
  ------------------
  |  Branch (832:5): [True: 0, False: 1.76M]
  ------------------
  833|  1.46M|    case EHTokHalf1x2:
  ------------------
  |  Branch (833:5): [True: 0, False: 1.76M]
  ------------------
  834|  1.46M|    case EHTokHalf1x3:
  ------------------
  |  Branch (834:5): [True: 0, False: 1.76M]
  ------------------
  835|  1.46M|    case EHTokHalf1x4:
  ------------------
  |  Branch (835:5): [True: 0, False: 1.76M]
  ------------------
  836|  1.46M|    case EHTokHalf2x1:
  ------------------
  |  Branch (836:5): [True: 0, False: 1.76M]
  ------------------
  837|  1.46M|    case EHTokHalf2x2:
  ------------------
  |  Branch (837:5): [True: 0, False: 1.76M]
  ------------------
  838|  1.46M|    case EHTokHalf2x3:
  ------------------
  |  Branch (838:5): [True: 0, False: 1.76M]
  ------------------
  839|  1.46M|    case EHTokHalf2x4:
  ------------------
  |  Branch (839:5): [True: 0, False: 1.76M]
  ------------------
  840|  1.46M|    case EHTokHalf3x1:
  ------------------
  |  Branch (840:5): [True: 0, False: 1.76M]
  ------------------
  841|  1.46M|    case EHTokHalf3x2:
  ------------------
  |  Branch (841:5): [True: 0, False: 1.76M]
  ------------------
  842|  1.46M|    case EHTokHalf3x3:
  ------------------
  |  Branch (842:5): [True: 0, False: 1.76M]
  ------------------
  843|  1.46M|    case EHTokHalf3x4:
  ------------------
  |  Branch (843:5): [True: 0, False: 1.76M]
  ------------------
  844|  1.46M|    case EHTokHalf4x1:
  ------------------
  |  Branch (844:5): [True: 0, False: 1.76M]
  ------------------
  845|  1.46M|    case EHTokHalf4x2:
  ------------------
  |  Branch (845:5): [True: 0, False: 1.76M]
  ------------------
  846|  1.46M|    case EHTokHalf4x3:
  ------------------
  |  Branch (846:5): [True: 0, False: 1.76M]
  ------------------
  847|  1.46M|    case EHTokHalf4x4:
  ------------------
  |  Branch (847:5): [True: 0, False: 1.76M]
  ------------------
  848|  1.46M|    case EHTokDouble1x1:
  ------------------
  |  Branch (848:5): [True: 1.44k, False: 1.76M]
  ------------------
  849|  1.46M|    case EHTokDouble1x2:
  ------------------
  |  Branch (849:5): [True: 1.44k, False: 1.76M]
  ------------------
  850|  1.47M|    case EHTokDouble1x3:
  ------------------
  |  Branch (850:5): [True: 1.44k, False: 1.76M]
  ------------------
  851|  1.47M|    case EHTokDouble1x4:
  ------------------
  |  Branch (851:5): [True: 1.44k, False: 1.76M]
  ------------------
  852|  1.47M|    case EHTokDouble2x1:
  ------------------
  |  Branch (852:5): [True: 1.44k, False: 1.76M]
  ------------------
  853|  1.47M|    case EHTokDouble2x2:
  ------------------
  |  Branch (853:5): [True: 1.44k, False: 1.76M]
  ------------------
  854|  1.47M|    case EHTokDouble2x3:
  ------------------
  |  Branch (854:5): [True: 1.44k, False: 1.76M]
  ------------------
  855|  1.47M|    case EHTokDouble2x4:
  ------------------
  |  Branch (855:5): [True: 1.44k, False: 1.76M]
  ------------------
  856|  1.47M|    case EHTokDouble3x1:
  ------------------
  |  Branch (856:5): [True: 1.44k, False: 1.76M]
  ------------------
  857|  1.48M|    case EHTokDouble3x2:
  ------------------
  |  Branch (857:5): [True: 1.44k, False: 1.76M]
  ------------------
  858|  1.48M|    case EHTokDouble3x3:
  ------------------
  |  Branch (858:5): [True: 1.44k, False: 1.76M]
  ------------------
  859|  1.48M|    case EHTokDouble3x4:
  ------------------
  |  Branch (859:5): [True: 1.44k, False: 1.76M]
  ------------------
  860|  1.48M|    case EHTokDouble4x1:
  ------------------
  |  Branch (860:5): [True: 1.44k, False: 1.76M]
  ------------------
  861|  1.48M|    case EHTokDouble4x2:
  ------------------
  |  Branch (861:5): [True: 1.44k, False: 1.76M]
  ------------------
  862|  1.48M|    case EHTokDouble4x3:
  ------------------
  |  Branch (862:5): [True: 1.44k, False: 1.76M]
  ------------------
  863|  1.48M|    case EHTokDouble4x4:
  ------------------
  |  Branch (863:5): [True: 1.44k, False: 1.76M]
  ------------------
  864|  1.48M|    case EHTokMin16float1x1:
  ------------------
  |  Branch (864:5): [True: 0, False: 1.76M]
  ------------------
  865|  1.48M|    case EHTokMin16float1x2:
  ------------------
  |  Branch (865:5): [True: 0, False: 1.76M]
  ------------------
  866|  1.48M|    case EHTokMin16float1x3:
  ------------------
  |  Branch (866:5): [True: 0, False: 1.76M]
  ------------------
  867|  1.48M|    case EHTokMin16float1x4:
  ------------------
  |  Branch (867:5): [True: 0, False: 1.76M]
  ------------------
  868|  1.48M|    case EHTokMin16float2x1:
  ------------------
  |  Branch (868:5): [True: 0, False: 1.76M]
  ------------------
  869|  1.48M|    case EHTokMin16float2x2:
  ------------------
  |  Branch (869:5): [True: 0, False: 1.76M]
  ------------------
  870|  1.48M|    case EHTokMin16float2x3:
  ------------------
  |  Branch (870:5): [True: 0, False: 1.76M]
  ------------------
  871|  1.48M|    case EHTokMin16float2x4:
  ------------------
  |  Branch (871:5): [True: 0, False: 1.76M]
  ------------------
  872|  1.48M|    case EHTokMin16float3x1:
  ------------------
  |  Branch (872:5): [True: 0, False: 1.76M]
  ------------------
  873|  1.48M|    case EHTokMin16float3x2:
  ------------------
  |  Branch (873:5): [True: 0, False: 1.76M]
  ------------------
  874|  1.48M|    case EHTokMin16float3x3:
  ------------------
  |  Branch (874:5): [True: 0, False: 1.76M]
  ------------------
  875|  1.48M|    case EHTokMin16float3x4:
  ------------------
  |  Branch (875:5): [True: 0, False: 1.76M]
  ------------------
  876|  1.48M|    case EHTokMin16float4x1:
  ------------------
  |  Branch (876:5): [True: 0, False: 1.76M]
  ------------------
  877|  1.48M|    case EHTokMin16float4x2:
  ------------------
  |  Branch (877:5): [True: 0, False: 1.76M]
  ------------------
  878|  1.48M|    case EHTokMin16float4x3:
  ------------------
  |  Branch (878:5): [True: 0, False: 1.76M]
  ------------------
  879|  1.48M|    case EHTokMin16float4x4:
  ------------------
  |  Branch (879:5): [True: 0, False: 1.76M]
  ------------------
  880|  1.48M|    case EHTokMin10float1x1:
  ------------------
  |  Branch (880:5): [True: 0, False: 1.76M]
  ------------------
  881|  1.48M|    case EHTokMin10float1x2:
  ------------------
  |  Branch (881:5): [True: 0, False: 1.76M]
  ------------------
  882|  1.48M|    case EHTokMin10float1x3:
  ------------------
  |  Branch (882:5): [True: 0, False: 1.76M]
  ------------------
  883|  1.48M|    case EHTokMin10float1x4:
  ------------------
  |  Branch (883:5): [True: 0, False: 1.76M]
  ------------------
  884|  1.48M|    case EHTokMin10float2x1:
  ------------------
  |  Branch (884:5): [True: 0, False: 1.76M]
  ------------------
  885|  1.48M|    case EHTokMin10float2x2:
  ------------------
  |  Branch (885:5): [True: 0, False: 1.76M]
  ------------------
  886|  1.48M|    case EHTokMin10float2x3:
  ------------------
  |  Branch (886:5): [True: 0, False: 1.76M]
  ------------------
  887|  1.48M|    case EHTokMin10float2x4:
  ------------------
  |  Branch (887:5): [True: 0, False: 1.76M]
  ------------------
  888|  1.48M|    case EHTokMin10float3x1:
  ------------------
  |  Branch (888:5): [True: 0, False: 1.76M]
  ------------------
  889|  1.48M|    case EHTokMin10float3x2:
  ------------------
  |  Branch (889:5): [True: 0, False: 1.76M]
  ------------------
  890|  1.48M|    case EHTokMin10float3x3:
  ------------------
  |  Branch (890:5): [True: 0, False: 1.76M]
  ------------------
  891|  1.48M|    case EHTokMin10float3x4:
  ------------------
  |  Branch (891:5): [True: 0, False: 1.76M]
  ------------------
  892|  1.48M|    case EHTokMin10float4x1:
  ------------------
  |  Branch (892:5): [True: 0, False: 1.76M]
  ------------------
  893|  1.48M|    case EHTokMin10float4x2:
  ------------------
  |  Branch (893:5): [True: 0, False: 1.76M]
  ------------------
  894|  1.48M|    case EHTokMin10float4x3:
  ------------------
  |  Branch (894:5): [True: 0, False: 1.76M]
  ------------------
  895|  1.48M|    case EHTokMin10float4x4:
  ------------------
  |  Branch (895:5): [True: 0, False: 1.76M]
  ------------------
  896|  1.48M|    case EHTokMin16int1x1:
  ------------------
  |  Branch (896:5): [True: 0, False: 1.76M]
  ------------------
  897|  1.48M|    case EHTokMin16int1x2:
  ------------------
  |  Branch (897:5): [True: 0, False: 1.76M]
  ------------------
  898|  1.48M|    case EHTokMin16int1x3:
  ------------------
  |  Branch (898:5): [True: 0, False: 1.76M]
  ------------------
  899|  1.48M|    case EHTokMin16int1x4:
  ------------------
  |  Branch (899:5): [True: 0, False: 1.76M]
  ------------------
  900|  1.48M|    case EHTokMin16int2x1:
  ------------------
  |  Branch (900:5): [True: 0, False: 1.76M]
  ------------------
  901|  1.48M|    case EHTokMin16int2x2:
  ------------------
  |  Branch (901:5): [True: 0, False: 1.76M]
  ------------------
  902|  1.48M|    case EHTokMin16int2x3:
  ------------------
  |  Branch (902:5): [True: 0, False: 1.76M]
  ------------------
  903|  1.48M|    case EHTokMin16int2x4:
  ------------------
  |  Branch (903:5): [True: 0, False: 1.76M]
  ------------------
  904|  1.48M|    case EHTokMin16int3x1:
  ------------------
  |  Branch (904:5): [True: 0, False: 1.76M]
  ------------------
  905|  1.48M|    case EHTokMin16int3x2:
  ------------------
  |  Branch (905:5): [True: 0, False: 1.76M]
  ------------------
  906|  1.48M|    case EHTokMin16int3x3:
  ------------------
  |  Branch (906:5): [True: 0, False: 1.76M]
  ------------------
  907|  1.48M|    case EHTokMin16int3x4:
  ------------------
  |  Branch (907:5): [True: 0, False: 1.76M]
  ------------------
  908|  1.48M|    case EHTokMin16int4x1:
  ------------------
  |  Branch (908:5): [True: 0, False: 1.76M]
  ------------------
  909|  1.48M|    case EHTokMin16int4x2:
  ------------------
  |  Branch (909:5): [True: 0, False: 1.76M]
  ------------------
  910|  1.48M|    case EHTokMin16int4x3:
  ------------------
  |  Branch (910:5): [True: 0, False: 1.76M]
  ------------------
  911|  1.48M|    case EHTokMin16int4x4:
  ------------------
  |  Branch (911:5): [True: 0, False: 1.76M]
  ------------------
  912|  1.48M|    case EHTokMin12int1x1:
  ------------------
  |  Branch (912:5): [True: 0, False: 1.76M]
  ------------------
  913|  1.48M|    case EHTokMin12int1x2:
  ------------------
  |  Branch (913:5): [True: 0, False: 1.76M]
  ------------------
  914|  1.48M|    case EHTokMin12int1x3:
  ------------------
  |  Branch (914:5): [True: 0, False: 1.76M]
  ------------------
  915|  1.48M|    case EHTokMin12int1x4:
  ------------------
  |  Branch (915:5): [True: 0, False: 1.76M]
  ------------------
  916|  1.48M|    case EHTokMin12int2x1:
  ------------------
  |  Branch (916:5): [True: 0, False: 1.76M]
  ------------------
  917|  1.48M|    case EHTokMin12int2x2:
  ------------------
  |  Branch (917:5): [True: 0, False: 1.76M]
  ------------------
  918|  1.48M|    case EHTokMin12int2x3:
  ------------------
  |  Branch (918:5): [True: 0, False: 1.76M]
  ------------------
  919|  1.48M|    case EHTokMin12int2x4:
  ------------------
  |  Branch (919:5): [True: 0, False: 1.76M]
  ------------------
  920|  1.48M|    case EHTokMin12int3x1:
  ------------------
  |  Branch (920:5): [True: 0, False: 1.76M]
  ------------------
  921|  1.48M|    case EHTokMin12int3x2:
  ------------------
  |  Branch (921:5): [True: 0, False: 1.76M]
  ------------------
  922|  1.48M|    case EHTokMin12int3x3:
  ------------------
  |  Branch (922:5): [True: 0, False: 1.76M]
  ------------------
  923|  1.48M|    case EHTokMin12int3x4:
  ------------------
  |  Branch (923:5): [True: 0, False: 1.76M]
  ------------------
  924|  1.48M|    case EHTokMin12int4x1:
  ------------------
  |  Branch (924:5): [True: 0, False: 1.76M]
  ------------------
  925|  1.48M|    case EHTokMin12int4x2:
  ------------------
  |  Branch (925:5): [True: 0, False: 1.76M]
  ------------------
  926|  1.48M|    case EHTokMin12int4x3:
  ------------------
  |  Branch (926:5): [True: 0, False: 1.76M]
  ------------------
  927|  1.48M|    case EHTokMin12int4x4:
  ------------------
  |  Branch (927:5): [True: 0, False: 1.76M]
  ------------------
  928|  1.48M|    case EHTokMin16uint1x1:
  ------------------
  |  Branch (928:5): [True: 0, False: 1.76M]
  ------------------
  929|  1.48M|    case EHTokMin16uint1x2:
  ------------------
  |  Branch (929:5): [True: 0, False: 1.76M]
  ------------------
  930|  1.48M|    case EHTokMin16uint1x3:
  ------------------
  |  Branch (930:5): [True: 0, False: 1.76M]
  ------------------
  931|  1.48M|    case EHTokMin16uint1x4:
  ------------------
  |  Branch (931:5): [True: 0, False: 1.76M]
  ------------------
  932|  1.48M|    case EHTokMin16uint2x1:
  ------------------
  |  Branch (932:5): [True: 0, False: 1.76M]
  ------------------
  933|  1.48M|    case EHTokMin16uint2x2:
  ------------------
  |  Branch (933:5): [True: 0, False: 1.76M]
  ------------------
  934|  1.48M|    case EHTokMin16uint2x3:
  ------------------
  |  Branch (934:5): [True: 0, False: 1.76M]
  ------------------
  935|  1.48M|    case EHTokMin16uint2x4:
  ------------------
  |  Branch (935:5): [True: 0, False: 1.76M]
  ------------------
  936|  1.48M|    case EHTokMin16uint3x1:
  ------------------
  |  Branch (936:5): [True: 0, False: 1.76M]
  ------------------
  937|  1.48M|    case EHTokMin16uint3x2:
  ------------------
  |  Branch (937:5): [True: 0, False: 1.76M]
  ------------------
  938|  1.48M|    case EHTokMin16uint3x3:
  ------------------
  |  Branch (938:5): [True: 0, False: 1.76M]
  ------------------
  939|  1.48M|    case EHTokMin16uint3x4:
  ------------------
  |  Branch (939:5): [True: 0, False: 1.76M]
  ------------------
  940|  1.48M|    case EHTokMin16uint4x1:
  ------------------
  |  Branch (940:5): [True: 0, False: 1.76M]
  ------------------
  941|  1.48M|    case EHTokMin16uint4x2:
  ------------------
  |  Branch (941:5): [True: 0, False: 1.76M]
  ------------------
  942|  1.48M|    case EHTokMin16uint4x3:
  ------------------
  |  Branch (942:5): [True: 0, False: 1.76M]
  ------------------
  943|  1.48M|    case EHTokMin16uint4x4:
  ------------------
  |  Branch (943:5): [True: 0, False: 1.76M]
  ------------------
  944|  1.48M|        return keyword;
  945|       |
  946|       |    // texturing types
  947|  43.9k|    case EHTokSampler:
  ------------------
  |  Branch (947:5): [True: 43.9k, False: 1.72M]
  ------------------
  948|  43.9k|    case EHTokSampler1d:
  ------------------
  |  Branch (948:5): [True: 0, False: 1.76M]
  ------------------
  949|  44.6k|    case EHTokSampler2d:
  ------------------
  |  Branch (949:5): [True: 724, False: 1.76M]
  ------------------
  950|  45.3k|    case EHTokSampler3d:
  ------------------
  |  Branch (950:5): [True: 720, False: 1.76M]
  ------------------
  951|  46.0k|    case EHTokSamplerCube:
  ------------------
  |  Branch (951:5): [True: 720, False: 1.76M]
  ------------------
  952|  46.0k|    case EHTokSamplerState:
  ------------------
  |  Branch (952:5): [True: 0, False: 1.76M]
  ------------------
  953|  74.8k|    case EHTokSamplerComparisonState:
  ------------------
  |  Branch (953:5): [True: 28.8k, False: 1.73M]
  ------------------
  954|  74.8k|    case EHTokTexture:
  ------------------
  |  Branch (954:5): [True: 0, False: 1.76M]
  ------------------
  955|  82.0k|    case EHTokTexture1d:
  ------------------
  |  Branch (955:5): [True: 7.20k, False: 1.75M]
  ------------------
  956|  89.2k|    case EHTokTexture1darray:
  ------------------
  |  Branch (956:5): [True: 7.20k, False: 1.75M]
  ------------------
  957|   113k|    case EHTokTexture2d:
  ------------------
  |  Branch (957:5): [True: 24.1k, False: 1.74M]
  ------------------
  958|   137k|    case EHTokTexture2darray:
  ------------------
  |  Branch (958:5): [True: 24.1k, False: 1.74M]
  ------------------
  959|   143k|    case EHTokTexture3d:
  ------------------
  |  Branch (959:5): [True: 5.76k, False: 1.76M]
  ------------------
  960|   151k|    case EHTokTextureCube:
  ------------------
  |  Branch (960:5): [True: 7.92k, False: 1.75M]
  ------------------
  961|   159k|    case EHTokTextureCubearray:
  ------------------
  |  Branch (961:5): [True: 7.92k, False: 1.75M]
  ------------------
  962|   160k|    case EHTokTexture2DMS:
  ------------------
  |  Branch (962:5): [True: 1.80k, False: 1.76M]
  ------------------
  963|   162k|    case EHTokTexture2DMSarray:
  ------------------
  |  Branch (963:5): [True: 1.80k, False: 1.76M]
  ------------------
  964|   163k|    case EHTokRWTexture1d:
  ------------------
  |  Branch (964:5): [True: 1.08k, False: 1.76M]
  ------------------
  965|   164k|    case EHTokRWTexture1darray:
  ------------------
  |  Branch (965:5): [True: 1.08k, False: 1.76M]
  ------------------
  966|   165k|    case EHTokRWTexture2d:
  ------------------
  |  Branch (966:5): [True: 1.08k, False: 1.76M]
  ------------------
  967|   167k|    case EHTokRWTexture2darray:
  ------------------
  |  Branch (967:5): [True: 1.08k, False: 1.76M]
  ------------------
  968|   168k|    case EHTokRWTexture3d:
  ------------------
  |  Branch (968:5): [True: 1.08k, False: 1.76M]
  ------------------
  969|   169k|    case EHTokRWBuffer:
  ------------------
  |  Branch (969:5): [True: 1.08k, False: 1.76M]
  ------------------
  970|   169k|    case EHTokAppendStructuredBuffer:
  ------------------
  |  Branch (970:5): [True: 0, False: 1.76M]
  ------------------
  971|   169k|    case EHTokByteAddressBuffer:
  ------------------
  |  Branch (971:5): [True: 0, False: 1.76M]
  ------------------
  972|   169k|    case EHTokConsumeStructuredBuffer:
  ------------------
  |  Branch (972:5): [True: 0, False: 1.76M]
  ------------------
  973|   169k|    case EHTokRWByteAddressBuffer:
  ------------------
  |  Branch (973:5): [True: 0, False: 1.76M]
  ------------------
  974|   169k|    case EHTokRWStructuredBuffer:
  ------------------
  |  Branch (974:5): [True: 0, False: 1.76M]
  ------------------
  975|   169k|    case EHTokStructuredBuffer:
  ------------------
  |  Branch (975:5): [True: 0, False: 1.76M]
  ------------------
  976|   169k|    case EHTokTextureBuffer:
  ------------------
  |  Branch (976:5): [True: 0, False: 1.76M]
  ------------------
  977|   170k|    case EHTokSubpassInput:
  ------------------
  |  Branch (977:5): [True: 1.44k, False: 1.76M]
  ------------------
  978|   172k|    case EHTokSubpassInputMS:
  ------------------
  |  Branch (978:5): [True: 1.44k, False: 1.76M]
  ------------------
  979|   172k|        return keyword;
  980|       |
  981|       |    // variable, user type, ...
  982|      0|    case EHTokClass:
  ------------------
  |  Branch (982:5): [True: 0, False: 1.76M]
  ------------------
  983|      2|    case EHTokStruct:
  ------------------
  |  Branch (983:5): [True: 2, False: 1.76M]
  ------------------
  984|      2|    case EHTokTypedef:
  ------------------
  |  Branch (984:5): [True: 0, False: 1.76M]
  ------------------
  985|      2|    case EHTokCBuffer:
  ------------------
  |  Branch (985:5): [True: 0, False: 1.76M]
  ------------------
  986|      2|    case EHTokConstantBuffer:
  ------------------
  |  Branch (986:5): [True: 0, False: 1.76M]
  ------------------
  987|      2|    case EHTokTBuffer:
  ------------------
  |  Branch (987:5): [True: 0, False: 1.76M]
  ------------------
  988|      2|    case EHTokThis:
  ------------------
  |  Branch (988:5): [True: 0, False: 1.76M]
  ------------------
  989|      2|    case EHTokNamespace:
  ------------------
  |  Branch (989:5): [True: 0, False: 1.76M]
  ------------------
  990|      2|        return keyword;
  991|       |
  992|      0|    case EHTokBoolConstant:
  ------------------
  |  Branch (992:5): [True: 0, False: 1.76M]
  ------------------
  993|      0|        if (strcmp("true", tokenText) == 0)
  ------------------
  |  Branch (993:13): [True: 0, False: 0]
  ------------------
  994|      0|            parserToken->b = true;
  995|      0|        else
  996|      0|            parserToken->b = false;
  997|      0|        return keyword;
  998|       |
  999|       |    // control flow
 1000|      0|    case EHTokFor:
  ------------------
  |  Branch (1000:5): [True: 0, False: 1.76M]
  ------------------
 1001|      0|    case EHTokDo:
  ------------------
  |  Branch (1001:5): [True: 0, False: 1.76M]
  ------------------
 1002|      0|    case EHTokWhile:
  ------------------
  |  Branch (1002:5): [True: 0, False: 1.76M]
  ------------------
 1003|      0|    case EHTokBreak:
  ------------------
  |  Branch (1003:5): [True: 0, False: 1.76M]
  ------------------
 1004|      0|    case EHTokContinue:
  ------------------
  |  Branch (1004:5): [True: 0, False: 1.76M]
  ------------------
 1005|      0|    case EHTokIf:
  ------------------
  |  Branch (1005:5): [True: 0, False: 1.76M]
  ------------------
 1006|      0|    case EHTokElse:
  ------------------
  |  Branch (1006:5): [True: 0, False: 1.76M]
  ------------------
 1007|      0|    case EHTokDiscard:
  ------------------
  |  Branch (1007:5): [True: 0, False: 1.76M]
  ------------------
 1008|      0|    case EHTokReturn:
  ------------------
  |  Branch (1008:5): [True: 0, False: 1.76M]
  ------------------
 1009|      0|    case EHTokCase:
  ------------------
  |  Branch (1009:5): [True: 0, False: 1.76M]
  ------------------
 1010|      0|    case EHTokSwitch:
  ------------------
  |  Branch (1010:5): [True: 0, False: 1.76M]
  ------------------
 1011|      0|    case EHTokDefault:
  ------------------
  |  Branch (1011:5): [True: 0, False: 1.76M]
  ------------------
 1012|      0|        return keyword;
 1013|       |
 1014|      0|    default:
  ------------------
  |  Branch (1014:5): [True: 0, False: 1.76M]
  ------------------
 1015|      0|        parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
 1016|      0|        return EHTokNone;
 1017|  1.76M|    }
 1018|  1.76M|}
_ZN7glslang15HlslScanContext16identifierOrTypeEv:
 1021|   481k|{
 1022|   481k|    parserToken->string = NewPoolTString(tokenText);
 1023|       |
 1024|   481k|    return EHTokIdentifier;
 1025|   481k|}
hlslScanContext.cpp:_ZNK12_GLOBAL__N_18str_hashclEPKc:
   68|  4.49M|    {
   69|       |        // djb2
   70|  4.49M|        unsigned long hash = 5381;
   71|  4.49M|        int c;
   72|       |
   73|  36.5M|        while ((c = *str++) != 0)
  ------------------
  |  Branch (73:16): [True: 32.0M, False: 4.49M]
  ------------------
   74|  32.0M|            hash = ((hash << 5) + hash) + c;
   75|       |
   76|  4.49M|        return hash;
   77|  4.49M|    }
hlslScanContext.cpp:_ZNK12_GLOBAL__N_16str_eqclEPKcS2_:
   60|  1.76M|    {
   61|  1.76M|        return strcmp(lhs, rhs) == 0;
   62|  1.76M|    }

_ZN7glslang9HlslTokenC2Ev:
   57|  3.12M|    HlslToken() : string(nullptr) { loc.init(); }
_ZN7glslang9HlslToken14getCStrOrEmptyEv:
   69|      1|    const char* getCStrOrEmpty() {
   70|      1|      if (tokenClass == EHTokIdentifier || tokenClass == EHTokStringConstant) {
  ------------------
  |  Branch (70:11): [True: 1, False: 0]
  |  Branch (70:44): [True: 0, False: 0]
  ------------------
   71|      1|        return string->c_str();
   72|      1|      }
   73|      0|      return "";
   74|      1|    }
_ZN7glslang15HlslScanContextC2ERNS_17TParseContextBaseERNS_10TPpContextE:
   85|    240|        : parseContext(parseContext), ppContext(ppContext) { }
_ZN7glslang15HlslScanContextD2Ev:
   86|    240|    virtual ~HlslScanContext() { }

_ZN7glslang15HlslTokenStream12pushPreTokenERKNS_9HlslTokenE:
   41|  1.53k|{
   42|       |    assert(preTokenStackSize < tokenBufferSize);
   43|  1.53k|    preTokenStack[preTokenStackSize++] = tok;
   44|  1.53k|}
_ZN7glslang15HlslTokenStream11popPreTokenEv:
   47|  1.21k|{
   48|  1.21k|    assert(preTokenStackSize > 0);
   49|       |
   50|  1.21k|    return preTokenStack[--preTokenStackSize];
   51|  1.21k|}
_ZN7glslang15HlslTokenStream15pushTokenBufferERKNS_9HlslTokenE:
   54|  4.49M|{
   55|  4.49M|    tokenBuffer[tokenBufferPos] = tok;
   56|  4.49M|    tokenBufferPos = (tokenBufferPos+1) % tokenBufferSize;
   57|  4.49M|}
_ZN7glslang15HlslTokenStream14popTokenBufferEv:
   60|  1.53k|{
   61|       |    // Back up
   62|  1.53k|    tokenBufferPos = (tokenBufferPos+tokenBufferSize-1) % tokenBufferSize;
   63|       |
   64|  1.53k|    return tokenBuffer[tokenBufferPos];
   65|  1.53k|}
_ZN7glslang15HlslTokenStream12advanceTokenEv:
  102|  4.49M|{
  103|  4.49M|    pushTokenBuffer(token);
  104|  4.49M|    if (preTokenStackSize > 0)
  ------------------
  |  Branch (104:9): [True: 1.21k, False: 4.48M]
  ------------------
  105|  1.21k|        token = popPreToken();
  106|  4.48M|    else {
  107|  4.48M|        if (tokenStreamStack.size() == 0)
  ------------------
  |  Branch (107:13): [True: 4.48M, False: 0]
  ------------------
  108|  4.48M|            scanner.tokenize(token);
  109|      0|        else {
  110|      0|            ++tokenPosition.back();
  111|      0|            if (tokenPosition.back() >= (int)tokenStreamStack.back()->size())
  ------------------
  |  Branch (111:17): [True: 0, False: 0]
  ------------------
  112|      0|                token.tokenClass = EHTokNone;
  113|      0|            else
  114|      0|                token = (*tokenStreamStack.back())[tokenPosition.back()];
  115|      0|        }
  116|  4.48M|    }
  117|  4.49M|}
_ZN7glslang15HlslTokenStream11recedeTokenEv:
  120|  1.53k|{
  121|  1.53k|    pushPreToken(token);
  122|  1.53k|    token = popTokenBuffer();
  123|  1.53k|}
_ZNK7glslang15HlslTokenStream4peekEv:
  127|  26.7M|{
  128|  26.7M|    return token.tokenClass;
  129|  26.7M|}
_ZNK7glslang15HlslTokenStream14peekTokenClassENS_15EHlslTokenClassE:
  134|  18.4M|{
  135|  18.4M|    return peek() == tokenClass;
  136|  18.4M|}
_ZN7glslang15HlslTokenStream16acceptTokenClassENS_15EHlslTokenClassE:
  141|  9.32M|{
  142|  9.32M|    if (peekTokenClass(tokenClass)) {
  ------------------
  |  Branch (142:9): [True: 2.24M, False: 7.08M]
  ------------------
  143|  2.24M|        advanceToken();
  144|  2.24M|        return true;
  145|  2.24M|    }
  146|       |
  147|  7.08M|    return false;
  148|  9.32M|}

_ZN7glslang15HlslTokenStreamC2ERNS_15HlslScanContextE:
   46|    240|            : scanner(scanner), preTokenStackSize(0), tokenBufferPos(0) { }
_ZN7glslang15HlslTokenStreamD2Ev:
   47|    240|        virtual ~HlslTokenStream() { }

_ZNK7glslang20TIntermConstantUnion4foldENS_9TOperatorEPKNS_12TIntermTypedE:
   86|      8|{
   87|       |    // For most cases, the return type matches the argument type, so set that
   88|       |    // up and just code to exceptions below.
   89|      8|    TType returnType;
   90|      8|    returnType.shallowCopy(getType());
   91|       |
   92|       |    //
   93|       |    // A pair of nodes is to be folded together
   94|       |    //
   95|       |
   96|      8|    const TIntermConstantUnion *rightNode = rightConstantNode->getAsConstantUnion();
   97|      8|    TConstUnionArray leftUnionArray = getConstArray();
   98|      8|    TConstUnionArray rightUnionArray = rightNode->getConstArray();
   99|       |
  100|       |    // Figure out the size of the result
  101|      8|    int newComps;
  102|      8|    int constComps;
  103|      8|    switch(op) {
  104|      0|    case EOpMatrixTimesMatrix:
  ------------------
  |  Branch (104:5): [True: 0, False: 8]
  ------------------
  105|      0|        newComps = rightNode->getMatrixCols() * getMatrixRows();
  106|      0|        break;
  107|      0|    case EOpMatrixTimesVector:
  ------------------
  |  Branch (107:5): [True: 0, False: 8]
  ------------------
  108|      0|        newComps = getMatrixRows();
  109|      0|        break;
  110|      0|    case EOpVectorTimesMatrix:
  ------------------
  |  Branch (110:5): [True: 0, False: 8]
  ------------------
  111|      0|        newComps = rightNode->getMatrixCols();
  112|      0|        break;
  113|      8|    default:
  ------------------
  |  Branch (113:5): [True: 8, False: 0]
  ------------------
  114|      8|        newComps = getType().computeNumComponents();
  115|      8|        constComps = rightConstantNode->getType().computeNumComponents();
  116|      8|        if (constComps == 1 && newComps > 1) {
  ------------------
  |  Branch (116:13): [True: 8, False: 0]
  |  Branch (116:32): [True: 0, False: 8]
  ------------------
  117|       |            // for a case like vec4 f = vec4(2,3,4,5) + 1.2;
  118|      0|            TConstUnionArray smearedArray(newComps, rightNode->getConstArray()[0]);
  119|      0|            rightUnionArray = smearedArray;
  120|      8|        } else if (constComps > 1 && newComps == 1) {
  ------------------
  |  Branch (120:20): [True: 0, False: 8]
  |  Branch (120:38): [True: 0, False: 0]
  ------------------
  121|       |            // for a case like vec4 f = 1.2 + vec4(2,3,4,5);
  122|      0|            newComps = constComps;
  123|      0|            rightUnionArray = rightNode->getConstArray();
  124|      0|            TConstUnionArray smearedArray(newComps, getConstArray()[0]);
  125|      0|            leftUnionArray = smearedArray;
  126|      0|            returnType.shallowCopy(rightNode->getType());
  127|      0|        }
  128|      8|        break;
  129|      8|    }
  130|       |
  131|      8|    TConstUnionArray newConstArray(newComps);
  132|      8|    TType constBool(EbtBool, EvqConst);
  133|       |
  134|      8|    switch(op) {
  135|      3|    case EOpAdd:
  ------------------
  |  Branch (135:5): [True: 3, False: 5]
  ------------------
  136|      6|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (136:25): [True: 3, False: 3]
  ------------------
  137|      3|            newConstArray[i] = leftUnionArray[i] + rightUnionArray[i];
  138|      3|        break;
  139|      3|    case EOpSub:
  ------------------
  |  Branch (139:5): [True: 3, False: 5]
  ------------------
  140|      6|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (140:25): [True: 3, False: 3]
  ------------------
  141|      3|            newConstArray[i] = leftUnionArray[i] - rightUnionArray[i];
  142|      3|        break;
  143|       |
  144|      2|    case EOpMul:
  ------------------
  |  Branch (144:5): [True: 2, False: 6]
  ------------------
  145|      2|    case EOpVectorTimesScalar:
  ------------------
  |  Branch (145:5): [True: 0, False: 8]
  ------------------
  146|      2|    case EOpMatrixTimesScalar:
  ------------------
  |  Branch (146:5): [True: 0, False: 8]
  ------------------
  147|      4|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (147:25): [True: 2, False: 2]
  ------------------
  148|      2|            newConstArray[i] = leftUnionArray[i] * rightUnionArray[i];
  149|      2|        break;
  150|      0|    case EOpMatrixTimesMatrix:
  ------------------
  |  Branch (150:5): [True: 0, False: 8]
  ------------------
  151|      0|        for (int row = 0; row < getMatrixRows(); row++) {
  ------------------
  |  Branch (151:27): [True: 0, False: 0]
  ------------------
  152|      0|            for (int column = 0; column < rightNode->getMatrixCols(); column++) {
  ------------------
  |  Branch (152:34): [True: 0, False: 0]
  ------------------
  153|      0|                double sum = 0.0f;
  154|      0|                for (int i = 0; i < rightNode->getMatrixRows(); i++)
  ------------------
  |  Branch (154:33): [True: 0, False: 0]
  ------------------
  155|      0|                    sum += leftUnionArray[i * getMatrixRows() + row].getDConst() * rightUnionArray[column * rightNode->getMatrixRows() + i].getDConst();
  156|      0|                newConstArray[column * getMatrixRows() + row].setDConst(sum);
  157|      0|            }
  158|      0|        }
  159|      0|        returnType.shallowCopy(TType(getType().getBasicType(), EvqConst, 0, rightNode->getMatrixCols(), getMatrixRows()));
  160|      0|        break;
  161|      0|    case EOpDiv:
  ------------------
  |  Branch (161:5): [True: 0, False: 8]
  ------------------
  162|      0|        for (int i = 0; i < newComps; i++) {
  ------------------
  |  Branch (162:25): [True: 0, False: 0]
  ------------------
  163|      0|            switch (getType().getBasicType()) {
  164|      0|            case EbtDouble:
  ------------------
  |  Branch (164:13): [True: 0, False: 0]
  ------------------
  165|      0|            case EbtFloat:
  ------------------
  |  Branch (165:13): [True: 0, False: 0]
  ------------------
  166|      0|            case EbtFloat16:
  ------------------
  |  Branch (166:13): [True: 0, False: 0]
  ------------------
  167|      0|            case EbtBFloat16:
  ------------------
  |  Branch (167:13): [True: 0, False: 0]
  ------------------
  168|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (168:13): [True: 0, False: 0]
  ------------------
  169|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (169:13): [True: 0, False: 0]
  ------------------
  170|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (170:13): [True: 0, False: 0]
  ------------------
  171|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (171:13): [True: 0, False: 0]
  ------------------
  172|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (172:13): [True: 0, False: 0]
  ------------------
  173|      0|            case EbtFloatUE8M0:
  ------------------
  |  Branch (173:13): [True: 0, False: 0]
  ------------------
  174|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (174:13): [True: 0, False: 0]
  ------------------
  175|      0|                if (rightUnionArray[i].getDConst() != 0.0)
  ------------------
  |  Branch (175:21): [True: 0, False: 0]
  ------------------
  176|      0|                    newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst());
  177|      0|                else if (leftUnionArray[i].getDConst() > 0.0)
  ------------------
  |  Branch (177:26): [True: 0, False: 0]
  ------------------
  178|      0|                    newConstArray[i].setDConst((double)INFINITY);
  179|      0|                else if (leftUnionArray[i].getDConst() < 0.0)
  ------------------
  |  Branch (179:26): [True: 0, False: 0]
  ------------------
  180|      0|                    newConstArray[i].setDConst(-(double)INFINITY);
  181|      0|                else
  182|      0|                    newConstArray[i].setDConst((double)NAN);
  183|      0|                break;
  184|       |
  185|      0|            case EbtInt:
  ------------------
  |  Branch (185:13): [True: 0, False: 0]
  ------------------
  186|      0|                if (rightUnionArray[i] == 0)
  ------------------
  |  Branch (186:21): [True: 0, False: 0]
  ------------------
  187|      0|                    newConstArray[i].setIConst(0x7FFFFFFF);
  188|      0|                else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)-0x80000000ll)
  ------------------
  |  Branch (188:26): [True: 0, False: 0]
  |  Branch (188:66): [True: 0, False: 0]
  ------------------
  189|      0|                    newConstArray[i].setIConst((int)-0x80000000ll);
  190|      0|                else
  191|      0|                    newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
  192|      0|                break;
  193|       |
  194|      0|            case EbtUint:
  ------------------
  |  Branch (194:13): [True: 0, False: 0]
  ------------------
  195|      0|                if (rightUnionArray[i] == 0u)
  ------------------
  |  Branch (195:21): [True: 0, False: 0]
  ------------------
  196|      0|                    newConstArray[i].setUConst(0xFFFFFFFFu);
  197|      0|                else
  198|      0|                    newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
  199|      0|                break;
  200|       |
  201|      0|            case EbtInt8:
  ------------------
  |  Branch (201:13): [True: 0, False: 0]
  ------------------
  202|      0|                if (rightUnionArray[i] == (signed char)0)
  ------------------
  |  Branch (202:21): [True: 0, False: 0]
  ------------------
  203|      0|                    newConstArray[i].setI8Const((signed char)0x7F);
  204|      0|                else if (rightUnionArray[i].getI8Const() == (signed char)-1 && leftUnionArray[i].getI8Const() == (signed char)-0x80)
  ------------------
  |  Branch (204:26): [True: 0, False: 0]
  |  Branch (204:80): [True: 0, False: 0]
  ------------------
  205|      0|                    newConstArray[i].setI8Const((signed char)-0x80);
  206|      0|                else
  207|      0|                    newConstArray[i].setI8Const(leftUnionArray[i].getI8Const() / rightUnionArray[i].getI8Const());
  208|      0|                break;
  209|       |
  210|      0|            case EbtUint8:
  ------------------
  |  Branch (210:13): [True: 0, False: 0]
  ------------------
  211|      0|                if (rightUnionArray[i] == (unsigned char)0u)
  ------------------
  |  Branch (211:21): [True: 0, False: 0]
  ------------------
  212|      0|                    newConstArray[i].setU8Const((unsigned char)0xFFu);
  213|      0|                else
  214|      0|                    newConstArray[i].setU8Const(leftUnionArray[i].getU8Const() / rightUnionArray[i].getU8Const());
  215|      0|                break;
  216|       |
  217|      0|           case EbtInt16:
  ------------------
  |  Branch (217:12): [True: 0, False: 0]
  ------------------
  218|      0|                if (rightUnionArray[i] == (signed short)0)
  ------------------
  |  Branch (218:21): [True: 0, False: 0]
  ------------------
  219|      0|                    newConstArray[i].setI16Const((signed short)0x7FFF);
  220|      0|                else if (rightUnionArray[i].getI16Const() == (signed short)-1 && leftUnionArray[i].getI16Const() == (signed short)-0x8000)
  ------------------
  |  Branch (220:26): [True: 0, False: 0]
  |  Branch (220:82): [True: 0, False: 0]
  ------------------
  221|      0|                    newConstArray[i].setI16Const((signed short)-0x8000);
  222|      0|                else
  223|      0|                    newConstArray[i].setI16Const(leftUnionArray[i].getI16Const() / rightUnionArray[i].getI16Const());
  224|      0|                break;
  225|       |
  226|      0|            case EbtUint16:
  ------------------
  |  Branch (226:13): [True: 0, False: 0]
  ------------------
  227|      0|                if (rightUnionArray[i] == (unsigned short)0u)
  ------------------
  |  Branch (227:21): [True: 0, False: 0]
  ------------------
  228|      0|                    newConstArray[i].setU16Const((unsigned short)0xFFFFu);
  229|      0|                else
  230|      0|                    newConstArray[i].setU16Const(leftUnionArray[i].getU16Const() / rightUnionArray[i].getU16Const());
  231|      0|                break;
  232|       |
  233|      0|            case EbtInt64:
  ------------------
  |  Branch (233:13): [True: 0, False: 0]
  ------------------
  234|      0|                if (rightUnionArray[i] == 0ll)
  ------------------
  |  Branch (234:21): [True: 0, False: 0]
  ------------------
  235|      0|                    newConstArray[i].setI64Const(LLONG_MAX);
  236|      0|                else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN)
  ------------------
  |  Branch (236:26): [True: 0, False: 0]
  |  Branch (236:68): [True: 0, False: 0]
  ------------------
  237|      0|                    newConstArray[i].setI64Const(LLONG_MIN);
  238|      0|                else
  239|      0|                    newConstArray[i].setI64Const(leftUnionArray[i].getI64Const() / rightUnionArray[i].getI64Const());
  240|      0|                break;
  241|       |
  242|      0|            case EbtUint64:
  ------------------
  |  Branch (242:13): [True: 0, False: 0]
  ------------------
  243|      0|                if (rightUnionArray[i] == 0ull)
  ------------------
  |  Branch (243:21): [True: 0, False: 0]
  ------------------
  244|      0|                    newConstArray[i].setU64Const(0xFFFFFFFFFFFFFFFFull);
  245|      0|                else
  246|      0|                    newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
  247|      0|                break;
  248|      0|            default:
  ------------------
  |  Branch (248:13): [True: 0, False: 0]
  ------------------
  249|      0|                return nullptr;
  250|      0|            }
  251|      0|        }
  252|      0|        break;
  253|       |
  254|      0|    case EOpMatrixTimesVector:
  ------------------
  |  Branch (254:5): [True: 0, False: 8]
  ------------------
  255|      0|        for (int i = 0; i < getMatrixRows(); i++) {
  ------------------
  |  Branch (255:25): [True: 0, False: 0]
  ------------------
  256|      0|            double sum = 0.0f;
  257|      0|            for (int j = 0; j < rightNode->getVectorSize(); j++) {
  ------------------
  |  Branch (257:29): [True: 0, False: 0]
  ------------------
  258|      0|                sum += leftUnionArray[j*getMatrixRows() + i].getDConst() * rightUnionArray[j].getDConst();
  259|      0|            }
  260|      0|            newConstArray[i].setDConst(sum);
  261|      0|        }
  262|       |
  263|      0|        returnType.shallowCopy(TType(getBasicType(), EvqConst, getMatrixRows()));
  264|      0|        break;
  265|       |
  266|      0|    case EOpVectorTimesMatrix:
  ------------------
  |  Branch (266:5): [True: 0, False: 8]
  ------------------
  267|      0|        for (int i = 0; i < rightNode->getMatrixCols(); i++) {
  ------------------
  |  Branch (267:25): [True: 0, False: 0]
  ------------------
  268|      0|            double sum = 0.0f;
  269|      0|            for (int j = 0; j < getVectorSize(); j++)
  ------------------
  |  Branch (269:29): [True: 0, False: 0]
  ------------------
  270|      0|                sum += leftUnionArray[j].getDConst() * rightUnionArray[i*rightNode->getMatrixRows() + j].getDConst();
  271|      0|            newConstArray[i].setDConst(sum);
  272|      0|        }
  273|       |
  274|      0|        returnType.shallowCopy(TType(getBasicType(), EvqConst, rightNode->getMatrixCols()));
  275|      0|        break;
  276|       |
  277|      0|    case EOpMod:
  ------------------
  |  Branch (277:5): [True: 0, False: 8]
  ------------------
  278|      0|        for (int i = 0; i < newComps; i++) {
  ------------------
  |  Branch (278:25): [True: 0, False: 0]
  ------------------
  279|      0|            if (rightUnionArray[i] == 0)
  ------------------
  |  Branch (279:17): [True: 0, False: 0]
  ------------------
  280|      0|                newConstArray[i] = leftUnionArray[i];
  281|      0|            else {
  282|      0|                switch (getType().getBasicType()) {
  283|      0|                case EbtInt:
  ------------------
  |  Branch (283:17): [True: 0, False: 0]
  ------------------
  284|      0|                    if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == INT_MIN) {
  ------------------
  |  Branch (284:25): [True: 0, False: 0]
  |  Branch (284:65): [True: 0, False: 0]
  ------------------
  285|      0|                        newConstArray[i].setIConst(0);
  286|      0|                        break;
  287|      0|                    } else goto modulo_default;
  288|      0|                case EbtInt64:
  ------------------
  |  Branch (288:17): [True: 0, False: 0]
  ------------------
  289|      0|                    if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) {
  ------------------
  |  Branch (289:25): [True: 0, False: 0]
  |  Branch (289:67): [True: 0, False: 0]
  ------------------
  290|      0|                        newConstArray[i].setI64Const(0);
  291|      0|                        break;
  292|      0|                    } else goto modulo_default;
  293|      0|                case EbtInt16:
  ------------------
  |  Branch (293:17): [True: 0, False: 0]
  ------------------
  294|      0|                    if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == SHRT_MIN) {
  ------------------
  |  Branch (294:25): [True: 0, False: 0]
  |  Branch (294:65): [True: 0, False: 0]
  ------------------
  295|      0|                        newConstArray[i].setIConst(0);
  296|      0|                        break;
  297|      0|                    } else goto modulo_default;
  298|      0|                default:
  ------------------
  |  Branch (298:17): [True: 0, False: 0]
  ------------------
  299|      0|                modulo_default:
  300|      0|                    newConstArray[i] = leftUnionArray[i] % rightUnionArray[i];
  301|      0|                }
  302|      0|            }
  303|      0|        }
  304|      0|        break;
  305|       |
  306|      0|    case EOpRightShift:
  ------------------
  |  Branch (306:5): [True: 0, False: 8]
  ------------------
  307|      0|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (307:25): [True: 0, False: 0]
  ------------------
  308|      0|            newConstArray[i] = leftUnionArray[i] >> rightUnionArray[i];
  309|      0|        break;
  310|       |
  311|      0|    case EOpLeftShift:
  ------------------
  |  Branch (311:5): [True: 0, False: 8]
  ------------------
  312|      0|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (312:25): [True: 0, False: 0]
  ------------------
  313|      0|            newConstArray[i] = leftUnionArray[i] << rightUnionArray[i];
  314|      0|        break;
  315|       |
  316|      0|    case EOpAnd:
  ------------------
  |  Branch (316:5): [True: 0, False: 8]
  ------------------
  317|      0|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (317:25): [True: 0, False: 0]
  ------------------
  318|      0|            newConstArray[i] = leftUnionArray[i] & rightUnionArray[i];
  319|      0|        break;
  320|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (320:5): [True: 0, False: 8]
  ------------------
  321|      0|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (321:25): [True: 0, False: 0]
  ------------------
  322|      0|            newConstArray[i] = leftUnionArray[i] | rightUnionArray[i];
  323|      0|        break;
  324|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (324:5): [True: 0, False: 8]
  ------------------
  325|      0|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (325:25): [True: 0, False: 0]
  ------------------
  326|      0|            newConstArray[i] = leftUnionArray[i] ^ rightUnionArray[i];
  327|      0|        break;
  328|       |
  329|      0|    case EOpLogicalAnd: // this code is written for possible future use, will not get executed currently
  ------------------
  |  Branch (329:5): [True: 0, False: 8]
  ------------------
  330|      0|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (330:25): [True: 0, False: 0]
  ------------------
  331|      0|            newConstArray[i] = leftUnionArray[i] && rightUnionArray[i];
  332|      0|        break;
  333|       |
  334|      0|    case EOpLogicalOr: // this code is written for possible future use, will not get executed currently
  ------------------
  |  Branch (334:5): [True: 0, False: 8]
  ------------------
  335|      0|        for (int i = 0; i < newComps; i++)
  ------------------
  |  Branch (335:25): [True: 0, False: 0]
  ------------------
  336|      0|            newConstArray[i] = leftUnionArray[i] || rightUnionArray[i];
  337|      0|        break;
  338|       |
  339|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (339:5): [True: 0, False: 8]
  ------------------
  340|      0|        for (int i = 0; i < newComps; i++) {
  ------------------
  |  Branch (340:25): [True: 0, False: 0]
  ------------------
  341|      0|            switch (getType().getBasicType()) {
  342|      0|            case EbtBool: newConstArray[i].setBConst((leftUnionArray[i] == rightUnionArray[i]) ? false : true); break;
  ------------------
  |  Branch (342:13): [True: 0, False: 0]
  |  Branch (342:54): [True: 0, False: 0]
  ------------------
  343|      0|            default: assert(false && "Default missing");
  ------------------
  |  Branch (343:13): [True: 0, False: 0]
  ------------------
  344|      0|            }
  345|      0|        }
  346|      0|        break;
  347|       |
  348|      0|    case EOpLessThan:
  ------------------
  |  Branch (348:5): [True: 0, False: 8]
  ------------------
  349|      0|        newConstArray[0].setBConst(leftUnionArray[0] < rightUnionArray[0]);
  350|      0|        returnType.shallowCopy(constBool);
  351|      0|        break;
  352|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (352:5): [True: 0, False: 8]
  ------------------
  353|      0|        newConstArray[0].setBConst(leftUnionArray[0] > rightUnionArray[0]);
  354|      0|        returnType.shallowCopy(constBool);
  355|      0|        break;
  356|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (356:5): [True: 0, False: 8]
  ------------------
  357|      0|        newConstArray[0].setBConst(! (leftUnionArray[0] > rightUnionArray[0]));
  358|      0|        returnType.shallowCopy(constBool);
  359|      0|        break;
  360|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (360:5): [True: 0, False: 8]
  ------------------
  361|      0|        newConstArray[0].setBConst(! (leftUnionArray[0] < rightUnionArray[0]));
  362|      0|        returnType.shallowCopy(constBool);
  363|      0|        break;
  364|      0|    case EOpEqual:
  ------------------
  |  Branch (364:5): [True: 0, False: 8]
  ------------------
  365|      0|        newConstArray[0].setBConst(rightNode->getConstArray() == leftUnionArray);
  366|      0|        returnType.shallowCopy(constBool);
  367|      0|        break;
  368|      0|    case EOpNotEqual:
  ------------------
  |  Branch (368:5): [True: 0, False: 8]
  ------------------
  369|      0|        newConstArray[0].setBConst(rightNode->getConstArray() != leftUnionArray);
  370|      0|        returnType.shallowCopy(constBool);
  371|      0|        break;
  372|       |
  373|      0|    default:
  ------------------
  |  Branch (373:5): [True: 0, False: 8]
  ------------------
  374|      0|        return nullptr;
  375|      8|    }
  376|       |
  377|      8|    TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType);
  378|      8|    newNode->setLoc(getLoc());
  379|       |
  380|      8|    return newNode;
  381|      8|}
_ZNK7glslang20TIntermConstantUnion4foldENS_9TOperatorERKNS_5TTypeE:
  389|    918|{
  390|       |    // First, size the result, which is mostly the same as the argument's size,
  391|       |    // but not always, and classify what is componentwise.
  392|       |    // Also, eliminate cases that can't be compile-time constant.
  393|    918|    int resultSize;
  394|    918|    bool componentWise = true;
  395|       |
  396|    918|    int objectSize = getType().computeNumComponents();
  397|    918|    switch (op) {
  398|      0|    case EOpDeterminant:
  ------------------
  |  Branch (398:5): [True: 0, False: 918]
  ------------------
  399|      0|    case EOpAny:
  ------------------
  |  Branch (399:5): [True: 0, False: 918]
  ------------------
  400|      0|    case EOpAll:
  ------------------
  |  Branch (400:5): [True: 0, False: 918]
  ------------------
  401|      0|    case EOpLength:
  ------------------
  |  Branch (401:5): [True: 0, False: 918]
  ------------------
  402|      0|        componentWise = false;
  403|      0|        resultSize = 1;
  404|      0|        break;
  405|       |
  406|      0|    case EOpEmitStreamVertex:
  ------------------
  |  Branch (406:5): [True: 0, False: 918]
  ------------------
  407|      0|    case EOpEndStreamPrimitive:
  ------------------
  |  Branch (407:5): [True: 0, False: 918]
  ------------------
  408|       |        // These don't fold
  409|      0|        return nullptr;
  410|       |
  411|      0|    case EOpPackSnorm2x16:
  ------------------
  |  Branch (411:5): [True: 0, False: 918]
  ------------------
  412|      0|    case EOpPackUnorm2x16:
  ------------------
  |  Branch (412:5): [True: 0, False: 918]
  ------------------
  413|      0|    case EOpPackHalf2x16:
  ------------------
  |  Branch (413:5): [True: 0, False: 918]
  ------------------
  414|      0|        componentWise = false;
  415|      0|        resultSize = 1;
  416|      0|        break;
  417|       |
  418|      0|    case EOpUnpackSnorm2x16:
  ------------------
  |  Branch (418:5): [True: 0, False: 918]
  ------------------
  419|      0|    case EOpUnpackUnorm2x16:
  ------------------
  |  Branch (419:5): [True: 0, False: 918]
  ------------------
  420|      0|    case EOpUnpackHalf2x16:
  ------------------
  |  Branch (420:5): [True: 0, False: 918]
  ------------------
  421|      0|        componentWise = false;
  422|      0|        resultSize = 2;
  423|      0|        break;
  424|       |
  425|      0|    case EOpPack16:
  ------------------
  |  Branch (425:5): [True: 0, False: 918]
  ------------------
  426|      0|    case EOpPack32:
  ------------------
  |  Branch (426:5): [True: 0, False: 918]
  ------------------
  427|      0|    case EOpPack64:
  ------------------
  |  Branch (427:5): [True: 0, False: 918]
  ------------------
  428|      0|    case EOpUnpack32:
  ------------------
  |  Branch (428:5): [True: 0, False: 918]
  ------------------
  429|      0|    case EOpUnpack16:
  ------------------
  |  Branch (429:5): [True: 0, False: 918]
  ------------------
  430|      0|    case EOpUnpack8:
  ------------------
  |  Branch (430:5): [True: 0, False: 918]
  ------------------
  431|      0|    case EOpNormalize:
  ------------------
  |  Branch (431:5): [True: 0, False: 918]
  ------------------
  432|      0|        componentWise = false;
  433|      0|        resultSize = objectSize;
  434|      0|        break;
  435|       |
  436|    918|    default:
  ------------------
  |  Branch (436:5): [True: 918, False: 0]
  ------------------
  437|    918|        resultSize = objectSize;
  438|    918|        break;
  439|    918|    }
  440|       |
  441|       |    // Set up for processing
  442|    918|    TConstUnionArray newConstArray(resultSize);
  443|    918|    const TConstUnionArray& unionArray = getConstArray();
  444|       |
  445|       |    // Process non-component-wise operations
  446|    918|    switch (op) {
  447|      0|    case EOpLength:
  ------------------
  |  Branch (447:5): [True: 0, False: 918]
  ------------------
  448|      0|    case EOpNormalize:
  ------------------
  |  Branch (448:5): [True: 0, False: 918]
  ------------------
  449|      0|    {
  450|      0|        double sum = 0;
  451|      0|        for (int i = 0; i < objectSize; i++)
  ------------------
  |  Branch (451:25): [True: 0, False: 0]
  ------------------
  452|      0|            sum += unionArray[i].getDConst() * unionArray[i].getDConst();
  453|      0|        double length = sqrt(sum);
  454|      0|        if (op == EOpLength)
  ------------------
  |  Branch (454:13): [True: 0, False: 0]
  ------------------
  455|      0|            newConstArray[0].setDConst(length);
  456|      0|        else {
  457|      0|            for (int i = 0; i < objectSize; i++)
  ------------------
  |  Branch (457:29): [True: 0, False: 0]
  ------------------
  458|      0|                newConstArray[i].setDConst(unionArray[i].getDConst() / length);
  459|      0|        }
  460|      0|        break;
  461|      0|    }
  462|       |
  463|      0|    case EOpAny:
  ------------------
  |  Branch (463:5): [True: 0, False: 918]
  ------------------
  464|      0|    {
  465|      0|        bool result = false;
  466|      0|        for (int i = 0; i < objectSize; i++) {
  ------------------
  |  Branch (466:25): [True: 0, False: 0]
  ------------------
  467|      0|            if (unionArray[i].getBConst())
  ------------------
  |  Branch (467:17): [True: 0, False: 0]
  ------------------
  468|      0|                result = true;
  469|      0|        }
  470|      0|        newConstArray[0].setBConst(result);
  471|      0|        break;
  472|      0|    }
  473|      0|    case EOpAll:
  ------------------
  |  Branch (473:5): [True: 0, False: 918]
  ------------------
  474|      0|    {
  475|      0|        bool result = true;
  476|      0|        for (int i = 0; i < objectSize; i++) {
  ------------------
  |  Branch (476:25): [True: 0, False: 0]
  ------------------
  477|      0|            if (! unionArray[i].getBConst())
  ------------------
  |  Branch (477:17): [True: 0, False: 0]
  ------------------
  478|      0|                result = false;
  479|      0|        }
  480|      0|        newConstArray[0].setBConst(result);
  481|      0|        break;
  482|      0|    }
  483|       |
  484|      0|    case EOpPackSnorm2x16:
  ------------------
  |  Branch (484:5): [True: 0, False: 918]
  ------------------
  485|      0|    case EOpPackUnorm2x16:
  ------------------
  |  Branch (485:5): [True: 0, False: 918]
  ------------------
  486|      0|    case EOpPackHalf2x16:
  ------------------
  |  Branch (486:5): [True: 0, False: 918]
  ------------------
  487|      0|    case EOpPack16:
  ------------------
  |  Branch (487:5): [True: 0, False: 918]
  ------------------
  488|      0|    case EOpPack32:
  ------------------
  |  Branch (488:5): [True: 0, False: 918]
  ------------------
  489|      0|    case EOpPack64:
  ------------------
  |  Branch (489:5): [True: 0, False: 918]
  ------------------
  490|      0|    case EOpUnpack32:
  ------------------
  |  Branch (490:5): [True: 0, False: 918]
  ------------------
  491|      0|    case EOpUnpack16:
  ------------------
  |  Branch (491:5): [True: 0, False: 918]
  ------------------
  492|      0|    case EOpUnpack8:
  ------------------
  |  Branch (492:5): [True: 0, False: 918]
  ------------------
  493|       |
  494|      0|    case EOpUnpackSnorm2x16:
  ------------------
  |  Branch (494:5): [True: 0, False: 918]
  ------------------
  495|      0|    case EOpUnpackUnorm2x16:
  ------------------
  |  Branch (495:5): [True: 0, False: 918]
  ------------------
  496|      0|    case EOpUnpackHalf2x16:
  ------------------
  |  Branch (496:5): [True: 0, False: 918]
  ------------------
  497|       |
  498|      0|    case EOpDeterminant:
  ------------------
  |  Branch (498:5): [True: 0, False: 918]
  ------------------
  499|      0|    case EOpMatrixInverse:
  ------------------
  |  Branch (499:5): [True: 0, False: 918]
  ------------------
  500|      0|    case EOpTranspose:
  ------------------
  |  Branch (500:5): [True: 0, False: 918]
  ------------------
  501|      0|        return nullptr;
  502|       |
  503|    918|    default:
  ------------------
  |  Branch (503:5): [True: 918, False: 0]
  ------------------
  504|    918|        assert(componentWise);
  505|    918|        break;
  506|    918|    }
  507|       |
  508|       |    // Turn off the componentwise loop
  509|    918|    if (! componentWise)
  ------------------
  |  Branch (509:9): [True: 0, False: 918]
  ------------------
  510|      0|        objectSize = 0;
  511|       |
  512|       |    // Process component-wise operations
  513|  1.83k|    for (int i = 0; i < objectSize; i++) {
  ------------------
  |  Branch (513:21): [True: 921, False: 914]
  ------------------
  514|       |        // First read the value and convert to i64/u64/f64/bool, then convert
  515|       |        // to the destination type (still 64b), then convert down to the
  516|       |        // destination size.
  517|    921|        if (IsOpNumericConv(op)) {
  ------------------
  |  Branch (517:13): [True: 0, False: 921]
  ------------------
  518|      0|            enum ConvType { CONV_FLOAT, CONV_INT, CONV_UINT, CONV_BOOL };
  519|      0|            ConvType srcType = CONV_UINT, dstType = CONV_UINT;
  520|      0|            double valf = 0.0;
  521|      0|            uint64_t valu = 0;
  522|      0|            int64_t vali = 0;
  523|      0|            bool valb = false;
  524|      0|            switch (getType().getBasicType()) {
  525|      0|            case EbtDouble:
  ------------------
  |  Branch (525:13): [True: 0, False: 0]
  ------------------
  526|      0|            case EbtFloat16:
  ------------------
  |  Branch (526:13): [True: 0, False: 0]
  ------------------
  527|      0|            case EbtBFloat16:
  ------------------
  |  Branch (527:13): [True: 0, False: 0]
  ------------------
  528|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (528:13): [True: 0, False: 0]
  ------------------
  529|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (529:13): [True: 0, False: 0]
  ------------------
  530|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (530:13): [True: 0, False: 0]
  ------------------
  531|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (531:13): [True: 0, False: 0]
  ------------------
  532|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (532:13): [True: 0, False: 0]
  ------------------
  533|      0|            case EbtFloatUE8M0:
  ------------------
  |  Branch (533:13): [True: 0, False: 0]
  ------------------
  534|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (534:13): [True: 0, False: 0]
  ------------------
  535|      0|            case EbtFloat:
  ------------------
  |  Branch (535:13): [True: 0, False: 0]
  ------------------
  536|      0|                valf = unionArray[i].getDConst();
  537|      0|                srcType = CONV_FLOAT;
  538|      0|                break;
  539|      0|            case EbtInt8:
  ------------------
  |  Branch (539:13): [True: 0, False: 0]
  ------------------
  540|      0|                vali = unionArray[i].getI8Const();
  541|      0|                srcType = CONV_INT;
  542|      0|                break;
  543|      0|            case EbtInt16:
  ------------------
  |  Branch (543:13): [True: 0, False: 0]
  ------------------
  544|      0|                vali = unionArray[i].getI16Const();
  545|      0|                srcType = CONV_INT;
  546|      0|                break;
  547|      0|            case EbtInt:
  ------------------
  |  Branch (547:13): [True: 0, False: 0]
  ------------------
  548|      0|                vali = unionArray[i].getIConst();
  549|      0|                srcType = CONV_INT;
  550|      0|                break;
  551|      0|            case EbtInt64:
  ------------------
  |  Branch (551:13): [True: 0, False: 0]
  ------------------
  552|      0|                vali = unionArray[i].getI64Const();
  553|      0|                srcType = CONV_INT;
  554|      0|                break;
  555|      0|            case EbtUint8:
  ------------------
  |  Branch (555:13): [True: 0, False: 0]
  ------------------
  556|      0|                valu = unionArray[i].getU8Const();
  557|      0|                srcType = CONV_UINT;
  558|      0|                break;
  559|      0|            case EbtUint16:
  ------------------
  |  Branch (559:13): [True: 0, False: 0]
  ------------------
  560|      0|                valu = unionArray[i].getU16Const();
  561|      0|                srcType = CONV_UINT;
  562|      0|                break;
  563|      0|            case EbtUint:
  ------------------
  |  Branch (563:13): [True: 0, False: 0]
  ------------------
  564|      0|                valu = unionArray[i].getUConst();
  565|      0|                srcType = CONV_UINT;
  566|      0|                break;
  567|      0|            case EbtUint64:
  ------------------
  |  Branch (567:13): [True: 0, False: 0]
  ------------------
  568|      0|                valu = unionArray[i].getU64Const();
  569|      0|                srcType = CONV_UINT;
  570|      0|                break;
  571|      0|            case EbtBool:
  ------------------
  |  Branch (571:13): [True: 0, False: 0]
  ------------------
  572|      0|                valb = unionArray[i].getBConst();
  573|      0|                srcType = CONV_BOOL;
  574|      0|                break;
  575|      0|            default:
  ------------------
  |  Branch (575:13): [True: 0, False: 0]
  ------------------
  576|      0|                assert(0);
  577|      0|                break;
  578|      0|            }
  579|       |
  580|      0|            switch (returnType.getBasicType()) {
  581|      0|            case EbtDouble:
  ------------------
  |  Branch (581:13): [True: 0, False: 0]
  ------------------
  582|      0|            case EbtFloat16:
  ------------------
  |  Branch (582:13): [True: 0, False: 0]
  ------------------
  583|      0|            case EbtBFloat16:
  ------------------
  |  Branch (583:13): [True: 0, False: 0]
  ------------------
  584|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (584:13): [True: 0, False: 0]
  ------------------
  585|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (585:13): [True: 0, False: 0]
  ------------------
  586|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (586:13): [True: 0, False: 0]
  ------------------
  587|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (587:13): [True: 0, False: 0]
  ------------------
  588|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (588:13): [True: 0, False: 0]
  ------------------
  589|      0|            case EbtFloatUE8M0:
  ------------------
  |  Branch (589:13): [True: 0, False: 0]
  ------------------
  590|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (590:13): [True: 0, False: 0]
  ------------------
  591|      0|            case EbtFloat:
  ------------------
  |  Branch (591:13): [True: 0, False: 0]
  ------------------
  592|      0|                dstType = CONV_FLOAT;
  593|      0|                break;
  594|      0|            case EbtInt8:
  ------------------
  |  Branch (594:13): [True: 0, False: 0]
  ------------------
  595|      0|            case EbtInt16:
  ------------------
  |  Branch (595:13): [True: 0, False: 0]
  ------------------
  596|      0|            case EbtInt:
  ------------------
  |  Branch (596:13): [True: 0, False: 0]
  ------------------
  597|      0|            case EbtInt64:
  ------------------
  |  Branch (597:13): [True: 0, False: 0]
  ------------------
  598|      0|                dstType = CONV_INT;
  599|      0|                break;
  600|      0|            case EbtUint8:
  ------------------
  |  Branch (600:13): [True: 0, False: 0]
  ------------------
  601|      0|            case EbtUint16:
  ------------------
  |  Branch (601:13): [True: 0, False: 0]
  ------------------
  602|      0|            case EbtUint:
  ------------------
  |  Branch (602:13): [True: 0, False: 0]
  ------------------
  603|      0|            case EbtUint64:
  ------------------
  |  Branch (603:13): [True: 0, False: 0]
  ------------------
  604|      0|                dstType = CONV_UINT;
  605|      0|                break;
  606|      0|            case EbtBool:
  ------------------
  |  Branch (606:13): [True: 0, False: 0]
  ------------------
  607|      0|                dstType = CONV_BOOL;
  608|      0|                break;
  609|      0|            default:
  ------------------
  |  Branch (609:13): [True: 0, False: 0]
  ------------------
  610|      0|                assert(0);
  611|      0|                break;
  612|      0|            }
  613|      0|            if (dstType == CONV_BOOL) {
  ------------------
  |  Branch (613:17): [True: 0, False: 0]
  ------------------
  614|      0|                switch (srcType) {
  615|      0|                case CONV_FLOAT:
  ------------------
  |  Branch (615:17): [True: 0, False: 0]
  ------------------
  616|      0|                    valb = (valf != 0.0); break;
  617|      0|                case CONV_INT:
  ------------------
  |  Branch (617:17): [True: 0, False: 0]
  ------------------
  618|      0|                    valb = (vali != 0.0); break;
  619|      0|                case CONV_UINT:
  ------------------
  |  Branch (619:17): [True: 0, False: 0]
  ------------------
  620|      0|                    valb = (valu != 0.0); break;
  621|      0|                default:
  ------------------
  |  Branch (621:17): [True: 0, False: 0]
  ------------------
  622|      0|                    break;
  623|      0|                }
  624|      0|            } else if (dstType == CONV_FLOAT) {
  ------------------
  |  Branch (624:24): [True: 0, False: 0]
  ------------------
  625|      0|                switch (srcType) {
  626|      0|                case CONV_BOOL:
  ------------------
  |  Branch (626:17): [True: 0, False: 0]
  ------------------
  627|      0|                    valf = (double)valb; break;
  628|      0|                case CONV_INT:
  ------------------
  |  Branch (628:17): [True: 0, False: 0]
  ------------------
  629|      0|                    valf = (double)vali; break;
  630|      0|                case CONV_UINT:
  ------------------
  |  Branch (630:17): [True: 0, False: 0]
  ------------------
  631|      0|                    valf = (double)valu; break;
  632|      0|                default:
  ------------------
  |  Branch (632:17): [True: 0, False: 0]
  ------------------
  633|      0|                    break;
  634|      0|                }
  635|      0|            } else if (dstType == CONV_INT) {
  ------------------
  |  Branch (635:24): [True: 0, False: 0]
  ------------------
  636|      0|                switch (srcType) {
  637|      0|                case CONV_BOOL:
  ------------------
  |  Branch (637:17): [True: 0, False: 0]
  ------------------
  638|      0|                    vali = (int64_t)valb; break;
  639|      0|                case CONV_FLOAT:
  ------------------
  |  Branch (639:17): [True: 0, False: 0]
  ------------------
  640|      0|                    vali = (int64_t)valf; break;
  641|      0|                case CONV_UINT:
  ------------------
  |  Branch (641:17): [True: 0, False: 0]
  ------------------
  642|      0|                    vali = (int64_t)valu; break;
  643|      0|                default:
  ------------------
  |  Branch (643:17): [True: 0, False: 0]
  ------------------
  644|      0|                    break;
  645|      0|                }
  646|      0|            } else if (dstType == CONV_UINT) {
  ------------------
  |  Branch (646:24): [True: 0, False: 0]
  ------------------
  647|      0|                switch (srcType) {
  648|      0|                case CONV_BOOL:
  ------------------
  |  Branch (648:17): [True: 0, False: 0]
  ------------------
  649|      0|                    valu = (uint64_t)valb; break;
  650|      0|                case CONV_FLOAT:
  ------------------
  |  Branch (650:17): [True: 0, False: 0]
  ------------------
  651|      0|                    valu = (uint64_t)valf; break;
  652|      0|                case CONV_INT:
  ------------------
  |  Branch (652:17): [True: 0, False: 0]
  ------------------
  653|      0|                    valu = (uint64_t)vali; break;
  654|      0|                default:
  ------------------
  |  Branch (654:17): [True: 0, False: 0]
  ------------------
  655|      0|                    break;
  656|      0|                }
  657|      0|            }
  658|      0|            switch (returnType.getBasicType()) {
  659|      0|            case EbtDouble:
  ------------------
  |  Branch (659:13): [True: 0, False: 0]
  ------------------
  660|      0|            case EbtFloat16:
  ------------------
  |  Branch (660:13): [True: 0, False: 0]
  ------------------
  661|      0|            case EbtBFloat16:
  ------------------
  |  Branch (661:13): [True: 0, False: 0]
  ------------------
  662|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (662:13): [True: 0, False: 0]
  ------------------
  663|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (663:13): [True: 0, False: 0]
  ------------------
  664|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (664:13): [True: 0, False: 0]
  ------------------
  665|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (665:13): [True: 0, False: 0]
  ------------------
  666|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (666:13): [True: 0, False: 0]
  ------------------
  667|      0|            case EbtFloatUE8M0:
  ------------------
  |  Branch (667:13): [True: 0, False: 0]
  ------------------
  668|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (668:13): [True: 0, False: 0]
  ------------------
  669|      0|            case EbtFloat:
  ------------------
  |  Branch (669:13): [True: 0, False: 0]
  ------------------
  670|      0|                newConstArray[i].setDConst(valf); break;
  671|      0|            case EbtInt8:
  ------------------
  |  Branch (671:13): [True: 0, False: 0]
  ------------------
  672|      0|                newConstArray[i].setI8Const(static_cast<int8_t>(vali)); break;
  673|      0|            case EbtInt16:
  ------------------
  |  Branch (673:13): [True: 0, False: 0]
  ------------------
  674|      0|                newConstArray[i].setI16Const(static_cast<int16_t>(vali)); break;
  675|      0|            case EbtInt:
  ------------------
  |  Branch (675:13): [True: 0, False: 0]
  ------------------
  676|      0|                newConstArray[i].setIConst(static_cast<int32_t>(vali)); break;
  677|      0|            case EbtInt64:
  ------------------
  |  Branch (677:13): [True: 0, False: 0]
  ------------------
  678|      0|                newConstArray[i].setI64Const(vali); break;
  679|      0|            case EbtUint8:
  ------------------
  |  Branch (679:13): [True: 0, False: 0]
  ------------------
  680|      0|                newConstArray[i].setU8Const(static_cast<uint8_t>(valu)); break;
  681|      0|            case EbtUint16:
  ------------------
  |  Branch (681:13): [True: 0, False: 0]
  ------------------
  682|      0|                newConstArray[i].setU16Const(static_cast<uint16_t>(valu)); break;
  683|      0|            case EbtUint:
  ------------------
  |  Branch (683:13): [True: 0, False: 0]
  ------------------
  684|      0|                newConstArray[i].setUConst(static_cast<uint32_t>(valu)); break;
  685|      0|            case EbtUint64:
  ------------------
  |  Branch (685:13): [True: 0, False: 0]
  ------------------
  686|      0|                newConstArray[i].setU64Const(valu); break;
  687|      0|            case EbtBool:
  ------------------
  |  Branch (687:13): [True: 0, False: 0]
  ------------------
  688|      0|                newConstArray[i].setBConst(valb); break;
  689|      0|            default:
  ------------------
  |  Branch (689:13): [True: 0, False: 0]
  ------------------
  690|      0|                assert(0);
  691|      0|                break;
  692|      0|            }
  693|      0|            continue;
  694|      0|        }
  695|    921|        switch (op) {
  696|    895|        case EOpNegative:
  ------------------
  |  Branch (696:9): [True: 895, False: 26]
  ------------------
  697|    895|            switch (getType().getBasicType()) {
  698|      0|            case EbtDouble:
  ------------------
  |  Branch (698:13): [True: 0, False: 895]
  ------------------
  699|      0|            case EbtFloat16:
  ------------------
  |  Branch (699:13): [True: 0, False: 895]
  ------------------
  700|      0|            case EbtBFloat16:
  ------------------
  |  Branch (700:13): [True: 0, False: 895]
  ------------------
  701|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (701:13): [True: 0, False: 895]
  ------------------
  702|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (702:13): [True: 0, False: 895]
  ------------------
  703|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (703:13): [True: 0, False: 895]
  ------------------
  704|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (704:13): [True: 0, False: 895]
  ------------------
  705|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (705:13): [True: 0, False: 895]
  ------------------
  706|      0|            case EbtFloatUE8M0:
  ------------------
  |  Branch (706:13): [True: 0, False: 895]
  ------------------
  707|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (707:13): [True: 0, False: 895]
  ------------------
  708|      0|            case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
  ------------------
  |  Branch (708:13): [True: 0, False: 895]
  ------------------
  709|       |            // Note: avoid UBSAN error regarding negating 0x80000000
  710|    895|            case EbtInt:   newConstArray[i].setIConst(
  ------------------
  |  Branch (710:13): [True: 895, False: 0]
  ------------------
  711|    895|                                static_cast<unsigned int>(unionArray[i].getIConst()) == 0x80000000
  ------------------
  |  Branch (711:33): [True: 0, False: 895]
  ------------------
  712|    895|                                    ? -0x7FFFFFFF - 1
  713|    895|                                    : -unionArray[i].getIConst());
  714|    895|                           break;
  715|      0|            case EbtUint:  newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst())));  break;
  ------------------
  |  Branch (715:13): [True: 0, False: 895]
  ------------------
  716|      0|            case EbtInt8:  newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break;
  ------------------
  |  Branch (716:13): [True: 0, False: 895]
  ------------------
  717|      0|            case EbtUint8: newConstArray[i].setU8Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU8Const())));  break;
  ------------------
  |  Branch (717:13): [True: 0, False: 895]
  ------------------
  718|      0|            case EbtInt16: newConstArray[i].setI16Const(-unionArray[i].getI16Const()); break;
  ------------------
  |  Branch (718:13): [True: 0, False: 895]
  ------------------
  719|      0|            case EbtUint16:newConstArray[i].setU16Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU16Const())));  break;
  ------------------
  |  Branch (719:13): [True: 0, False: 895]
  ------------------
  720|      0|            case EbtInt64: {
  ------------------
  |  Branch (720:13): [True: 0, False: 895]
  ------------------
  721|      0|                int64_t i64val = unionArray[i].getI64Const();
  722|      0|                newConstArray[i].setI64Const(i64val == INT64_MIN ? INT64_MIN : -i64val);
  ------------------
  |  Branch (722:46): [True: 0, False: 0]
  ------------------
  723|      0|                break;
  724|      0|            }
  725|      0|            case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const())));  break;
  ------------------
  |  Branch (725:13): [True: 0, False: 895]
  ------------------
  726|      0|            default:
  ------------------
  |  Branch (726:13): [True: 0, False: 895]
  ------------------
  727|      0|                return nullptr;
  728|    895|            }
  729|    895|            break;
  730|    895|        case EOpLogicalNot:
  ------------------
  |  Branch (730:9): [True: 18, False: 903]
  ------------------
  731|     18|        case EOpVectorLogicalNot:
  ------------------
  |  Branch (731:9): [True: 0, False: 921]
  ------------------
  732|     18|            switch (getType().getBasicType()) {
  733|     18|            case EbtBool:  newConstArray[i].setBConst(!unionArray[i].getBConst()); break;
  ------------------
  |  Branch (733:13): [True: 18, False: 0]
  ------------------
  734|      0|            default:
  ------------------
  |  Branch (734:13): [True: 0, False: 18]
  ------------------
  735|      0|                return nullptr;
  736|     18|            }
  737|     18|            break;
  738|     18|        case EOpBitwiseNot:
  ------------------
  |  Branch (738:9): [True: 4, False: 917]
  ------------------
  739|      4|            newConstArray[i] = ~unionArray[i];
  740|      4|            break;
  741|      0|        case EOpRadians:
  ------------------
  |  Branch (741:9): [True: 0, False: 921]
  ------------------
  742|      0|            newConstArray[i].setDConst(unionArray[i].getDConst() * pi / 180.0);
  743|      0|            break;
  744|      0|        case EOpDegrees:
  ------------------
  |  Branch (744:9): [True: 0, False: 921]
  ------------------
  745|      0|            newConstArray[i].setDConst(unionArray[i].getDConst() * 180.0 / pi);
  746|      0|            break;
  747|      0|        case EOpSin:
  ------------------
  |  Branch (747:9): [True: 0, False: 921]
  ------------------
  748|      0|            newConstArray[i].setDConst(sin(unionArray[i].getDConst()));
  749|      0|            break;
  750|      0|        case EOpCos:
  ------------------
  |  Branch (750:9): [True: 0, False: 921]
  ------------------
  751|      0|            newConstArray[i].setDConst(cos(unionArray[i].getDConst()));
  752|      0|            break;
  753|      0|        case EOpTan:
  ------------------
  |  Branch (753:9): [True: 0, False: 921]
  ------------------
  754|      0|            newConstArray[i].setDConst(tan(unionArray[i].getDConst()));
  755|      0|            break;
  756|      0|        case EOpAsin:
  ------------------
  |  Branch (756:9): [True: 0, False: 921]
  ------------------
  757|      0|            newConstArray[i].setDConst(asin(unionArray[i].getDConst()));
  758|      0|            break;
  759|      0|        case EOpAcos:
  ------------------
  |  Branch (759:9): [True: 0, False: 921]
  ------------------
  760|      0|            newConstArray[i].setDConst(acos(unionArray[i].getDConst()));
  761|      0|            break;
  762|      0|        case EOpAtan:
  ------------------
  |  Branch (762:9): [True: 0, False: 921]
  ------------------
  763|      0|            newConstArray[i].setDConst(atan(unionArray[i].getDConst()));
  764|      0|            break;
  765|      0|        case EOpSinh:
  ------------------
  |  Branch (765:9): [True: 0, False: 921]
  ------------------
  766|      0|            newConstArray[i].setDConst(sinh(unionArray[i].getDConst()));
  767|      0|            break;
  768|      0|        case EOpCosh:
  ------------------
  |  Branch (768:9): [True: 0, False: 921]
  ------------------
  769|      0|            newConstArray[i].setDConst(cosh(unionArray[i].getDConst()));
  770|      0|            break;
  771|      0|        case EOpTanh:
  ------------------
  |  Branch (771:9): [True: 0, False: 921]
  ------------------
  772|      0|            newConstArray[i].setDConst(tanh(unionArray[i].getDConst()));
  773|      0|            break;
  774|      0|        case EOpAsinh:
  ------------------
  |  Branch (774:9): [True: 0, False: 921]
  ------------------
  775|      0|            newConstArray[i].setDConst(asinh(unionArray[i].getDConst()));
  776|      0|            break;
  777|      0|        case EOpAcosh:
  ------------------
  |  Branch (777:9): [True: 0, False: 921]
  ------------------
  778|      0|            newConstArray[i].setDConst(acosh(unionArray[i].getDConst()));
  779|      0|            break;
  780|      0|        case EOpAtanh:
  ------------------
  |  Branch (780:9): [True: 0, False: 921]
  ------------------
  781|      0|            newConstArray[i].setDConst(atanh(unionArray[i].getDConst()));
  782|      0|            break;
  783|       |
  784|      0|        case EOpDPdx:
  ------------------
  |  Branch (784:9): [True: 0, False: 921]
  ------------------
  785|      0|        case EOpDPdy:
  ------------------
  |  Branch (785:9): [True: 0, False: 921]
  ------------------
  786|      0|        case EOpFwidth:
  ------------------
  |  Branch (786:9): [True: 0, False: 921]
  ------------------
  787|      0|        case EOpDPdxFine:
  ------------------
  |  Branch (787:9): [True: 0, False: 921]
  ------------------
  788|      0|        case EOpDPdyFine:
  ------------------
  |  Branch (788:9): [True: 0, False: 921]
  ------------------
  789|      0|        case EOpFwidthFine:
  ------------------
  |  Branch (789:9): [True: 0, False: 921]
  ------------------
  790|      0|        case EOpDPdxCoarse:
  ------------------
  |  Branch (790:9): [True: 0, False: 921]
  ------------------
  791|      0|        case EOpDPdyCoarse:
  ------------------
  |  Branch (791:9): [True: 0, False: 921]
  ------------------
  792|      0|        case EOpFwidthCoarse:
  ------------------
  |  Branch (792:9): [True: 0, False: 921]
  ------------------
  793|       |            // The derivatives are all mandated to create a constant 0.
  794|      0|            newConstArray[i].setDConst(0.0);
  795|      0|            break;
  796|       |
  797|      0|        case EOpExp:
  ------------------
  |  Branch (797:9): [True: 0, False: 921]
  ------------------
  798|      0|            newConstArray[i].setDConst(exp(unionArray[i].getDConst()));
  799|      0|            break;
  800|      0|        case EOpLog:
  ------------------
  |  Branch (800:9): [True: 0, False: 921]
  ------------------
  801|      0|            newConstArray[i].setDConst(log(unionArray[i].getDConst()));
  802|      0|            break;
  803|      0|        case EOpExp2:
  ------------------
  |  Branch (803:9): [True: 0, False: 921]
  ------------------
  804|      0|            newConstArray[i].setDConst(exp2(unionArray[i].getDConst()));
  805|      0|            break;
  806|      0|        case EOpLog2:
  ------------------
  |  Branch (806:9): [True: 0, False: 921]
  ------------------
  807|      0|            newConstArray[i].setDConst(log2(unionArray[i].getDConst()));
  808|      0|            break;
  809|      0|        case EOpSqrt:
  ------------------
  |  Branch (809:9): [True: 0, False: 921]
  ------------------
  810|      0|            newConstArray[i].setDConst(sqrt(unionArray[i].getDConst()));
  811|      0|            break;
  812|      0|        case EOpInverseSqrt:
  ------------------
  |  Branch (812:9): [True: 0, False: 921]
  ------------------
  813|      0|            newConstArray[i].setDConst(1.0 / sqrt(unionArray[i].getDConst()));
  814|      0|            break;
  815|       |
  816|      0|        case EOpAbs:
  ------------------
  |  Branch (816:9): [True: 0, False: 921]
  ------------------
  817|      0|            if (unionArray[i].getType() == EbtDouble)
  ------------------
  |  Branch (817:17): [True: 0, False: 0]
  ------------------
  818|      0|                newConstArray[i].setDConst(fabs(unionArray[i].getDConst()));
  819|      0|            else if (unionArray[i].getType() == EbtInt)
  ------------------
  |  Branch (819:22): [True: 0, False: 0]
  ------------------
  820|      0|                newConstArray[i].setIConst(abs(unionArray[i].getIConst()));
  821|      0|            else
  822|      0|                newConstArray[i] = unionArray[i];
  823|      0|            break;
  824|      0|        case EOpSign:
  ------------------
  |  Branch (824:9): [True: 0, False: 921]
  ------------------
  825|      0|            #define SIGN(X) (X == 0 ? 0 : (X < 0 ? -1 : 1))
  826|      0|            if (unionArray[i].getType() == EbtDouble)
  ------------------
  |  Branch (826:17): [True: 0, False: 0]
  ------------------
  827|      0|                newConstArray[i].setDConst(SIGN(unionArray[i].getDConst()));
  ------------------
  |  |  825|      0|            #define SIGN(X) (X == 0 ? 0 : (X < 0 ? -1 : 1))
  |  |  ------------------
  |  |  |  Branch (825:30): [True: 0, False: 0]
  |  |  |  Branch (825:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  828|      0|            else
  829|      0|                newConstArray[i].setIConst(SIGN(unionArray[i].getIConst()));
  ------------------
  |  |  825|      0|            #define SIGN(X) (X == 0 ? 0 : (X < 0 ? -1 : 1))
  |  |  ------------------
  |  |  |  Branch (825:30): [True: 0, False: 0]
  |  |  |  Branch (825:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  830|      0|            break;
  831|      0|        case EOpFloor:
  ------------------
  |  Branch (831:9): [True: 0, False: 921]
  ------------------
  832|      0|            newConstArray[i].setDConst(floor(unionArray[i].getDConst()));
  833|      0|            break;
  834|      0|        case EOpTrunc:
  ------------------
  |  Branch (834:9): [True: 0, False: 921]
  ------------------
  835|      0|            if (unionArray[i].getDConst() > 0)
  ------------------
  |  Branch (835:17): [True: 0, False: 0]
  ------------------
  836|      0|                newConstArray[i].setDConst(floor(unionArray[i].getDConst()));
  837|      0|            else
  838|      0|                newConstArray[i].setDConst(ceil(unionArray[i].getDConst()));
  839|      0|            break;
  840|      0|        case EOpRound:
  ------------------
  |  Branch (840:9): [True: 0, False: 921]
  ------------------
  841|      0|            newConstArray[i].setDConst(floor(0.5 + unionArray[i].getDConst()));
  842|      0|            break;
  843|      0|        case EOpRoundEven:
  ------------------
  |  Branch (843:9): [True: 0, False: 921]
  ------------------
  844|      0|        {
  845|      0|            double flr = floor(unionArray[i].getDConst());
  846|      0|            bool even = flr / 2.0 == floor(flr / 2.0);
  847|      0|            double rounded = even ? ceil(unionArray[i].getDConst() - 0.5) : floor(unionArray[i].getDConst() + 0.5);
  ------------------
  |  Branch (847:30): [True: 0, False: 0]
  ------------------
  848|      0|            newConstArray[i].setDConst(rounded);
  849|      0|            break;
  850|      0|        }
  851|      0|        case EOpCeil:
  ------------------
  |  Branch (851:9): [True: 0, False: 921]
  ------------------
  852|      0|            newConstArray[i].setDConst(ceil(unionArray[i].getDConst()));
  853|      0|            break;
  854|      0|        case EOpFract:
  ------------------
  |  Branch (854:9): [True: 0, False: 921]
  ------------------
  855|      0|        {
  856|      0|            double x = unionArray[i].getDConst();
  857|      0|            newConstArray[i].setDConst(x - floor(x));
  858|      0|            break;
  859|      0|        }
  860|       |
  861|      0|        case EOpIsNan:
  ------------------
  |  Branch (861:9): [True: 0, False: 921]
  ------------------
  862|      0|        {
  863|      0|            newConstArray[i].setBConst(std::isnan(unionArray[i].getDConst()));
  864|      0|            break;
  865|      0|        }
  866|      0|        case EOpIsInf:
  ------------------
  |  Branch (866:9): [True: 0, False: 921]
  ------------------
  867|      0|        {
  868|      0|            newConstArray[i].setBConst(std::isinf(unionArray[i].getDConst()));
  869|      0|            break;
  870|      0|        }
  871|       |
  872|      0|        case EOpConvPtrToUint64:
  ------------------
  |  Branch (872:9): [True: 0, False: 921]
  ------------------
  873|      0|        case EOpConvUint64ToPtr:
  ------------------
  |  Branch (873:9): [True: 0, False: 921]
  ------------------
  874|      0|        case EOpConstructReference:
  ------------------
  |  Branch (874:9): [True: 0, False: 921]
  ------------------
  875|      0|            newConstArray[i].setU64Const(unionArray[i].getU64Const()); break;
  876|       |
  877|       |        // The constant is held as a double, so narrow it back to the declared
  878|       |        // width before reinterpreting its bits.
  879|      0|        case EOpFloatBitsToInt:
  ------------------
  |  Branch (879:9): [True: 0, False: 921]
  ------------------
  880|      0|            newConstArray[i].setIConst(bitCast<int>(static_cast<float>(unionArray[i].getDConst())));
  881|      0|            break;
  882|      0|        case EOpFloatBitsToUint:
  ------------------
  |  Branch (882:9): [True: 0, False: 921]
  ------------------
  883|      0|            newConstArray[i].setUConst(bitCast<unsigned int>(static_cast<float>(unionArray[i].getDConst())));
  884|      0|            break;
  885|      0|        case EOpIntBitsToFloat:
  ------------------
  |  Branch (885:9): [True: 0, False: 921]
  ------------------
  886|      0|            newConstArray[i].setDConst(bitCast<float>(unionArray[i].getIConst()));
  887|      0|            break;
  888|      0|        case EOpUintBitsToFloat:
  ------------------
  |  Branch (888:9): [True: 0, False: 921]
  ------------------
  889|      0|            newConstArray[i].setDConst(bitCast<float>(unionArray[i].getUConst()));
  890|      0|            break;
  891|      0|        case EOpDoubleBitsToInt64:
  ------------------
  |  Branch (891:9): [True: 0, False: 921]
  ------------------
  892|      0|            newConstArray[i].setI64Const(bitCast<long long>(unionArray[i].getDConst()));
  893|      0|            break;
  894|      0|        case EOpDoubleBitsToUint64:
  ------------------
  |  Branch (894:9): [True: 0, False: 921]
  ------------------
  895|      0|            newConstArray[i].setU64Const(bitCast<unsigned long long>(unionArray[i].getDConst()));
  896|      0|            break;
  897|      0|        case EOpInt64BitsToDouble:
  ------------------
  |  Branch (897:9): [True: 0, False: 921]
  ------------------
  898|      0|            newConstArray[i].setDConst(bitCast<double>(unionArray[i].getI64Const()));
  899|      0|            break;
  900|      0|        case EOpUint64BitsToDouble:
  ------------------
  |  Branch (900:9): [True: 0, False: 921]
  ------------------
  901|      0|            newConstArray[i].setDConst(bitCast<double>(unionArray[i].getU64Const()));
  902|      0|            break;
  903|       |
  904|       |        // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
  905|       |
  906|      0|        case EOpFloat16BitsToInt16:
  ------------------
  |  Branch (906:9): [True: 0, False: 921]
  ------------------
  907|      0|        case EOpFloat16BitsToUint16:
  ------------------
  |  Branch (907:9): [True: 0, False: 921]
  ------------------
  908|      0|        case EOpInt16BitsToFloat16:
  ------------------
  |  Branch (908:9): [True: 0, False: 921]
  ------------------
  909|      0|        case EOpUint16BitsToFloat16:
  ------------------
  |  Branch (909:9): [True: 0, False: 921]
  ------------------
  910|      4|        default:
  ------------------
  |  Branch (910:9): [True: 4, False: 917]
  ------------------
  911|      4|            return nullptr;
  912|    921|        }
  913|    921|    }
  914|       |
  915|    914|    TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType);
  916|    914|    newNode->getWritableType().getQualifier().storage = EvqConst;
  917|    914|    newNode->setLoc(getLoc());
  918|       |
  919|    914|    return newNode;
  920|    918|}
_ZN7glslang13TIntermediate4foldEPNS_16TIntermAggregateE:
  927|  4.42k|{
  928|  4.42k|    if (aggrNode == nullptr)
  ------------------
  |  Branch (928:9): [True: 0, False: 4.42k]
  ------------------
  929|      0|        return aggrNode;
  930|       |
  931|  4.42k|    if (! areAllChildConst(aggrNode))
  ------------------
  |  Branch (931:9): [True: 3, False: 4.42k]
  ------------------
  932|      3|        return aggrNode;
  933|       |
  934|  4.42k|    if (aggrNode->isConstructor())
  ------------------
  |  Branch (934:9): [True: 4.41k, False: 3]
  ------------------
  935|  4.41k|        return foldConstructor(aggrNode);
  936|       |
  937|      3|    TIntermSequence& children = aggrNode->getSequence();
  938|       |
  939|       |    // First, see if this is an operation to constant fold, kick out if not,
  940|       |    // see what size the result is if so.
  941|       |
  942|      3|    bool componentwise = false;  // will also say componentwise if a scalar argument gets repeated to make per-component results
  943|      3|    int objectSize;
  944|      3|    switch (aggrNode->getOp()) {
  945|      0|    case EOpAtan:
  ------------------
  |  Branch (945:5): [True: 0, False: 3]
  ------------------
  946|      0|    case EOpPow:
  ------------------
  |  Branch (946:5): [True: 0, False: 3]
  ------------------
  947|      0|    case EOpMin:
  ------------------
  |  Branch (947:5): [True: 0, False: 3]
  ------------------
  948|      0|    case EOpMax:
  ------------------
  |  Branch (948:5): [True: 0, False: 3]
  ------------------
  949|      0|    case EOpMix:
  ------------------
  |  Branch (949:5): [True: 0, False: 3]
  ------------------
  950|      0|    case EOpMod:
  ------------------
  |  Branch (950:5): [True: 0, False: 3]
  ------------------
  951|      0|    case EOpClamp:
  ------------------
  |  Branch (951:5): [True: 0, False: 3]
  ------------------
  952|      0|    case EOpLessThan:
  ------------------
  |  Branch (952:5): [True: 0, False: 3]
  ------------------
  953|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (953:5): [True: 0, False: 3]
  ------------------
  954|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (954:5): [True: 0, False: 3]
  ------------------
  955|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (955:5): [True: 0, False: 3]
  ------------------
  956|      0|    case EOpVectorEqual:
  ------------------
  |  Branch (956:5): [True: 0, False: 3]
  ------------------
  957|      0|    case EOpVectorNotEqual:
  ------------------
  |  Branch (957:5): [True: 0, False: 3]
  ------------------
  958|      0|        componentwise = true;
  959|      0|        objectSize = children[0]->getAsConstantUnion()->getType().computeNumComponents();
  960|      0|        break;
  961|      0|    case EOpCross:
  ------------------
  |  Branch (961:5): [True: 0, False: 3]
  ------------------
  962|      0|    case EOpReflect:
  ------------------
  |  Branch (962:5): [True: 0, False: 3]
  ------------------
  963|      0|    case EOpRefract:
  ------------------
  |  Branch (963:5): [True: 0, False: 3]
  ------------------
  964|      0|    case EOpFaceForward:
  ------------------
  |  Branch (964:5): [True: 0, False: 3]
  ------------------
  965|      0|        objectSize = children[0]->getAsConstantUnion()->getType().computeNumComponents();
  966|      0|        break;
  967|      0|    case EOpDistance:
  ------------------
  |  Branch (967:5): [True: 0, False: 3]
  ------------------
  968|      0|    case EOpDot:
  ------------------
  |  Branch (968:5): [True: 0, False: 3]
  ------------------
  969|      0|        objectSize = 1;
  970|      0|        break;
  971|      0|    case EOpOuterProduct:
  ------------------
  |  Branch (971:5): [True: 0, False: 3]
  ------------------
  972|      0|        objectSize = children[0]->getAsTyped()->getType().getVectorSize() *
  973|      0|                     children[1]->getAsTyped()->getType().getVectorSize();
  974|      0|        break;
  975|      0|    case EOpStep:
  ------------------
  |  Branch (975:5): [True: 0, False: 3]
  ------------------
  976|      0|        componentwise = true;
  977|      0|        objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(),
  978|      0|                              children[1]->getAsTyped()->getType().getVectorSize());
  979|      0|        break;
  980|      0|    case EOpSmoothStep:
  ------------------
  |  Branch (980:5): [True: 0, False: 3]
  ------------------
  981|      0|        componentwise = true;
  982|      0|        objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(),
  983|      0|                              children[2]->getAsTyped()->getType().getVectorSize());
  984|      0|        break;
  985|      0|    case EOpMul:
  ------------------
  |  Branch (985:5): [True: 0, False: 3]
  ------------------
  986|      0|        {
  987|      0|        TIntermConstantUnion* left = children[0]->getAsConstantUnion();
  988|      0|        TIntermConstantUnion* right = children[1]->getAsConstantUnion();
  989|      0|        return left->fold(EOpMul, right);
  990|      0|        }
  991|      3|    default:
  ------------------
  |  Branch (991:5): [True: 3, False: 0]
  ------------------
  992|      3|        return aggrNode;
  993|      3|    }
  994|      0|    TConstUnionArray newConstArray(objectSize);
  995|       |
  996|      0|    TVector<TConstUnionArray> childConstUnions;
  997|      0|    for (unsigned int arg = 0; arg < children.size(); ++arg)
  ------------------
  |  Branch (997:32): [True: 0, False: 0]
  ------------------
  998|      0|        childConstUnions.push_back(children[arg]->getAsConstantUnion()->getConstArray());
  999|       |
 1000|      0|    if (componentwise) {
  ------------------
  |  Branch (1000:9): [True: 0, False: 0]
  ------------------
 1001|      0|        for (int comp = 0; comp < objectSize; comp++) {
  ------------------
  |  Branch (1001:28): [True: 0, False: 0]
  ------------------
 1002|       |
 1003|       |            // some arguments are scalars instead of matching vectors; simulate a smear
 1004|      0|            int arg0comp = std::min(comp, children[0]->getAsTyped()->getType().getVectorSize() - 1);
 1005|      0|            int arg1comp = 0;
 1006|      0|            if (children.size() > 1)
  ------------------
  |  Branch (1006:17): [True: 0, False: 0]
  ------------------
 1007|      0|                arg1comp = std::min(comp, children[1]->getAsTyped()->getType().getVectorSize() - 1);
 1008|      0|            int arg2comp = 0;
 1009|      0|            if (children.size() > 2)
  ------------------
  |  Branch (1009:17): [True: 0, False: 0]
  ------------------
 1010|      0|                arg2comp = std::min(comp, children[2]->getAsTyped()->getType().getVectorSize() - 1);
 1011|       |
 1012|      0|            switch (aggrNode->getOp()) {
 1013|      0|            case EOpAtan:
  ------------------
  |  Branch (1013:13): [True: 0, False: 0]
  ------------------
 1014|      0|                newConstArray[comp].setDConst(atan2(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
 1015|      0|                break;
 1016|      0|            case EOpPow:
  ------------------
  |  Branch (1016:13): [True: 0, False: 0]
  ------------------
 1017|      0|                newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
 1018|      0|                break;
 1019|      0|            case EOpMod:
  ------------------
  |  Branch (1019:13): [True: 0, False: 0]
  ------------------
 1020|      0|            {
 1021|      0|                double arg0 = childConstUnions[0][arg0comp].getDConst();
 1022|      0|                double arg1 = childConstUnions[1][arg1comp].getDConst();
 1023|      0|                double result = arg0 - arg1 * floor(arg0 / arg1);
 1024|      0|                newConstArray[comp].setDConst(result);
 1025|      0|                break;
 1026|      0|            }
 1027|      0|            case EOpMin:
  ------------------
  |  Branch (1027:13): [True: 0, False: 0]
  ------------------
 1028|      0|                switch(children[0]->getAsTyped()->getBasicType()) {
 1029|      0|                case EbtFloat16:
  ------------------
  |  Branch (1029:17): [True: 0, False: 0]
  ------------------
 1030|      0|                case EbtBFloat16:
  ------------------
  |  Branch (1030:17): [True: 0, False: 0]
  ------------------
 1031|      0|                case EbtFloatE5M2:
  ------------------
  |  Branch (1031:17): [True: 0, False: 0]
  ------------------
 1032|      0|                case EbtFloatE4M3:
  ------------------
  |  Branch (1032:17): [True: 0, False: 0]
  ------------------
 1033|      0|                case EbtFloatE2M1:
  ------------------
  |  Branch (1033:17): [True: 0, False: 0]
  ------------------
 1034|      0|                case EbtFloatE3M2:
  ------------------
  |  Branch (1034:17): [True: 0, False: 0]
  ------------------
 1035|      0|                case EbtFloatE2M3:
  ------------------
  |  Branch (1035:17): [True: 0, False: 0]
  ------------------
 1036|      0|                case EbtFloatUE8M0:
  ------------------
  |  Branch (1036:17): [True: 0, False: 0]
  ------------------
 1037|      0|                case EbtFloatMXINT8:
  ------------------
  |  Branch (1037:17): [True: 0, False: 0]
  ------------------
 1038|      0|                case EbtFloat:
  ------------------
  |  Branch (1038:17): [True: 0, False: 0]
  ------------------
 1039|      0|                case EbtDouble:
  ------------------
  |  Branch (1039:17): [True: 0, False: 0]
  ------------------
 1040|      0|                    newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
 1041|      0|                    break;
 1042|      0|                case EbtInt:
  ------------------
  |  Branch (1042:17): [True: 0, False: 0]
  ------------------
 1043|      0|                    newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
 1044|      0|                    break;
 1045|      0|                case EbtUint:
  ------------------
  |  Branch (1045:17): [True: 0, False: 0]
  ------------------
 1046|      0|                    newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
 1047|      0|                    break;
 1048|      0|                case EbtInt8:
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  ------------------
 1049|      0|                    newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
 1050|      0|                    break;
 1051|      0|                case EbtUint8:
  ------------------
  |  Branch (1051:17): [True: 0, False: 0]
  ------------------
 1052|      0|                    newConstArray[comp].setU8Const(std::min(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
 1053|      0|                    break;
 1054|      0|                case EbtInt16:
  ------------------
  |  Branch (1054:17): [True: 0, False: 0]
  ------------------
 1055|      0|                    newConstArray[comp].setI16Const(std::min(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
 1056|      0|                    break;
 1057|      0|                case EbtUint16:
  ------------------
  |  Branch (1057:17): [True: 0, False: 0]
  ------------------
 1058|      0|                    newConstArray[comp].setU16Const(std::min(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
 1059|      0|                    break;
 1060|      0|                case EbtInt64:
  ------------------
  |  Branch (1060:17): [True: 0, False: 0]
  ------------------
 1061|      0|                    newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
 1062|      0|                    break;
 1063|      0|                case EbtUint64:
  ------------------
  |  Branch (1063:17): [True: 0, False: 0]
  ------------------
 1064|      0|                    newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
 1065|      0|                    break;
 1066|      0|                default: assert(false && "Default missing");
  ------------------
  |  Branch (1066:17): [True: 0, False: 0]
  ------------------
 1067|      0|                }
 1068|      0|                break;
 1069|      0|            case EOpMax:
  ------------------
  |  Branch (1069:13): [True: 0, False: 0]
  ------------------
 1070|      0|                switch(children[0]->getAsTyped()->getBasicType()) {
 1071|      0|                case EbtFloat16:
  ------------------
  |  Branch (1071:17): [True: 0, False: 0]
  ------------------
 1072|      0|                case EbtBFloat16:
  ------------------
  |  Branch (1072:17): [True: 0, False: 0]
  ------------------
 1073|      0|                case EbtFloatE5M2:
  ------------------
  |  Branch (1073:17): [True: 0, False: 0]
  ------------------
 1074|      0|                case EbtFloatE4M3:
  ------------------
  |  Branch (1074:17): [True: 0, False: 0]
  ------------------
 1075|      0|                case EbtFloatE2M1:
  ------------------
  |  Branch (1075:17): [True: 0, False: 0]
  ------------------
 1076|      0|                case EbtFloatE3M2:
  ------------------
  |  Branch (1076:17): [True: 0, False: 0]
  ------------------
 1077|      0|                case EbtFloatE2M3:
  ------------------
  |  Branch (1077:17): [True: 0, False: 0]
  ------------------
 1078|      0|                case EbtFloatUE8M0:
  ------------------
  |  Branch (1078:17): [True: 0, False: 0]
  ------------------
 1079|      0|                case EbtFloatMXINT8:
  ------------------
  |  Branch (1079:17): [True: 0, False: 0]
  ------------------
 1080|      0|                case EbtFloat:
  ------------------
  |  Branch (1080:17): [True: 0, False: 0]
  ------------------
 1081|      0|                case EbtDouble:
  ------------------
  |  Branch (1081:17): [True: 0, False: 0]
  ------------------
 1082|      0|                    newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
 1083|      0|                    break;
 1084|      0|                case EbtInt:
  ------------------
  |  Branch (1084:17): [True: 0, False: 0]
  ------------------
 1085|      0|                    newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
 1086|      0|                    break;
 1087|      0|                case EbtUint:
  ------------------
  |  Branch (1087:17): [True: 0, False: 0]
  ------------------
 1088|      0|                    newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
 1089|      0|                    break;
 1090|      0|                case EbtInt8:
  ------------------
  |  Branch (1090:17): [True: 0, False: 0]
  ------------------
 1091|      0|                    newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
 1092|      0|                    break;
 1093|      0|                case EbtUint8:
  ------------------
  |  Branch (1093:17): [True: 0, False: 0]
  ------------------
 1094|      0|                    newConstArray[comp].setU8Const(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
 1095|      0|                    break;
 1096|      0|                case EbtInt16:
  ------------------
  |  Branch (1096:17): [True: 0, False: 0]
  ------------------
 1097|      0|                    newConstArray[comp].setI16Const(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
 1098|      0|                    break;
 1099|      0|                case EbtUint16:
  ------------------
  |  Branch (1099:17): [True: 0, False: 0]
  ------------------
 1100|      0|                    newConstArray[comp].setU16Const(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
 1101|      0|                    break;
 1102|      0|                case EbtInt64:
  ------------------
  |  Branch (1102:17): [True: 0, False: 0]
  ------------------
 1103|      0|                    newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
 1104|      0|                    break;
 1105|      0|                case EbtUint64:
  ------------------
  |  Branch (1105:17): [True: 0, False: 0]
  ------------------
 1106|      0|                    newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
 1107|      0|                    break;
 1108|      0|                default: assert(false && "Default missing");
  ------------------
  |  Branch (1108:17): [True: 0, False: 0]
  ------------------
 1109|      0|                }
 1110|      0|                break;
 1111|      0|            case EOpClamp:
  ------------------
  |  Branch (1111:13): [True: 0, False: 0]
  ------------------
 1112|      0|                switch(children[0]->getAsTyped()->getBasicType()) {
 1113|      0|                case EbtFloat16:
  ------------------
  |  Branch (1113:17): [True: 0, False: 0]
  ------------------
 1114|      0|                case EbtBFloat16:
  ------------------
  |  Branch (1114:17): [True: 0, False: 0]
  ------------------
 1115|      0|                case EbtFloatE5M2:
  ------------------
  |  Branch (1115:17): [True: 0, False: 0]
  ------------------
 1116|      0|                case EbtFloatE4M3:
  ------------------
  |  Branch (1116:17): [True: 0, False: 0]
  ------------------
 1117|      0|                case EbtFloatE2M1:
  ------------------
  |  Branch (1117:17): [True: 0, False: 0]
  ------------------
 1118|      0|                case EbtFloatE3M2:
  ------------------
  |  Branch (1118:17): [True: 0, False: 0]
  ------------------
 1119|      0|                case EbtFloatE2M3:
  ------------------
  |  Branch (1119:17): [True: 0, False: 0]
  ------------------
 1120|      0|                case EbtFloatUE8M0:
  ------------------
  |  Branch (1120:17): [True: 0, False: 0]
  ------------------
 1121|      0|                case EbtFloatMXINT8:
  ------------------
  |  Branch (1121:17): [True: 0, False: 0]
  ------------------
 1122|      0|                case EbtFloat:
  ------------------
  |  Branch (1122:17): [True: 0, False: 0]
  ------------------
 1123|      0|                case EbtDouble:
  ------------------
  |  Branch (1123:17): [True: 0, False: 0]
  ------------------
 1124|      0|                    newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()),
 1125|      0|                                                                                                               childConstUnions[2][arg2comp].getDConst()));
 1126|      0|                    break;
 1127|      0|                case EbtUint:
  ------------------
  |  Branch (1127:17): [True: 0, False: 0]
  ------------------
 1128|      0|                    newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
 1129|      0|                                                                                                                   childConstUnions[2][arg2comp].getUConst()));
 1130|      0|                    break;
 1131|      0|                case EbtInt8:
  ------------------
  |  Branch (1131:17): [True: 0, False: 0]
  ------------------
 1132|      0|                    newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()),
 1133|      0|                                                                                                                   childConstUnions[2][arg2comp].getI8Const()));
 1134|      0|                    break;
 1135|      0|                case EbtUint8:
  ------------------
  |  Branch (1135:17): [True: 0, False: 0]
  ------------------
 1136|      0|                     newConstArray[comp].setU8Const(std::min(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()),
 1137|      0|                                                                                                                   childConstUnions[2][arg2comp].getU8Const()));
 1138|      0|                    break;
 1139|      0|                case EbtInt16:
  ------------------
  |  Branch (1139:17): [True: 0, False: 0]
  ------------------
 1140|      0|                    newConstArray[comp].setI16Const(std::min(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()),
 1141|      0|                                                                                                                   childConstUnions[2][arg2comp].getI16Const()));
 1142|      0|                    break;
 1143|      0|                case EbtUint16:
  ------------------
  |  Branch (1143:17): [True: 0, False: 0]
  ------------------
 1144|      0|                    newConstArray[comp].setU16Const(std::min(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()),
 1145|      0|                                                                                                                   childConstUnions[2][arg2comp].getU16Const()));
 1146|      0|                    break;
 1147|      0|                case EbtInt:
  ------------------
  |  Branch (1147:17): [True: 0, False: 0]
  ------------------
 1148|      0|                    newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
 1149|      0|                                                                                                                   childConstUnions[2][arg2comp].getIConst()));
 1150|      0|                    break;
 1151|      0|                case EbtInt64:
  ------------------
  |  Branch (1151:17): [True: 0, False: 0]
  ------------------
 1152|      0|                    newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
 1153|      0|                                                                                                                       childConstUnions[2][arg2comp].getI64Const()));
 1154|      0|                    break;
 1155|      0|                case EbtUint64:
  ------------------
  |  Branch (1155:17): [True: 0, False: 0]
  ------------------
 1156|      0|                    newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
 1157|      0|                                                                                                                       childConstUnions[2][arg2comp].getU64Const()));
 1158|      0|                    break;
 1159|      0|                default: assert(false && "Default missing");
  ------------------
  |  Branch (1159:17): [True: 0, False: 0]
  ------------------
 1160|      0|                }
 1161|      0|                break;
 1162|      0|            case EOpLessThan:
  ------------------
  |  Branch (1162:13): [True: 0, False: 0]
  ------------------
 1163|      0|                newConstArray[comp].setBConst(childConstUnions[0][arg0comp] < childConstUnions[1][arg1comp]);
 1164|      0|                break;
 1165|      0|            case EOpGreaterThan:
  ------------------
  |  Branch (1165:13): [True: 0, False: 0]
  ------------------
 1166|      0|                newConstArray[comp].setBConst(childConstUnions[0][arg0comp] > childConstUnions[1][arg1comp]);
 1167|      0|                break;
 1168|      0|            case EOpLessThanEqual:
  ------------------
  |  Branch (1168:13): [True: 0, False: 0]
  ------------------
 1169|      0|                newConstArray[comp].setBConst(! (childConstUnions[0][arg0comp] > childConstUnions[1][arg1comp]));
 1170|      0|                break;
 1171|      0|            case EOpGreaterThanEqual:
  ------------------
  |  Branch (1171:13): [True: 0, False: 0]
  ------------------
 1172|      0|                newConstArray[comp].setBConst(! (childConstUnions[0][arg0comp] < childConstUnions[1][arg1comp]));
 1173|      0|                break;
 1174|      0|            case EOpVectorEqual:
  ------------------
  |  Branch (1174:13): [True: 0, False: 0]
  ------------------
 1175|      0|                newConstArray[comp].setBConst(childConstUnions[0][arg0comp] == childConstUnions[1][arg1comp]);
 1176|      0|                break;
 1177|      0|            case EOpVectorNotEqual:
  ------------------
  |  Branch (1177:13): [True: 0, False: 0]
  ------------------
 1178|      0|                newConstArray[comp].setBConst(childConstUnions[0][arg0comp] != childConstUnions[1][arg1comp]);
 1179|      0|                break;
 1180|      0|            case EOpMix:
  ------------------
  |  Branch (1180:13): [True: 0, False: 0]
  ------------------
 1181|      0|                if (!children[0]->getAsTyped()->isFloatingDomain())
  ------------------
  |  Branch (1181:21): [True: 0, False: 0]
  ------------------
 1182|      0|                    return aggrNode;
 1183|      0|                if (children[2]->getAsTyped()->getBasicType() == EbtBool) {
  ------------------
  |  Branch (1183:21): [True: 0, False: 0]
  ------------------
 1184|      0|                    newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst()
  ------------------
  |  Branch (1184:51): [True: 0, False: 0]
  ------------------
 1185|      0|                        ? childConstUnions[1][arg1comp].getDConst()
 1186|      0|                        : childConstUnions[0][arg0comp].getDConst());
 1187|      0|                } else {
 1188|      0|                    newConstArray[comp].setDConst(
 1189|      0|                        childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) +
 1190|      0|                        childConstUnions[1][arg1comp].getDConst() *        childConstUnions[2][arg2comp].getDConst());
 1191|      0|                }
 1192|      0|                break;
 1193|      0|            case EOpStep:
  ------------------
  |  Branch (1193:13): [True: 0, False: 0]
  ------------------
 1194|      0|                newConstArray[comp].setDConst(childConstUnions[1][arg1comp].getDConst() < childConstUnions[0][arg0comp].getDConst() ? 0.0 : 1.0);
  ------------------
  |  Branch (1194:47): [True: 0, False: 0]
  ------------------
 1195|      0|                break;
 1196|      0|            case EOpSmoothStep:
  ------------------
  |  Branch (1196:13): [True: 0, False: 0]
  ------------------
 1197|      0|            {
 1198|      0|                double t = (childConstUnions[2][arg2comp].getDConst() - childConstUnions[0][arg0comp].getDConst()) /
 1199|      0|                           (childConstUnions[1][arg1comp].getDConst() - childConstUnions[0][arg0comp].getDConst());
 1200|      0|                if (t < 0.0)
  ------------------
  |  Branch (1200:21): [True: 0, False: 0]
  ------------------
 1201|      0|                    t = 0.0;
 1202|      0|                if (t > 1.0)
  ------------------
  |  Branch (1202:21): [True: 0, False: 0]
  ------------------
 1203|      0|                    t = 1.0;
 1204|      0|                newConstArray[comp].setDConst(t * t * (3.0 - 2.0 * t));
 1205|      0|                break;
 1206|      0|            }
 1207|      0|            default:
  ------------------
  |  Branch (1207:13): [True: 0, False: 0]
  ------------------
 1208|      0|                return aggrNode;
 1209|      0|            }
 1210|      0|        }
 1211|      0|    } else {
 1212|       |        // Non-componentwise...
 1213|       |
 1214|      0|        int numComps = children[0]->getAsConstantUnion()->getType().computeNumComponents();
 1215|      0|        double dot;
 1216|       |
 1217|      0|        switch (aggrNode->getOp()) {
 1218|      0|        case EOpDistance:
  ------------------
  |  Branch (1218:9): [True: 0, False: 0]
  ------------------
 1219|      0|        {
 1220|      0|            double sum = 0.0;
 1221|      0|            for (int comp = 0; comp < numComps; ++comp) {
  ------------------
  |  Branch (1221:32): [True: 0, False: 0]
  ------------------
 1222|      0|                double diff = childConstUnions[1][comp].getDConst() - childConstUnions[0][comp].getDConst();
 1223|      0|                sum += diff * diff;
 1224|      0|            }
 1225|      0|            newConstArray[0].setDConst(sqrt(sum));
 1226|      0|            break;
 1227|      0|        }
 1228|      0|        case EOpDot:
  ------------------
  |  Branch (1228:9): [True: 0, False: 0]
  ------------------
 1229|      0|            if (!children[0]->getAsTyped()->isFloatingDomain()) {
  ------------------
  |  Branch (1229:17): [True: 0, False: 0]
  ------------------
 1230|      0|                return aggrNode;
 1231|      0|            }
 1232|      0|            newConstArray[0].setDConst(childConstUnions[0].dot(childConstUnions[1]));
 1233|      0|            break;
 1234|      0|        case EOpCross:
  ------------------
  |  Branch (1234:9): [True: 0, False: 0]
  ------------------
 1235|      0|            newConstArray[0] = childConstUnions[0][1] * childConstUnions[1][2] - childConstUnions[0][2] * childConstUnions[1][1];
 1236|      0|            newConstArray[1] = childConstUnions[0][2] * childConstUnions[1][0] - childConstUnions[0][0] * childConstUnions[1][2];
 1237|      0|            newConstArray[2] = childConstUnions[0][0] * childConstUnions[1][1] - childConstUnions[0][1] * childConstUnions[1][0];
 1238|      0|            break;
 1239|      0|        case EOpFaceForward:
  ------------------
  |  Branch (1239:9): [True: 0, False: 0]
  ------------------
 1240|       |            // If dot(Nref, I) < 0 return N, otherwise return -N:  Arguments are (N, I, Nref).
 1241|      0|            dot = childConstUnions[1].dot(childConstUnions[2]);
 1242|      0|            for (int comp = 0; comp < numComps; ++comp) {
  ------------------
  |  Branch (1242:32): [True: 0, False: 0]
  ------------------
 1243|      0|                if (dot < 0.0)
  ------------------
  |  Branch (1243:21): [True: 0, False: 0]
  ------------------
 1244|      0|                    newConstArray[comp] = childConstUnions[0][comp];
 1245|      0|                else
 1246|      0|                    newConstArray[comp].setDConst(-childConstUnions[0][comp].getDConst());
 1247|      0|            }
 1248|      0|            break;
 1249|      0|        case EOpReflect:
  ------------------
  |  Branch (1249:9): [True: 0, False: 0]
  ------------------
 1250|       |            // I - 2 * dot(N, I) * N:  Arguments are (I, N).
 1251|      0|            dot = childConstUnions[0].dot(childConstUnions[1]);
 1252|      0|            dot *= 2.0;
 1253|      0|            for (int comp = 0; comp < numComps; ++comp)
  ------------------
  |  Branch (1253:32): [True: 0, False: 0]
  ------------------
 1254|      0|                newConstArray[comp].setDConst(childConstUnions[0][comp].getDConst() - dot * childConstUnions[1][comp].getDConst());
 1255|      0|            break;
 1256|      0|        case EOpRefract:
  ------------------
  |  Branch (1256:9): [True: 0, False: 0]
  ------------------
 1257|      0|        {
 1258|       |            // Arguments are (I, N, eta).
 1259|       |            // k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I))
 1260|       |            // if (k < 0.0)
 1261|       |            //     return dvec(0.0)
 1262|       |            // else
 1263|       |            //     return eta * I - (eta * dot(N, I) + sqrt(k)) * N
 1264|      0|            dot = childConstUnions[0].dot(childConstUnions[1]);
 1265|      0|            double eta = childConstUnions[2][0].getDConst();
 1266|      0|            double k = 1.0 - eta * eta * (1.0 - dot * dot);
 1267|      0|            if (k < 0.0) {
  ------------------
  |  Branch (1267:17): [True: 0, False: 0]
  ------------------
 1268|      0|                for (int comp = 0; comp < numComps; ++comp)
  ------------------
  |  Branch (1268:36): [True: 0, False: 0]
  ------------------
 1269|      0|                    newConstArray[comp].setDConst(0.0);
 1270|      0|            } else {
 1271|      0|                for (int comp = 0; comp < numComps; ++comp)
  ------------------
  |  Branch (1271:36): [True: 0, False: 0]
  ------------------
 1272|      0|                    newConstArray[comp].setDConst(eta * childConstUnions[0][comp].getDConst() - (eta * dot + sqrt(k)) * childConstUnions[1][comp].getDConst());
 1273|      0|            }
 1274|      0|            break;
 1275|      0|        }
 1276|      0|        case EOpOuterProduct:
  ------------------
  |  Branch (1276:9): [True: 0, False: 0]
  ------------------
 1277|      0|        {
 1278|      0|            int numRows = numComps;
 1279|      0|            int numCols = children[1]->getAsConstantUnion()->getType().computeNumComponents();
 1280|      0|            for (int row = 0; row < numRows; ++row)
  ------------------
  |  Branch (1280:31): [True: 0, False: 0]
  ------------------
 1281|      0|                for (int col = 0; col < numCols; ++col)
  ------------------
  |  Branch (1281:35): [True: 0, False: 0]
  ------------------
 1282|      0|                    newConstArray[col * numRows + row] = childConstUnions[0][row] * childConstUnions[1][col];
 1283|      0|            break;
 1284|      0|        }
 1285|      0|        default:
  ------------------
  |  Branch (1285:9): [True: 0, False: 0]
  ------------------
 1286|      0|            return aggrNode;
 1287|      0|        }
 1288|      0|    }
 1289|       |
 1290|      0|    TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, aggrNode->getType());
 1291|      0|    newNode->getWritableType().getQualifier().storage = EvqConst;
 1292|      0|    newNode->setLoc(aggrNode->getLoc());
 1293|       |
 1294|      0|    return newNode;
 1295|      0|}
_ZN7glslang13TIntermediate16areAllChildConstEPNS_16TIntermAggregateE:
 1298|  4.42k|{
 1299|  4.42k|    bool allConstant = true;
 1300|       |
 1301|       |    // check if all the child nodes are constants so that they can be inserted into
 1302|       |    // the parent node
 1303|  4.42k|    if (aggrNode) {
  ------------------
  |  Branch (1303:9): [True: 4.42k, False: 0]
  ------------------
 1304|  4.42k|        TIntermSequence& childSequenceVector = aggrNode->getSequence();
 1305|  4.42k|        for (TIntermSequence::iterator p  = childSequenceVector.begin();
 1306|  17.6k|                                       p != childSequenceVector.end(); p++) {
  ------------------
  |  Branch (1306:40): [True: 13.2k, False: 4.42k]
  ------------------
 1307|  13.2k|            if (!(*p)->getAsTyped()->getAsConstantUnion())
  ------------------
  |  Branch (1307:17): [True: 3, False: 13.2k]
  ------------------
 1308|      3|                return false;
 1309|  13.2k|        }
 1310|  4.42k|    }
 1311|       |
 1312|  4.42k|    return allConstant;
 1313|  4.42k|}
_ZN7glslang13TIntermediate15foldConstructorEPNS_16TIntermAggregateE:
 1316|  4.41k|{
 1317|  4.41k|    bool error = false;
 1318|       |
 1319|  4.41k|    TConstUnionArray unionArray(aggrNode->getType().computeNumComponents());
 1320|  4.41k|    if (aggrNode->getSequence().size() == 1)
  ------------------
  |  Branch (1320:9): [True: 15, False: 4.40k]
  ------------------
 1321|     15|        error = parseConstTree(aggrNode, unionArray, aggrNode->getOp(), aggrNode->getType(), true);
 1322|  4.40k|    else
 1323|  4.40k|        error = parseConstTree(aggrNode, unionArray, aggrNode->getOp(), aggrNode->getType());
 1324|       |
 1325|  4.41k|    if (error)
  ------------------
  |  Branch (1325:9): [True: 0, False: 4.41k]
  ------------------
 1326|      0|        return aggrNode;
 1327|       |
 1328|  4.41k|    return addConstantUnion(unionArray, aggrNode->getType(), aggrNode->getLoc());
 1329|  4.41k|}

_ZN7glslang13TInfoSinkBase6appendEPKc:
   42|  5.09M|{
   43|  5.09M|    if (outputStream & EString) {
  ------------------
  |  Branch (43:9): [True: 5.09M, False: 0]
  ------------------
   44|  5.09M|        if (s == nullptr)
  ------------------
  |  Branch (44:13): [True: 0, False: 5.09M]
  ------------------
   45|      0|            sink.append("(null)");
   46|  5.09M|        else {
   47|  5.09M|            checkMem(strlen(s));
   48|  5.09M|            sink.append(s);
   49|  5.09M|        }
   50|  5.09M|    }
   51|       |
   52|       |//#ifdef _WIN32
   53|       |//    if (outputStream & EDebugger)
   54|       |//        OutputDebugString(s);
   55|       |//#endif
   56|       |
   57|  5.09M|    if (outputStream & EStdOut)
  ------------------
  |  Branch (57:9): [True: 0, False: 5.09M]
  ------------------
   58|      0|        fprintf(stdout, "%s", s);
   59|  5.09M|}
_ZN7glslang13TInfoSinkBase6appendERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
   82|  4.30k|{
   83|  4.30k|    if (outputStream & EString) {
  ------------------
  |  Branch (83:9): [True: 4.30k, False: 0]
  ------------------
   84|  4.30k|        checkMem(t.size());
   85|  4.30k|        sink.append(t);
   86|  4.30k|    }
   87|       |
   88|       |//#ifdef _WIN32
   89|       |//    if (outputStream & EDebugger)
   90|       |//        OutputDebugString(t.c_str());
   91|       |//#endif
   92|       |
   93|  4.30k|    if (outputStream & EStdOut)
  ------------------
  |  Branch (93:9): [True: 0, False: 4.30k]
  ------------------
   94|      0|        fprintf(stdout, "%s", t.c_str());
   95|  4.30k|}
_ZN7glslang13TInfoSinkBase6appendERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
   98|  3.37M|{
   99|  3.37M|    if (outputStream & EString) {
  ------------------
  |  Branch (99:9): [True: 3.37M, False: 0]
  ------------------
  100|  3.37M|        checkMem(t.size());
  101|  3.37M|        sink.append(t.c_str());
  102|  3.37M|    }
  103|       |
  104|       |//#ifdef _WIN32
  105|       |//    if (outputStream & EDebugger)
  106|       |//        OutputDebugString(t.c_str());
  107|       |//#endif
  108|       |
  109|  3.37M|    if (outputStream & EStdOut)
  ------------------
  |  Branch (109:9): [True: 0, False: 3.37M]
  ------------------
  110|      0|        fprintf(stdout, "%s", t.c_str());
  111|  3.37M|}

_ZN7glslang9TBuiltIns17addTabledBuiltinsEi8EProfileRKNS_10SpvVersionE:
  509|  1.11k|{
  510|  1.11k|    const auto forEachFunction = [&](TString& decls, const span<const BuiltInFunction>& functions) {
  511|  1.11k|        for (const auto& fn : functions) {
  512|  1.11k|            if (ValidVersion(fn, version, profile, spvVersion)) {
  513|  1.11k|                AddTabledBuiltin(decls, fn);
  514|  1.11k|                if (profile != EEsProfile) {
  515|  1.11k|                    AddLongVectorBuiltin(decls, fn);
  516|  1.11k|                }
  517|  1.11k|            }
  518|  1.11k|        }
  519|  1.11k|    };
  520|       |
  521|  1.11k|    forEachFunction(commonBuiltins, BaseFunctions);
  522|  1.11k|    forEachFunction(stageBuiltins[EShLangFragment], DerivativeFunctions);
  523|       |
  524|  1.11k|    if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450))
  ------------------
  |  Branch (524:10): [True: 654, False: 459]
  |  Branch (524:35): [True: 3, False: 651]
  |  Branch (524:55): [True: 459, False: 651]
  |  Branch (524:80): [True: 444, False: 15]
  ------------------
  525|    447|        forEachFunction(stageBuiltins[EShLangCompute], DerivativeFunctions);
  526|  1.11k|}
_ZN7glslang9TBuiltIns20relateTabledBuiltinsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableE:
  530|  9.39k|{
  531|  9.39k|    RelateTabledBuiltins(BaseFunctions, symbolTable);
  532|  9.39k|    RelateTabledBuiltins(DerivativeFunctions, symbolTable);
  533|  9.39k|    RelateTabledBuiltins(CustomFunctions, symbolTable);
  534|  9.39k|}
_ZN7glslang18TBuiltInParseablesC2Ev:
  544|  2.26k|{
  545|  2.26k|}
_ZN7glslang18TBuiltInParseablesD2Ev:
  549|  2.26k|{
  550|  2.26k|}
_ZN7glslang9TBuiltInsC2Ev:
  553|  2.02k|{
  554|       |    // Set up textual representations for making all the permutations
  555|       |    // of texturing/imaging functions.
  556|  2.02k|    prefixes[EbtFloat] =  "";
  557|  2.02k|    prefixes[EbtInt]   = "i";
  558|  2.02k|    prefixes[EbtUint]  = "u";
  559|  2.02k|    prefixes[EbtFloat16] = "f16";
  560|  2.02k|    prefixes[EbtInt8]  = "i8";
  561|  2.02k|    prefixes[EbtUint8] = "u8";
  562|  2.02k|    prefixes[EbtInt16]  = "i16";
  563|  2.02k|    prefixes[EbtUint16] = "u16";
  564|  2.02k|    prefixes[EbtInt64]  = "i64";
  565|  2.02k|    prefixes[EbtUint64] = "u64";
  566|       |
  567|  2.02k|    postfixes[2] = "2";
  568|  2.02k|    postfixes[3] = "3";
  569|  2.02k|    postfixes[4] = "4";
  570|       |
  571|       |    // Map from symbolic class of texturing dimension to numeric dimensions.
  572|  2.02k|    dimMap[Esd2D] = 2;
  573|  2.02k|    dimMap[Esd3D] = 3;
  574|  2.02k|    dimMap[EsdCube] = 3;
  575|  2.02k|    dimMap[Esd1D] = 1;
  576|  2.02k|    dimMap[EsdRect] = 2;
  577|  2.02k|    dimMap[EsdBuffer] = 1;
  578|  2.02k|    dimMap[EsdSubpass] = 2;  // potentially unused for now
  579|  2.02k|    dimMap[EsdAttachmentEXT] = 2;  // potentially unused for now
  580|  2.02k|}
_ZN7glslang9TBuiltIns10initializeEi8EProfileRKNS_10SpvVersionE:
  596|  1.11k|{
  597|  1.11k|    addTabledBuiltins(version, profile, spvVersion);
  598|       |
  599|       |    //============================================================================
  600|       |    //
  601|       |    // Prototypes for built-in functions used repeatly by different shaders
  602|       |    //
  603|       |    //============================================================================
  604|       |
  605|       |    //
  606|       |    // Derivatives Functions.
  607|       |    //
  608|  1.11k|    TString derivatives (
  609|  1.11k|        "float dFdx(float p);"
  610|  1.11k|        "vec2  dFdx(vec2  p);"
  611|  1.11k|        "vec3  dFdx(vec3  p);"
  612|  1.11k|        "vec4  dFdx(vec4  p);"
  613|       |
  614|  1.11k|        "float dFdy(float p);"
  615|  1.11k|        "vec2  dFdy(vec2  p);"
  616|  1.11k|        "vec3  dFdy(vec3  p);"
  617|  1.11k|        "vec4  dFdy(vec4  p);"
  618|       |
  619|  1.11k|        "float fwidth(float p);"
  620|  1.11k|        "vec2  fwidth(vec2  p);"
  621|  1.11k|        "vec3  fwidth(vec3  p);"
  622|  1.11k|        "vec4  fwidth(vec4  p);"
  623|  1.11k|    );
  624|       |
  625|  1.11k|    TString derivativeControls (
  626|  1.11k|        "float dFdxFine(float p);"
  627|  1.11k|        "vec2  dFdxFine(vec2  p);"
  628|  1.11k|        "vec3  dFdxFine(vec3  p);"
  629|  1.11k|        "vec4  dFdxFine(vec4  p);"
  630|       |
  631|  1.11k|        "float dFdyFine(float p);"
  632|  1.11k|        "vec2  dFdyFine(vec2  p);"
  633|  1.11k|        "vec3  dFdyFine(vec3  p);"
  634|  1.11k|        "vec4  dFdyFine(vec4  p);"
  635|       |
  636|  1.11k|        "float fwidthFine(float p);"
  637|  1.11k|        "vec2  fwidthFine(vec2  p);"
  638|  1.11k|        "vec3  fwidthFine(vec3  p);"
  639|  1.11k|        "vec4  fwidthFine(vec4  p);"
  640|       |
  641|  1.11k|        "float dFdxCoarse(float p);"
  642|  1.11k|        "vec2  dFdxCoarse(vec2  p);"
  643|  1.11k|        "vec3  dFdxCoarse(vec3  p);"
  644|  1.11k|        "vec4  dFdxCoarse(vec4  p);"
  645|       |
  646|  1.11k|        "float dFdyCoarse(float p);"
  647|  1.11k|        "vec2  dFdyCoarse(vec2  p);"
  648|  1.11k|        "vec3  dFdyCoarse(vec3  p);"
  649|  1.11k|        "vec4  dFdyCoarse(vec4  p);"
  650|       |
  651|  1.11k|        "float fwidthCoarse(float p);"
  652|  1.11k|        "vec2  fwidthCoarse(vec2  p);"
  653|  1.11k|        "vec3  fwidthCoarse(vec3  p);"
  654|  1.11k|        "vec4  fwidthCoarse(vec4  p);"
  655|  1.11k|    );
  656|       |
  657|  1.11k|    TString derivativesAndControl16bits (
  658|  1.11k|        "float16_t dFdx(float16_t);"
  659|  1.11k|        "f16vec2   dFdx(f16vec2);"
  660|  1.11k|        "f16vec3   dFdx(f16vec3);"
  661|  1.11k|        "f16vec4   dFdx(f16vec4);"
  662|       |
  663|  1.11k|        "float16_t dFdy(float16_t);"
  664|  1.11k|        "f16vec2   dFdy(f16vec2);"
  665|  1.11k|        "f16vec3   dFdy(f16vec3);"
  666|  1.11k|        "f16vec4   dFdy(f16vec4);"
  667|       |
  668|  1.11k|        "float16_t dFdxFine(float16_t);"
  669|  1.11k|        "f16vec2   dFdxFine(f16vec2);"
  670|  1.11k|        "f16vec3   dFdxFine(f16vec3);"
  671|  1.11k|        "f16vec4   dFdxFine(f16vec4);"
  672|       |
  673|  1.11k|        "float16_t dFdyFine(float16_t);"
  674|  1.11k|        "f16vec2   dFdyFine(f16vec2);"
  675|  1.11k|        "f16vec3   dFdyFine(f16vec3);"
  676|  1.11k|        "f16vec4   dFdyFine(f16vec4);"
  677|       |
  678|  1.11k|        "float16_t dFdxCoarse(float16_t);"
  679|  1.11k|        "f16vec2   dFdxCoarse(f16vec2);"
  680|  1.11k|        "f16vec3   dFdxCoarse(f16vec3);"
  681|  1.11k|        "f16vec4   dFdxCoarse(f16vec4);"
  682|       |
  683|  1.11k|        "float16_t dFdyCoarse(float16_t);"
  684|  1.11k|        "f16vec2   dFdyCoarse(f16vec2);"
  685|  1.11k|        "f16vec3   dFdyCoarse(f16vec3);"
  686|  1.11k|        "f16vec4   dFdyCoarse(f16vec4);"
  687|       |
  688|  1.11k|        "float16_t fwidth(float16_t);"
  689|  1.11k|        "f16vec2   fwidth(f16vec2);"
  690|  1.11k|        "f16vec3   fwidth(f16vec3);"
  691|  1.11k|        "f16vec4   fwidth(f16vec4);"
  692|       |
  693|  1.11k|        "float16_t fwidthFine(float16_t);"
  694|  1.11k|        "f16vec2   fwidthFine(f16vec2);"
  695|  1.11k|        "f16vec3   fwidthFine(f16vec3);"
  696|  1.11k|        "f16vec4   fwidthFine(f16vec4);"
  697|       |
  698|  1.11k|        "float16_t fwidthCoarse(float16_t);"
  699|  1.11k|        "f16vec2   fwidthCoarse(f16vec2);"
  700|  1.11k|        "f16vec3   fwidthCoarse(f16vec3);"
  701|  1.11k|        "f16vec4   fwidthCoarse(f16vec4);"
  702|  1.11k|    );
  703|       |
  704|  1.11k|    TString derivativesAndControl64bits (
  705|  1.11k|        "float64_t dFdx(float64_t);"
  706|  1.11k|        "f64vec2   dFdx(f64vec2);"
  707|  1.11k|        "f64vec3   dFdx(f64vec3);"
  708|  1.11k|        "f64vec4   dFdx(f64vec4);"
  709|       |
  710|  1.11k|        "float64_t dFdy(float64_t);"
  711|  1.11k|        "f64vec2   dFdy(f64vec2);"
  712|  1.11k|        "f64vec3   dFdy(f64vec3);"
  713|  1.11k|        "f64vec4   dFdy(f64vec4);"
  714|       |
  715|  1.11k|        "float64_t dFdxFine(float64_t);"
  716|  1.11k|        "f64vec2   dFdxFine(f64vec2);"
  717|  1.11k|        "f64vec3   dFdxFine(f64vec3);"
  718|  1.11k|        "f64vec4   dFdxFine(f64vec4);"
  719|       |
  720|  1.11k|        "float64_t dFdyFine(float64_t);"
  721|  1.11k|        "f64vec2   dFdyFine(f64vec2);"
  722|  1.11k|        "f64vec3   dFdyFine(f64vec3);"
  723|  1.11k|        "f64vec4   dFdyFine(f64vec4);"
  724|       |
  725|  1.11k|        "float64_t dFdxCoarse(float64_t);"
  726|  1.11k|        "f64vec2   dFdxCoarse(f64vec2);"
  727|  1.11k|        "f64vec3   dFdxCoarse(f64vec3);"
  728|  1.11k|        "f64vec4   dFdxCoarse(f64vec4);"
  729|       |
  730|  1.11k|        "float64_t dFdyCoarse(float64_t);"
  731|  1.11k|        "f64vec2   dFdyCoarse(f64vec2);"
  732|  1.11k|        "f64vec3   dFdyCoarse(f64vec3);"
  733|  1.11k|        "f64vec4   dFdyCoarse(f64vec4);"
  734|       |
  735|  1.11k|        "float64_t fwidth(float64_t);"
  736|  1.11k|        "f64vec2   fwidth(f64vec2);"
  737|  1.11k|        "f64vec3   fwidth(f64vec3);"
  738|  1.11k|        "f64vec4   fwidth(f64vec4);"
  739|       |
  740|  1.11k|        "float64_t fwidthFine(float64_t);"
  741|  1.11k|        "f64vec2   fwidthFine(f64vec2);"
  742|  1.11k|        "f64vec3   fwidthFine(f64vec3);"
  743|  1.11k|        "f64vec4   fwidthFine(f64vec4);"
  744|       |
  745|  1.11k|        "float64_t fwidthCoarse(float64_t);"
  746|  1.11k|        "f64vec2   fwidthCoarse(f64vec2);"
  747|  1.11k|        "f64vec3   fwidthCoarse(f64vec3);"
  748|  1.11k|        "f64vec4   fwidthCoarse(f64vec4);"
  749|  1.11k|    );
  750|       |
  751|       |    //============================================================================
  752|       |    //
  753|       |    // Prototypes for built-in functions seen by both vertex and fragment shaders.
  754|       |    //
  755|       |    //============================================================================
  756|       |
  757|       |    //
  758|       |    // double functions added to desktop 4.00, but not fma, frexp, ldexp, or pack/unpack
  759|       |    //
  760|  1.11k|    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
  ------------------
  |  Branch (760:9): [True: 459, False: 654]
  |  Branch (760:34): [True: 459, False: 0]
  ------------------
  761|    459|        commonBuiltins.append(
  762|       |
  763|    459|            "double sqrt(double);"
  764|    459|            "dvec2  sqrt(dvec2);"
  765|    459|            "dvec3  sqrt(dvec3);"
  766|    459|            "dvec4  sqrt(dvec4);"
  767|       |
  768|    459|            "double inversesqrt(double);"
  769|    459|            "dvec2  inversesqrt(dvec2);"
  770|    459|            "dvec3  inversesqrt(dvec3);"
  771|    459|            "dvec4  inversesqrt(dvec4);"
  772|       |
  773|    459|            "double abs(double);"
  774|    459|            "dvec2  abs(dvec2);"
  775|    459|            "dvec3  abs(dvec3);"
  776|    459|            "dvec4  abs(dvec4);"
  777|       |
  778|    459|            "double sign(double);"
  779|    459|            "dvec2  sign(dvec2);"
  780|    459|            "dvec3  sign(dvec3);"
  781|    459|            "dvec4  sign(dvec4);"
  782|       |
  783|    459|            "double floor(double);"
  784|    459|            "dvec2  floor(dvec2);"
  785|    459|            "dvec3  floor(dvec3);"
  786|    459|            "dvec4  floor(dvec4);"
  787|       |
  788|    459|            "double trunc(double);"
  789|    459|            "dvec2  trunc(dvec2);"
  790|    459|            "dvec3  trunc(dvec3);"
  791|    459|            "dvec4  trunc(dvec4);"
  792|       |
  793|    459|            "double round(double);"
  794|    459|            "dvec2  round(dvec2);"
  795|    459|            "dvec3  round(dvec3);"
  796|    459|            "dvec4  round(dvec4);"
  797|       |
  798|    459|            "double roundEven(double);"
  799|    459|            "dvec2  roundEven(dvec2);"
  800|    459|            "dvec3  roundEven(dvec3);"
  801|    459|            "dvec4  roundEven(dvec4);"
  802|       |
  803|    459|            "double ceil(double);"
  804|    459|            "dvec2  ceil(dvec2);"
  805|    459|            "dvec3  ceil(dvec3);"
  806|    459|            "dvec4  ceil(dvec4);"
  807|       |
  808|    459|            "double fract(double);"
  809|    459|            "dvec2  fract(dvec2);"
  810|    459|            "dvec3  fract(dvec3);"
  811|    459|            "dvec4  fract(dvec4);"
  812|       |
  813|    459|            "double mod(double, double);"
  814|    459|            "dvec2  mod(dvec2 , double);"
  815|    459|            "dvec3  mod(dvec3 , double);"
  816|    459|            "dvec4  mod(dvec4 , double);"
  817|    459|            "dvec2  mod(dvec2 , dvec2);"
  818|    459|            "dvec3  mod(dvec3 , dvec3);"
  819|    459|            "dvec4  mod(dvec4 , dvec4);"
  820|       |
  821|    459|            "double modf(double, out double);"
  822|    459|            "dvec2  modf(dvec2,  out dvec2);"
  823|    459|            "dvec3  modf(dvec3,  out dvec3);"
  824|    459|            "dvec4  modf(dvec4,  out dvec4);"
  825|       |
  826|    459|            "double min(double, double);"
  827|    459|            "dvec2  min(dvec2,  double);"
  828|    459|            "dvec3  min(dvec3,  double);"
  829|    459|            "dvec4  min(dvec4,  double);"
  830|    459|            "dvec2  min(dvec2,  dvec2);"
  831|    459|            "dvec3  min(dvec3,  dvec3);"
  832|    459|            "dvec4  min(dvec4,  dvec4);"
  833|       |
  834|    459|            "double max(double, double);"
  835|    459|            "dvec2  max(dvec2 , double);"
  836|    459|            "dvec3  max(dvec3 , double);"
  837|    459|            "dvec4  max(dvec4 , double);"
  838|    459|            "dvec2  max(dvec2 , dvec2);"
  839|    459|            "dvec3  max(dvec3 , dvec3);"
  840|    459|            "dvec4  max(dvec4 , dvec4);"
  841|       |
  842|    459|            "double clamp(double, double, double);"
  843|    459|            "dvec2  clamp(dvec2 , double, double);"
  844|    459|            "dvec3  clamp(dvec3 , double, double);"
  845|    459|            "dvec4  clamp(dvec4 , double, double);"
  846|    459|            "dvec2  clamp(dvec2 , dvec2 , dvec2);"
  847|    459|            "dvec3  clamp(dvec3 , dvec3 , dvec3);"
  848|    459|            "dvec4  clamp(dvec4 , dvec4 , dvec4);"
  849|       |
  850|    459|            "double mix(double, double, double);"
  851|    459|            "dvec2  mix(dvec2,  dvec2,  double);"
  852|    459|            "dvec3  mix(dvec3,  dvec3,  double);"
  853|    459|            "dvec4  mix(dvec4,  dvec4,  double);"
  854|    459|            "dvec2  mix(dvec2,  dvec2,  dvec2);"
  855|    459|            "dvec3  mix(dvec3,  dvec3,  dvec3);"
  856|    459|            "dvec4  mix(dvec4,  dvec4,  dvec4);"
  857|    459|            "double mix(double, double, bool);"
  858|    459|            "dvec2  mix(dvec2,  dvec2,  bvec2);"
  859|    459|            "dvec3  mix(dvec3,  dvec3,  bvec3);"
  860|    459|            "dvec4  mix(dvec4,  dvec4,  bvec4);"
  861|       |
  862|    459|            "double step(double, double);"
  863|    459|            "dvec2  step(dvec2 , dvec2);"
  864|    459|            "dvec3  step(dvec3 , dvec3);"
  865|    459|            "dvec4  step(dvec4 , dvec4);"
  866|    459|            "dvec2  step(double, dvec2);"
  867|    459|            "dvec3  step(double, dvec3);"
  868|    459|            "dvec4  step(double, dvec4);"
  869|       |
  870|    459|            "double smoothstep(double, double, double);"
  871|    459|            "dvec2  smoothstep(dvec2 , dvec2 , dvec2);"
  872|    459|            "dvec3  smoothstep(dvec3 , dvec3 , dvec3);"
  873|    459|            "dvec4  smoothstep(dvec4 , dvec4 , dvec4);"
  874|    459|            "dvec2  smoothstep(double, double, dvec2);"
  875|    459|            "dvec3  smoothstep(double, double, dvec3);"
  876|    459|            "dvec4  smoothstep(double, double, dvec4);"
  877|       |
  878|    459|            "bool  isnan(double);"
  879|    459|            "bvec2 isnan(dvec2);"
  880|    459|            "bvec3 isnan(dvec3);"
  881|    459|            "bvec4 isnan(dvec4);"
  882|       |
  883|    459|            "bool  isinf(double);"
  884|    459|            "bvec2 isinf(dvec2);"
  885|    459|            "bvec3 isinf(dvec3);"
  886|    459|            "bvec4 isinf(dvec4);"
  887|       |
  888|    459|            "double length(double);"
  889|    459|            "double length(dvec2);"
  890|    459|            "double length(dvec3);"
  891|    459|            "double length(dvec4);"
  892|       |
  893|    459|            "double distance(double, double);"
  894|    459|            "double distance(dvec2 , dvec2);"
  895|    459|            "double distance(dvec3 , dvec3);"
  896|    459|            "double distance(dvec4 , dvec4);"
  897|       |
  898|    459|            "double dot(double, double);"
  899|    459|            "double dot(dvec2 , dvec2);"
  900|    459|            "double dot(dvec3 , dvec3);"
  901|    459|            "double dot(dvec4 , dvec4);"
  902|       |
  903|    459|            "dvec3 cross(dvec3, dvec3);"
  904|       |
  905|    459|            "double normalize(double);"
  906|    459|            "dvec2  normalize(dvec2);"
  907|    459|            "dvec3  normalize(dvec3);"
  908|    459|            "dvec4  normalize(dvec4);"
  909|       |
  910|    459|            "double faceforward(double, double, double);"
  911|    459|            "dvec2  faceforward(dvec2,  dvec2,  dvec2);"
  912|    459|            "dvec3  faceforward(dvec3,  dvec3,  dvec3);"
  913|    459|            "dvec4  faceforward(dvec4,  dvec4,  dvec4);"
  914|       |
  915|    459|            "double reflect(double, double);"
  916|    459|            "dvec2  reflect(dvec2 , dvec2 );"
  917|    459|            "dvec3  reflect(dvec3 , dvec3 );"
  918|    459|            "dvec4  reflect(dvec4 , dvec4 );"
  919|       |
  920|    459|            "double refract(double, double, double);"
  921|    459|            "dvec2  refract(dvec2 , dvec2 , double);"
  922|    459|            "dvec3  refract(dvec3 , dvec3 , double);"
  923|    459|            "dvec4  refract(dvec4 , dvec4 , double);"
  924|       |
  925|    459|            "dmat2 matrixCompMult(dmat2, dmat2);"
  926|    459|            "dmat3 matrixCompMult(dmat3, dmat3);"
  927|    459|            "dmat4 matrixCompMult(dmat4, dmat4);"
  928|    459|            "dmat2x3 matrixCompMult(dmat2x3, dmat2x3);"
  929|    459|            "dmat2x4 matrixCompMult(dmat2x4, dmat2x4);"
  930|    459|            "dmat3x2 matrixCompMult(dmat3x2, dmat3x2);"
  931|    459|            "dmat3x4 matrixCompMult(dmat3x4, dmat3x4);"
  932|    459|            "dmat4x2 matrixCompMult(dmat4x2, dmat4x2);"
  933|    459|            "dmat4x3 matrixCompMult(dmat4x3, dmat4x3);"
  934|       |
  935|    459|            "dmat2   outerProduct(dvec2, dvec2);"
  936|    459|            "dmat3   outerProduct(dvec3, dvec3);"
  937|    459|            "dmat4   outerProduct(dvec4, dvec4);"
  938|    459|            "dmat2x3 outerProduct(dvec3, dvec2);"
  939|    459|            "dmat3x2 outerProduct(dvec2, dvec3);"
  940|    459|            "dmat2x4 outerProduct(dvec4, dvec2);"
  941|    459|            "dmat4x2 outerProduct(dvec2, dvec4);"
  942|    459|            "dmat3x4 outerProduct(dvec4, dvec3);"
  943|    459|            "dmat4x3 outerProduct(dvec3, dvec4);"
  944|       |
  945|    459|            "dmat2   transpose(dmat2);"
  946|    459|            "dmat3   transpose(dmat3);"
  947|    459|            "dmat4   transpose(dmat4);"
  948|    459|            "dmat2x3 transpose(dmat3x2);"
  949|    459|            "dmat3x2 transpose(dmat2x3);"
  950|    459|            "dmat2x4 transpose(dmat4x2);"
  951|    459|            "dmat4x2 transpose(dmat2x4);"
  952|    459|            "dmat3x4 transpose(dmat4x3);"
  953|    459|            "dmat4x3 transpose(dmat3x4);"
  954|       |
  955|    459|            "double determinant(dmat2);"
  956|    459|            "double determinant(dmat3);"
  957|    459|            "double determinant(dmat4);"
  958|       |
  959|    459|            "dmat2 inverse(dmat2);"
  960|    459|            "dmat3 inverse(dmat3);"
  961|    459|            "dmat4 inverse(dmat4);"
  962|       |
  963|    459|            "bvec2 lessThan(dvec2, dvec2);"
  964|    459|            "bvec3 lessThan(dvec3, dvec3);"
  965|    459|            "bvec4 lessThan(dvec4, dvec4);"
  966|       |
  967|    459|            "bvec2 lessThanEqual(dvec2, dvec2);"
  968|    459|            "bvec3 lessThanEqual(dvec3, dvec3);"
  969|    459|            "bvec4 lessThanEqual(dvec4, dvec4);"
  970|       |
  971|    459|            "bvec2 greaterThan(dvec2, dvec2);"
  972|    459|            "bvec3 greaterThan(dvec3, dvec3);"
  973|    459|            "bvec4 greaterThan(dvec4, dvec4);"
  974|       |
  975|    459|            "bvec2 greaterThanEqual(dvec2, dvec2);"
  976|    459|            "bvec3 greaterThanEqual(dvec3, dvec3);"
  977|    459|            "bvec4 greaterThanEqual(dvec4, dvec4);"
  978|       |
  979|    459|            "bvec2 equal(dvec2, dvec2);"
  980|    459|            "bvec3 equal(dvec3, dvec3);"
  981|    459|            "bvec4 equal(dvec4, dvec4);"
  982|       |
  983|    459|            "bvec2 notEqual(dvec2, dvec2);"
  984|    459|            "bvec3 notEqual(dvec3, dvec3);"
  985|    459|            "bvec4 notEqual(dvec4, dvec4);"
  986|       |
  987|    459|            "\n");
  988|    459|    }
  989|       |
  990|  1.11k|    if (profile == EEsProfile && version >= 310) {  // Explicit Types
  ------------------
  |  Branch (990:9): [True: 654, False: 459]
  |  Branch (990:34): [True: 494, False: 160]
  ------------------
  991|    494|      commonBuiltins.append(
  992|       |
  993|    494|        "float64_t sqrt(float64_t);"
  994|    494|        "f64vec2  sqrt(f64vec2);"
  995|    494|        "f64vec3  sqrt(f64vec3);"
  996|    494|        "f64vec4  sqrt(f64vec4);"
  997|       |
  998|    494|        "float64_t inversesqrt(float64_t);"
  999|    494|        "f64vec2  inversesqrt(f64vec2);"
 1000|    494|        "f64vec3  inversesqrt(f64vec3);"
 1001|    494|        "f64vec4  inversesqrt(f64vec4);"
 1002|       |
 1003|    494|        "float64_t abs(float64_t);"
 1004|    494|        "f64vec2  abs(f64vec2);"
 1005|    494|        "f64vec3  abs(f64vec3);"
 1006|    494|        "f64vec4  abs(f64vec4);"
 1007|       |
 1008|    494|        "float64_t sign(float64_t);"
 1009|    494|        "f64vec2  sign(f64vec2);"
 1010|    494|        "f64vec3  sign(f64vec3);"
 1011|    494|        "f64vec4  sign(f64vec4);"
 1012|       |
 1013|    494|        "float64_t floor(float64_t);"
 1014|    494|        "f64vec2  floor(f64vec2);"
 1015|    494|        "f64vec3  floor(f64vec3);"
 1016|    494|        "f64vec4  floor(f64vec4);"
 1017|       |
 1018|    494|        "float64_t trunc(float64_t);"
 1019|    494|        "f64vec2  trunc(f64vec2);"
 1020|    494|        "f64vec3  trunc(f64vec3);"
 1021|    494|        "f64vec4  trunc(f64vec4);"
 1022|       |
 1023|    494|        "float64_t round(float64_t);"
 1024|    494|        "f64vec2  round(f64vec2);"
 1025|    494|        "f64vec3  round(f64vec3);"
 1026|    494|        "f64vec4  round(f64vec4);"
 1027|       |
 1028|    494|        "float64_t roundEven(float64_t);"
 1029|    494|        "f64vec2  roundEven(f64vec2);"
 1030|    494|        "f64vec3  roundEven(f64vec3);"
 1031|    494|        "f64vec4  roundEven(f64vec4);"
 1032|       |
 1033|    494|        "float64_t ceil(float64_t);"
 1034|    494|        "f64vec2  ceil(f64vec2);"
 1035|    494|        "f64vec3  ceil(f64vec3);"
 1036|    494|        "f64vec4  ceil(f64vec4);"
 1037|       |
 1038|    494|        "float64_t fract(float64_t);"
 1039|    494|        "f64vec2  fract(f64vec2);"
 1040|    494|        "f64vec3  fract(f64vec3);"
 1041|    494|        "f64vec4  fract(f64vec4);"
 1042|       |
 1043|    494|        "float64_t mod(float64_t, float64_t);"
 1044|    494|        "f64vec2  mod(f64vec2 , float64_t);"
 1045|    494|        "f64vec3  mod(f64vec3 , float64_t);"
 1046|    494|        "f64vec4  mod(f64vec4 , float64_t);"
 1047|    494|        "f64vec2  mod(f64vec2 , f64vec2);"
 1048|    494|        "f64vec3  mod(f64vec3 , f64vec3);"
 1049|    494|        "f64vec4  mod(f64vec4 , f64vec4);"
 1050|       |
 1051|    494|        "float64_t modf(float64_t, out float64_t);"
 1052|    494|        "f64vec2  modf(f64vec2,  out f64vec2);"
 1053|    494|        "f64vec3  modf(f64vec3,  out f64vec3);"
 1054|    494|        "f64vec4  modf(f64vec4,  out f64vec4);"
 1055|       |
 1056|    494|        "float64_t min(float64_t, float64_t);"
 1057|    494|        "f64vec2  min(f64vec2,  float64_t);"
 1058|    494|        "f64vec3  min(f64vec3,  float64_t);"
 1059|    494|        "f64vec4  min(f64vec4,  float64_t);"
 1060|    494|        "f64vec2  min(f64vec2,  f64vec2);"
 1061|    494|        "f64vec3  min(f64vec3,  f64vec3);"
 1062|    494|        "f64vec4  min(f64vec4,  f64vec4);"
 1063|       |
 1064|    494|        "float64_t max(float64_t, float64_t);"
 1065|    494|        "f64vec2  max(f64vec2 , float64_t);"
 1066|    494|        "f64vec3  max(f64vec3 , float64_t);"
 1067|    494|        "f64vec4  max(f64vec4 , float64_t);"
 1068|    494|        "f64vec2  max(f64vec2 , f64vec2);"
 1069|    494|        "f64vec3  max(f64vec3 , f64vec3);"
 1070|    494|        "f64vec4  max(f64vec4 , f64vec4);"
 1071|       |
 1072|    494|        "float64_t clamp(float64_t, float64_t, float64_t);"
 1073|    494|        "f64vec2  clamp(f64vec2 , float64_t, float64_t);"
 1074|    494|        "f64vec3  clamp(f64vec3 , float64_t, float64_t);"
 1075|    494|        "f64vec4  clamp(f64vec4 , float64_t, float64_t);"
 1076|    494|        "f64vec2  clamp(f64vec2 , f64vec2 , f64vec2);"
 1077|    494|        "f64vec3  clamp(f64vec3 , f64vec3 , f64vec3);"
 1078|    494|        "f64vec4  clamp(f64vec4 , f64vec4 , f64vec4);"
 1079|       |
 1080|    494|        "float64_t mix(float64_t, float64_t, float64_t);"
 1081|    494|        "f64vec2  mix(f64vec2,  f64vec2,  float64_t);"
 1082|    494|        "f64vec3  mix(f64vec3,  f64vec3,  float64_t);"
 1083|    494|        "f64vec4  mix(f64vec4,  f64vec4,  float64_t);"
 1084|    494|        "f64vec2  mix(f64vec2,  f64vec2,  f64vec2);"
 1085|    494|        "f64vec3  mix(f64vec3,  f64vec3,  f64vec3);"
 1086|    494|        "f64vec4  mix(f64vec4,  f64vec4,  f64vec4);"
 1087|    494|        "float64_t mix(float64_t, float64_t, bool);"
 1088|    494|        "f64vec2  mix(f64vec2,  f64vec2,  bvec2);"
 1089|    494|        "f64vec3  mix(f64vec3,  f64vec3,  bvec3);"
 1090|    494|        "f64vec4  mix(f64vec4,  f64vec4,  bvec4);"
 1091|       |
 1092|    494|        "float64_t step(float64_t, float64_t);"
 1093|    494|        "f64vec2  step(f64vec2 , f64vec2);"
 1094|    494|        "f64vec3  step(f64vec3 , f64vec3);"
 1095|    494|        "f64vec4  step(f64vec4 , f64vec4);"
 1096|    494|        "f64vec2  step(float64_t, f64vec2);"
 1097|    494|        "f64vec3  step(float64_t, f64vec3);"
 1098|    494|        "f64vec4  step(float64_t, f64vec4);"
 1099|       |
 1100|    494|        "float64_t smoothstep(float64_t, float64_t, float64_t);"
 1101|    494|        "f64vec2  smoothstep(f64vec2 , f64vec2 , f64vec2);"
 1102|    494|        "f64vec3  smoothstep(f64vec3 , f64vec3 , f64vec3);"
 1103|    494|        "f64vec4  smoothstep(f64vec4 , f64vec4 , f64vec4);"
 1104|    494|        "f64vec2  smoothstep(float64_t, float64_t, f64vec2);"
 1105|    494|        "f64vec3  smoothstep(float64_t, float64_t, f64vec3);"
 1106|    494|        "f64vec4  smoothstep(float64_t, float64_t, f64vec4);"
 1107|       |
 1108|    494|        "float64_t length(float64_t);"
 1109|    494|        "float64_t length(f64vec2);"
 1110|    494|        "float64_t length(f64vec3);"
 1111|    494|        "float64_t length(f64vec4);"
 1112|       |
 1113|    494|        "float64_t distance(float64_t, float64_t);"
 1114|    494|        "float64_t distance(f64vec2 , f64vec2);"
 1115|    494|        "float64_t distance(f64vec3 , f64vec3);"
 1116|    494|        "float64_t distance(f64vec4 , f64vec4);"
 1117|       |
 1118|    494|        "float64_t dot(float64_t, float64_t);"
 1119|    494|        "float64_t dot(f64vec2 , f64vec2);"
 1120|    494|        "float64_t dot(f64vec3 , f64vec3);"
 1121|    494|        "float64_t dot(f64vec4 , f64vec4);"
 1122|       |
 1123|    494|        "f64vec3 cross(f64vec3, f64vec3);"
 1124|       |
 1125|    494|        "float64_t normalize(float64_t);"
 1126|    494|        "f64vec2  normalize(f64vec2);"
 1127|    494|        "f64vec3  normalize(f64vec3);"
 1128|    494|        "f64vec4  normalize(f64vec4);"
 1129|       |
 1130|    494|        "float64_t faceforward(float64_t, float64_t, float64_t);"
 1131|    494|        "f64vec2  faceforward(f64vec2,  f64vec2,  f64vec2);"
 1132|    494|        "f64vec3  faceforward(f64vec3,  f64vec3,  f64vec3);"
 1133|    494|        "f64vec4  faceforward(f64vec4,  f64vec4,  f64vec4);"
 1134|       |
 1135|    494|        "float64_t reflect(float64_t, float64_t);"
 1136|    494|        "f64vec2  reflect(f64vec2 , f64vec2 );"
 1137|    494|        "f64vec3  reflect(f64vec3 , f64vec3 );"
 1138|    494|        "f64vec4  reflect(f64vec4 , f64vec4 );"
 1139|       |
 1140|    494|        "float64_t refract(float64_t, float64_t, float64_t);"
 1141|    494|        "f64vec2  refract(f64vec2 , f64vec2 , float64_t);"
 1142|    494|        "f64vec3  refract(f64vec3 , f64vec3 , float64_t);"
 1143|    494|        "f64vec4  refract(f64vec4 , f64vec4 , float64_t);"
 1144|       |
 1145|    494|        "f64mat2 matrixCompMult(f64mat2, f64mat2);"
 1146|    494|        "f64mat3 matrixCompMult(f64mat3, f64mat3);"
 1147|    494|        "f64mat4 matrixCompMult(f64mat4, f64mat4);"
 1148|    494|        "f64mat2x3 matrixCompMult(f64mat2x3, f64mat2x3);"
 1149|    494|        "f64mat2x4 matrixCompMult(f64mat2x4, f64mat2x4);"
 1150|    494|        "f64mat3x2 matrixCompMult(f64mat3x2, f64mat3x2);"
 1151|    494|        "f64mat3x4 matrixCompMult(f64mat3x4, f64mat3x4);"
 1152|    494|        "f64mat4x2 matrixCompMult(f64mat4x2, f64mat4x2);"
 1153|    494|        "f64mat4x3 matrixCompMult(f64mat4x3, f64mat4x3);"
 1154|       |
 1155|    494|        "f64mat2   outerProduct(f64vec2, f64vec2);"
 1156|    494|        "f64mat3   outerProduct(f64vec3, f64vec3);"
 1157|    494|        "f64mat4   outerProduct(f64vec4, f64vec4);"
 1158|    494|        "f64mat2x3 outerProduct(f64vec3, f64vec2);"
 1159|    494|        "f64mat3x2 outerProduct(f64vec2, f64vec3);"
 1160|    494|        "f64mat2x4 outerProduct(f64vec4, f64vec2);"
 1161|    494|        "f64mat4x2 outerProduct(f64vec2, f64vec4);"
 1162|    494|        "f64mat3x4 outerProduct(f64vec4, f64vec3);"
 1163|    494|        "f64mat4x3 outerProduct(f64vec3, f64vec4);"
 1164|       |
 1165|    494|        "f64mat2   transpose(f64mat2);"
 1166|    494|        "f64mat3   transpose(f64mat3);"
 1167|    494|        "f64mat4   transpose(f64mat4);"
 1168|    494|        "f64mat2x3 transpose(f64mat3x2);"
 1169|    494|        "f64mat3x2 transpose(f64mat2x3);"
 1170|    494|        "f64mat2x4 transpose(f64mat4x2);"
 1171|    494|        "f64mat4x2 transpose(f64mat2x4);"
 1172|    494|        "f64mat3x4 transpose(f64mat4x3);"
 1173|    494|        "f64mat4x3 transpose(f64mat3x4);"
 1174|       |
 1175|    494|        "float64_t determinant(f64mat2);"
 1176|    494|        "float64_t determinant(f64mat3);"
 1177|    494|        "float64_t determinant(f64mat4);"
 1178|       |
 1179|    494|        "f64mat2 inverse(f64mat2);"
 1180|    494|        "f64mat3 inverse(f64mat3);"
 1181|    494|        "f64mat4 inverse(f64mat4);"
 1182|       |
 1183|    494|        "\n");
 1184|    494|    }
 1185|       |
 1186|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (1186:10): [True: 459, False: 654]
  |  Branch (1186:35): [True: 444, False: 15]
  |  Branch (1186:55): [True: 654, False: 15]
  |  Branch (1186:80): [True: 494, False: 160]
  ------------------
 1187|    938|        commonBuiltins.append(
 1188|       |
 1189|    938|            "int64_t abs(int64_t);"
 1190|    938|            "i64vec2 abs(i64vec2);"
 1191|    938|            "i64vec3 abs(i64vec3);"
 1192|    938|            "i64vec4 abs(i64vec4);"
 1193|       |
 1194|    938|            "int64_t sign(int64_t);"
 1195|    938|            "i64vec2 sign(i64vec2);"
 1196|    938|            "i64vec3 sign(i64vec3);"
 1197|    938|            "i64vec4 sign(i64vec4);"
 1198|       |
 1199|    938|            "int64_t  min(int64_t,  int64_t);"
 1200|    938|            "i64vec2  min(i64vec2,  int64_t);"
 1201|    938|            "i64vec3  min(i64vec3,  int64_t);"
 1202|    938|            "i64vec4  min(i64vec4,  int64_t);"
 1203|    938|            "i64vec2  min(i64vec2,  i64vec2);"
 1204|    938|            "i64vec3  min(i64vec3,  i64vec3);"
 1205|    938|            "i64vec4  min(i64vec4,  i64vec4);"
 1206|    938|            "uint64_t min(uint64_t, uint64_t);"
 1207|    938|            "u64vec2  min(u64vec2,  uint64_t);"
 1208|    938|            "u64vec3  min(u64vec3,  uint64_t);"
 1209|    938|            "u64vec4  min(u64vec4,  uint64_t);"
 1210|    938|            "u64vec2  min(u64vec2,  u64vec2);"
 1211|    938|            "u64vec3  min(u64vec3,  u64vec3);"
 1212|    938|            "u64vec4  min(u64vec4,  u64vec4);"
 1213|       |
 1214|    938|            "int64_t  max(int64_t,  int64_t);"
 1215|    938|            "i64vec2  max(i64vec2,  int64_t);"
 1216|    938|            "i64vec3  max(i64vec3,  int64_t);"
 1217|    938|            "i64vec4  max(i64vec4,  int64_t);"
 1218|    938|            "i64vec2  max(i64vec2,  i64vec2);"
 1219|    938|            "i64vec3  max(i64vec3,  i64vec3);"
 1220|    938|            "i64vec4  max(i64vec4,  i64vec4);"
 1221|    938|            "uint64_t max(uint64_t, uint64_t);"
 1222|    938|            "u64vec2  max(u64vec2,  uint64_t);"
 1223|    938|            "u64vec3  max(u64vec3,  uint64_t);"
 1224|    938|            "u64vec4  max(u64vec4,  uint64_t);"
 1225|    938|            "u64vec2  max(u64vec2,  u64vec2);"
 1226|    938|            "u64vec3  max(u64vec3,  u64vec3);"
 1227|    938|            "u64vec4  max(u64vec4,  u64vec4);"
 1228|       |
 1229|    938|            "int64_t  clamp(int64_t,  int64_t,  int64_t);"
 1230|    938|            "i64vec2  clamp(i64vec2,  int64_t,  int64_t);"
 1231|    938|            "i64vec3  clamp(i64vec3,  int64_t,  int64_t);"
 1232|    938|            "i64vec4  clamp(i64vec4,  int64_t,  int64_t);"
 1233|    938|            "i64vec2  clamp(i64vec2,  i64vec2,  i64vec2);"
 1234|    938|            "i64vec3  clamp(i64vec3,  i64vec3,  i64vec3);"
 1235|    938|            "i64vec4  clamp(i64vec4,  i64vec4,  i64vec4);"
 1236|    938|            "uint64_t clamp(uint64_t, uint64_t, uint64_t);"
 1237|    938|            "u64vec2  clamp(u64vec2,  uint64_t, uint64_t);"
 1238|    938|            "u64vec3  clamp(u64vec3,  uint64_t, uint64_t);"
 1239|    938|            "u64vec4  clamp(u64vec4,  uint64_t, uint64_t);"
 1240|    938|            "u64vec2  clamp(u64vec2,  u64vec2,  u64vec2);"
 1241|    938|            "u64vec3  clamp(u64vec3,  u64vec3,  u64vec3);"
 1242|    938|            "u64vec4  clamp(u64vec4,  u64vec4,  u64vec4);"
 1243|       |
 1244|    938|            "int64_t  mix(int64_t,  int64_t,  bool);"
 1245|    938|            "i64vec2  mix(i64vec2,  i64vec2,  bvec2);"
 1246|    938|            "i64vec3  mix(i64vec3,  i64vec3,  bvec3);"
 1247|    938|            "i64vec4  mix(i64vec4,  i64vec4,  bvec4);"
 1248|    938|            "uint64_t mix(uint64_t, uint64_t, bool);"
 1249|    938|            "u64vec2  mix(u64vec2,  u64vec2,  bvec2);"
 1250|    938|            "u64vec3  mix(u64vec3,  u64vec3,  bvec3);"
 1251|    938|            "u64vec4  mix(u64vec4,  u64vec4,  bvec4);"
 1252|       |
 1253|    938|            "int64_t doubleBitsToInt64(float64_t);"
 1254|    938|            "i64vec2 doubleBitsToInt64(f64vec2);"
 1255|    938|            "i64vec3 doubleBitsToInt64(f64vec3);"
 1256|    938|            "i64vec4 doubleBitsToInt64(f64vec4);"
 1257|       |
 1258|    938|            "uint64_t doubleBitsToUint64(float64_t);"
 1259|    938|            "u64vec2  doubleBitsToUint64(f64vec2);"
 1260|    938|            "u64vec3  doubleBitsToUint64(f64vec3);"
 1261|    938|            "u64vec4  doubleBitsToUint64(f64vec4);"
 1262|       |
 1263|    938|            "float64_t int64BitsToDouble(int64_t);"
 1264|    938|            "f64vec2  int64BitsToDouble(i64vec2);"
 1265|    938|            "f64vec3  int64BitsToDouble(i64vec3);"
 1266|    938|            "f64vec4  int64BitsToDouble(i64vec4);"
 1267|       |
 1268|    938|            "float64_t uint64BitsToDouble(uint64_t);"
 1269|    938|            "f64vec2  uint64BitsToDouble(u64vec2);"
 1270|    938|            "f64vec3  uint64BitsToDouble(u64vec3);"
 1271|    938|            "f64vec4  uint64BitsToDouble(u64vec4);"
 1272|       |
 1273|    938|            "int64_t  packInt2x32(ivec2);"
 1274|    938|            "uint64_t packUint2x32(uvec2);"
 1275|    938|            "ivec2    unpackInt2x32(int64_t);"
 1276|    938|            "uvec2    unpackUint2x32(uint64_t);"
 1277|       |
 1278|    938|            "bvec2 lessThan(i64vec2, i64vec2);"
 1279|    938|            "bvec3 lessThan(i64vec3, i64vec3);"
 1280|    938|            "bvec4 lessThan(i64vec4, i64vec4);"
 1281|    938|            "bvec2 lessThan(u64vec2, u64vec2);"
 1282|    938|            "bvec3 lessThan(u64vec3, u64vec3);"
 1283|    938|            "bvec4 lessThan(u64vec4, u64vec4);"
 1284|       |
 1285|    938|            "bvec2 lessThanEqual(i64vec2, i64vec2);"
 1286|    938|            "bvec3 lessThanEqual(i64vec3, i64vec3);"
 1287|    938|            "bvec4 lessThanEqual(i64vec4, i64vec4);"
 1288|    938|            "bvec2 lessThanEqual(u64vec2, u64vec2);"
 1289|    938|            "bvec3 lessThanEqual(u64vec3, u64vec3);"
 1290|    938|            "bvec4 lessThanEqual(u64vec4, u64vec4);"
 1291|       |
 1292|    938|            "bvec2 greaterThan(i64vec2, i64vec2);"
 1293|    938|            "bvec3 greaterThan(i64vec3, i64vec3);"
 1294|    938|            "bvec4 greaterThan(i64vec4, i64vec4);"
 1295|    938|            "bvec2 greaterThan(u64vec2, u64vec2);"
 1296|    938|            "bvec3 greaterThan(u64vec3, u64vec3);"
 1297|    938|            "bvec4 greaterThan(u64vec4, u64vec4);"
 1298|       |
 1299|    938|            "bvec2 greaterThanEqual(i64vec2, i64vec2);"
 1300|    938|            "bvec3 greaterThanEqual(i64vec3, i64vec3);"
 1301|    938|            "bvec4 greaterThanEqual(i64vec4, i64vec4);"
 1302|    938|            "bvec2 greaterThanEqual(u64vec2, u64vec2);"
 1303|    938|            "bvec3 greaterThanEqual(u64vec3, u64vec3);"
 1304|    938|            "bvec4 greaterThanEqual(u64vec4, u64vec4);"
 1305|       |
 1306|    938|            "bvec2 equal(i64vec2, i64vec2);"
 1307|    938|            "bvec3 equal(i64vec3, i64vec3);"
 1308|    938|            "bvec4 equal(i64vec4, i64vec4);"
 1309|    938|            "bvec2 equal(u64vec2, u64vec2);"
 1310|    938|            "bvec3 equal(u64vec3, u64vec3);"
 1311|    938|            "bvec4 equal(u64vec4, u64vec4);"
 1312|       |
 1313|    938|            "bvec2 notEqual(i64vec2, i64vec2);"
 1314|    938|            "bvec3 notEqual(i64vec3, i64vec3);"
 1315|    938|            "bvec4 notEqual(i64vec4, i64vec4);"
 1316|    938|            "bvec2 notEqual(u64vec2, u64vec2);"
 1317|    938|            "bvec3 notEqual(u64vec3, u64vec3);"
 1318|    938|            "bvec4 notEqual(u64vec4, u64vec4);"
 1319|       |
 1320|    938|            "int64_t bitCount(int64_t);"
 1321|    938|            "i64vec2 bitCount(i64vec2);"
 1322|    938|            "i64vec3 bitCount(i64vec3);"
 1323|    938|            "i64vec4 bitCount(i64vec4);"
 1324|       |
 1325|    938|            "int64_t bitCount(uint64_t);"
 1326|    938|            "i64vec2 bitCount(u64vec2);"
 1327|    938|            "i64vec3 bitCount(u64vec3);"
 1328|    938|            "i64vec4 bitCount(u64vec4);"
 1329|       |
 1330|    938|            "int64_t findLSB(int64_t);"
 1331|    938|            "i64vec2 findLSB(i64vec2);"
 1332|    938|            "i64vec3 findLSB(i64vec3);"
 1333|    938|            "i64vec4 findLSB(i64vec4);"
 1334|       |
 1335|    938|            "int64_t findLSB(uint64_t);"
 1336|    938|            "i64vec2 findLSB(u64vec2);"
 1337|    938|            "i64vec3 findLSB(u64vec3);"
 1338|    938|            "i64vec4 findLSB(u64vec4);"
 1339|       |
 1340|    938|            "int64_t findMSB(int64_t);"
 1341|    938|            "i64vec2 findMSB(i64vec2);"
 1342|    938|            "i64vec3 findMSB(i64vec3);"
 1343|    938|            "i64vec4 findMSB(i64vec4);"
 1344|       |
 1345|    938|            "int64_t findMSB(uint64_t);"
 1346|    938|            "i64vec2 findMSB(u64vec2);"
 1347|    938|            "i64vec3 findMSB(u64vec3);"
 1348|    938|            "i64vec4 findMSB(u64vec4);"
 1349|       |
 1350|    938|            "\n"
 1351|    938|        );
 1352|    938|    }
 1353|       |
 1354|       |    // GL_AMD_shader_trinary_minmax
 1355|  1.11k|    if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (1355:9): [True: 459, False: 654]
  |  Branch (1355:34): [True: 447, False: 12]
  ------------------
 1356|    447|        commonBuiltins.append(
 1357|    447|            "float min3(float, float, float);"
 1358|    447|            "vec2  min3(vec2,  vec2,  vec2);"
 1359|    447|            "vec3  min3(vec3,  vec3,  vec3);"
 1360|    447|            "vec4  min3(vec4,  vec4,  vec4);"
 1361|       |
 1362|    447|            "int   min3(int,   int,   int);"
 1363|    447|            "ivec2 min3(ivec2, ivec2, ivec2);"
 1364|    447|            "ivec3 min3(ivec3, ivec3, ivec3);"
 1365|    447|            "ivec4 min3(ivec4, ivec4, ivec4);"
 1366|       |
 1367|    447|            "uint  min3(uint,  uint,  uint);"
 1368|    447|            "uvec2 min3(uvec2, uvec2, uvec2);"
 1369|    447|            "uvec3 min3(uvec3, uvec3, uvec3);"
 1370|    447|            "uvec4 min3(uvec4, uvec4, uvec4);"
 1371|       |
 1372|    447|            "float max3(float, float, float);"
 1373|    447|            "vec2  max3(vec2,  vec2,  vec2);"
 1374|    447|            "vec3  max3(vec3,  vec3,  vec3);"
 1375|    447|            "vec4  max3(vec4,  vec4,  vec4);"
 1376|       |
 1377|    447|            "int   max3(int,   int,   int);"
 1378|    447|            "ivec2 max3(ivec2, ivec2, ivec2);"
 1379|    447|            "ivec3 max3(ivec3, ivec3, ivec3);"
 1380|    447|            "ivec4 max3(ivec4, ivec4, ivec4);"
 1381|       |
 1382|    447|            "uint  max3(uint,  uint,  uint);"
 1383|    447|            "uvec2 max3(uvec2, uvec2, uvec2);"
 1384|    447|            "uvec3 max3(uvec3, uvec3, uvec3);"
 1385|    447|            "uvec4 max3(uvec4, uvec4, uvec4);"
 1386|       |
 1387|    447|            "float mid3(float, float, float);"
 1388|    447|            "vec2  mid3(vec2,  vec2,  vec2);"
 1389|    447|            "vec3  mid3(vec3,  vec3,  vec3);"
 1390|    447|            "vec4  mid3(vec4,  vec4,  vec4);"
 1391|       |
 1392|    447|            "int   mid3(int,   int,   int);"
 1393|    447|            "ivec2 mid3(ivec2, ivec2, ivec2);"
 1394|    447|            "ivec3 mid3(ivec3, ivec3, ivec3);"
 1395|    447|            "ivec4 mid3(ivec4, ivec4, ivec4);"
 1396|       |
 1397|    447|            "uint  mid3(uint,  uint,  uint);"
 1398|    447|            "uvec2 mid3(uvec2, uvec2, uvec2);"
 1399|    447|            "uvec3 mid3(uvec3, uvec3, uvec3);"
 1400|    447|            "uvec4 mid3(uvec4, uvec4, uvec4);"
 1401|       |
 1402|    447|            "float16_t min3(float16_t, float16_t, float16_t);"
 1403|    447|            "f16vec2   min3(f16vec2,   f16vec2,   f16vec2);"
 1404|    447|            "f16vec3   min3(f16vec3,   f16vec3,   f16vec3);"
 1405|    447|            "f16vec4   min3(f16vec4,   f16vec4,   f16vec4);"
 1406|       |
 1407|    447|            "float16_t max3(float16_t, float16_t, float16_t);"
 1408|    447|            "f16vec2   max3(f16vec2,   f16vec2,   f16vec2);"
 1409|    447|            "f16vec3   max3(f16vec3,   f16vec3,   f16vec3);"
 1410|    447|            "f16vec4   max3(f16vec4,   f16vec4,   f16vec4);"
 1411|       |
 1412|    447|            "float16_t mid3(float16_t, float16_t, float16_t);"
 1413|    447|            "f16vec2   mid3(f16vec2,   f16vec2,   f16vec2);"
 1414|    447|            "f16vec3   mid3(f16vec3,   f16vec3,   f16vec3);"
 1415|    447|            "f16vec4   mid3(f16vec4,   f16vec4,   f16vec4);"
 1416|       |
 1417|    447|            "int16_t   min3(int16_t,   int16_t,   int16_t);"
 1418|    447|            "i16vec2   min3(i16vec2,   i16vec2,   i16vec2);"
 1419|    447|            "i16vec3   min3(i16vec3,   i16vec3,   i16vec3);"
 1420|    447|            "i16vec4   min3(i16vec4,   i16vec4,   i16vec4);"
 1421|       |
 1422|    447|            "int16_t   max3(int16_t,   int16_t,   int16_t);"
 1423|    447|            "i16vec2   max3(i16vec2,   i16vec2,   i16vec2);"
 1424|    447|            "i16vec3   max3(i16vec3,   i16vec3,   i16vec3);"
 1425|    447|            "i16vec4   max3(i16vec4,   i16vec4,   i16vec4);"
 1426|       |
 1427|    447|            "int16_t   mid3(int16_t,   int16_t,   int16_t);"
 1428|    447|            "i16vec2   mid3(i16vec2,   i16vec2,   i16vec2);"
 1429|    447|            "i16vec3   mid3(i16vec3,   i16vec3,   i16vec3);"
 1430|    447|            "i16vec4   mid3(i16vec4,   i16vec4,   i16vec4);"
 1431|       |
 1432|    447|            "uint16_t  min3(uint16_t,  uint16_t,  uint16_t);"
 1433|    447|            "u16vec2   min3(u16vec2,   u16vec2,   u16vec2);"
 1434|    447|            "u16vec3   min3(u16vec3,   u16vec3,   u16vec3);"
 1435|    447|            "u16vec4   min3(u16vec4,   u16vec4,   u16vec4);"
 1436|       |
 1437|    447|            "uint16_t  max3(uint16_t,  uint16_t,  uint16_t);"
 1438|    447|            "u16vec2   max3(u16vec2,   u16vec2,   u16vec2);"
 1439|    447|            "u16vec3   max3(u16vec3,   u16vec3,   u16vec3);"
 1440|    447|            "u16vec4   max3(u16vec4,   u16vec4,   u16vec4);"
 1441|       |
 1442|    447|            "uint16_t  mid3(uint16_t,  uint16_t,  uint16_t);"
 1443|    447|            "u16vec2   mid3(u16vec2,   u16vec2,   u16vec2);"
 1444|    447|            "u16vec3   mid3(u16vec3,   u16vec3,   u16vec3);"
 1445|    447|            "u16vec4   mid3(u16vec4,   u16vec4,   u16vec4);"
 1446|       |
 1447|    447|            "\n"
 1448|    447|        );
 1449|    447|    }
 1450|       |
 1451|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1451:10): [True: 654, False: 459]
  |  Branch (1451:35): [True: 494, False: 160]
  ------------------
 1452|    941|        (profile != EEsProfile && version >= 430)) {
  ------------------
  |  Branch (1452:10): [True: 459, False: 160]
  |  Branch (1452:35): [True: 447, False: 12]
  ------------------
 1453|    941|        commonBuiltins.append(
 1454|    941|            "uint atomicAdd(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1455|    941|            " int atomicAdd(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1456|       |
 1457|    941|            "uint atomicMin(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1458|    941|            " int atomicMin(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1459|       |
 1460|    941|            "uint atomicMax(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1461|    941|            " int atomicMax(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1462|       |
 1463|    941|            "uint atomicAnd(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1464|    941|            " int atomicAnd(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1465|       |
 1466|    941|            "uint atomicOr (coherent volatile nontemporal inout uint, uint, int, int, int);"
 1467|    941|            " int atomicOr (coherent volatile nontemporal inout  int,  int, int, int, int);"
 1468|       |
 1469|    941|            "uint atomicXor(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1470|    941|            " int atomicXor(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1471|       |
 1472|    941|            "uint atomicExchange(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1473|    941|            " int atomicExchange(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1474|       |
 1475|    941|            "uint atomicCompSwap(coherent volatile nontemporal inout uint, uint, uint, int, int, int, int, int);"
 1476|    941|            " int atomicCompSwap(coherent volatile nontemporal inout  int,  int,  int, int, int, int, int, int);"
 1477|       |
 1478|    941|            "uint atomicLoad(coherent volatile nontemporal in uint, int, int, int);"
 1479|    941|            " int atomicLoad(coherent volatile nontemporal in  int, int, int, int);"
 1480|       |
 1481|    941|            "void atomicStore(coherent volatile nontemporal out uint, uint, int, int, int);"
 1482|    941|            "void atomicStore(coherent volatile nontemporal out  int,  int, int, int, int);"
 1483|       |
 1484|    941|            "\n");
 1485|    941|    }
 1486|       |
 1487|  1.11k|    if (profile != EEsProfile && version >= 440) {
  ------------------
  |  Branch (1487:9): [True: 459, False: 654]
  |  Branch (1487:34): [True: 446, False: 13]
  ------------------
 1488|    446|        commonBuiltins.append(
 1489|    446|            "uint64_t atomicMin(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1490|    446|            " int64_t atomicMin(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1491|    446|            "uint64_t atomicMin(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1492|    446|            " int64_t atomicMin(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1493|    446|            "float16_t atomicMin(coherent volatile nontemporal inout float16_t, float16_t);"
 1494|    446|            "float16_t atomicMin(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1495|    446|            "   float atomicMin(coherent volatile nontemporal inout float, float);"
 1496|    446|            "   float atomicMin(coherent volatile nontemporal inout float, float, int, int, int);"
 1497|    446|            "  double atomicMin(coherent volatile nontemporal inout double, double);"
 1498|    446|            "  double atomicMin(coherent volatile nontemporal inout double, double, int, int, int);"
 1499|       |
 1500|    446|            "uint64_t atomicMax(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1501|    446|            " int64_t atomicMax(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1502|    446|            "uint64_t atomicMax(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1503|    446|            " int64_t atomicMax(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1504|    446|            "float16_t atomicMax(coherent volatile nontemporal inout float16_t, float16_t);"
 1505|    446|            "float16_t atomicMax(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1506|    446|            "   float atomicMax(coherent volatile nontemporal inout float, float);"
 1507|    446|            "   float atomicMax(coherent volatile nontemporal inout float, float, int, int, int);"
 1508|    446|            "  double atomicMax(coherent volatile nontemporal inout double, double);"
 1509|    446|            "  double atomicMax(coherent volatile nontemporal inout double, double, int, int, int);"
 1510|       |
 1511|    446|            "uint64_t atomicAnd(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1512|    446|            " int64_t atomicAnd(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1513|    446|            "uint64_t atomicAnd(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1514|    446|            " int64_t atomicAnd(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1515|       |
 1516|    446|            "uint64_t atomicOr (coherent volatile nontemporal inout uint64_t, uint64_t);"
 1517|    446|            " int64_t atomicOr (coherent volatile nontemporal inout  int64_t,  int64_t);"
 1518|    446|            "uint64_t atomicOr (coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1519|    446|            " int64_t atomicOr (coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1520|       |
 1521|    446|            "uint64_t atomicXor(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1522|    446|            " int64_t atomicXor(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1523|    446|            "uint64_t atomicXor(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1524|    446|            " int64_t atomicXor(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1525|       |
 1526|    446|            "uint64_t atomicAdd(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1527|    446|            " int64_t atomicAdd(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1528|    446|            "uint64_t atomicAdd(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1529|    446|            " int64_t atomicAdd(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1530|    446|            "float16_t atomicAdd(coherent volatile nontemporal inout float16_t, float16_t);"
 1531|    446|            "float16_t atomicAdd(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1532|    446|            "   float atomicAdd(coherent volatile nontemporal inout float, float);"
 1533|    446|            "   float atomicAdd(coherent volatile nontemporal inout float, float, int, int, int);"
 1534|    446|            "  double atomicAdd(coherent volatile nontemporal inout double, double);"
 1535|    446|            "  double atomicAdd(coherent volatile nontemporal inout double, double, int, int, int);"
 1536|       |
 1537|    446|            "uint64_t atomicExchange(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1538|    446|            " int64_t atomicExchange(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1539|    446|            "uint64_t atomicExchange(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1540|    446|            " int64_t atomicExchange(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1541|    446|            "float16_t atomicExchange(coherent volatile nontemporal inout float16_t, float16_t);"
 1542|    446|            "float16_t atomicExchange(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1543|    446|            "   float atomicExchange(coherent volatile nontemporal inout float, float);"
 1544|    446|            "   float atomicExchange(coherent volatile nontemporal inout float, float, int, int, int);"
 1545|    446|            "  double atomicExchange(coherent volatile nontemporal inout double, double);"
 1546|    446|            "  double atomicExchange(coherent volatile nontemporal inout double, double, int, int, int);"
 1547|       |
 1548|    446|            "uint64_t atomicCompSwap(coherent volatile nontemporal inout uint64_t, uint64_t, uint64_t);"
 1549|    446|            " int64_t atomicCompSwap(coherent volatile nontemporal inout  int64_t,  int64_t,  int64_t);"
 1550|    446|            "uint64_t atomicCompSwap(coherent volatile nontemporal inout uint64_t, uint64_t, uint64_t, int, int, int, int, int);"
 1551|    446|            " int64_t atomicCompSwap(coherent volatile nontemporal inout  int64_t,  int64_t,  int64_t, int, int, int, int, int);"
 1552|       |
 1553|    446|            "uint64_t atomicLoad(coherent volatile nontemporal in uint64_t, int, int, int);"
 1554|    446|            " int64_t atomicLoad(coherent volatile nontemporal in  int64_t, int, int, int);"
 1555|    446|            "float16_t atomicLoad(coherent volatile nontemporal in float16_t, int, int, int);"
 1556|    446|            "   float atomicLoad(coherent volatile nontemporal in float, int, int, int);"
 1557|    446|            "  double atomicLoad(coherent volatile nontemporal in double, int, int, int);"
 1558|       |
 1559|    446|            "void atomicStore(coherent volatile nontemporal out uint64_t, uint64_t, int, int, int);"
 1560|    446|            "void atomicStore(coherent volatile nontemporal out  int64_t,  int64_t, int, int, int);"
 1561|    446|            "void atomicStore(coherent volatile nontemporal out float16_t, float16_t, int, int, int);"
 1562|    446|            "void atomicStore(coherent volatile nontemporal out float, float, int, int, int);"
 1563|    446|            "void atomicStore(coherent volatile nontemporal out double, double, int, int, int);"
 1564|    446|            "\n");
 1565|    446|    }
 1566|       |
 1567|       |    // NV_shader_atomic_fp16_vector
 1568|  1.11k|    if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (1568:9): [True: 459, False: 654]
  |  Branch (1568:34): [True: 447, False: 12]
  ------------------
 1569|    447|        commonBuiltins.append(
 1570|    447|            "f16vec2 atomicAdd(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1571|    447|            "f16vec4 atomicAdd(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1572|    447|            "f16vec2 atomicMin(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1573|    447|            "f16vec4 atomicMin(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1574|    447|            "f16vec2 atomicMax(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1575|    447|            "f16vec4 atomicMax(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1576|    447|            "f16vec2 atomicExchange(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1577|    447|            "f16vec4 atomicExchange(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1578|    447|            "\n");
 1579|    447|    }
 1580|       |
 1581|  1.11k|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1581:10): [True: 654, False: 459]
  |  Branch (1581:35): [True: 494, False: 160]
  ------------------
 1582|    953|        (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
  ------------------
  |  Branch (1582:10): [True: 459, False: 160]
  |  Branch (1582:35): [True: 459, False: 0]
  ------------------
 1583|    953|        commonBuiltins.append(
 1584|    953|            "int   floatBitsToInt(highp float value);"
 1585|    953|            "ivec2 floatBitsToInt(highp vec2  value);"
 1586|    953|            "ivec3 floatBitsToInt(highp vec3  value);"
 1587|    953|            "ivec4 floatBitsToInt(highp vec4  value);"
 1588|       |
 1589|    953|            "uint  floatBitsToUint(highp float value);"
 1590|    953|            "uvec2 floatBitsToUint(highp vec2  value);"
 1591|    953|            "uvec3 floatBitsToUint(highp vec3  value);"
 1592|    953|            "uvec4 floatBitsToUint(highp vec4  value);"
 1593|       |
 1594|    953|            "float intBitsToFloat(highp int   value);"
 1595|    953|            "vec2  intBitsToFloat(highp ivec2 value);"
 1596|    953|            "vec3  intBitsToFloat(highp ivec3 value);"
 1597|    953|            "vec4  intBitsToFloat(highp ivec4 value);"
 1598|       |
 1599|    953|            "float uintBitsToFloat(highp uint  value);"
 1600|    953|            "vec2  uintBitsToFloat(highp uvec2 value);"
 1601|    953|            "vec3  uintBitsToFloat(highp uvec3 value);"
 1602|    953|            "vec4  uintBitsToFloat(highp uvec4 value);"
 1603|       |
 1604|    953|            "\n");
 1605|    953|    }
 1606|       |
 1607|  1.11k|    if ((profile != EEsProfile && version >= 150) || // GL_NV_gpu_shader5
  ------------------
  |  Branch (1607:10): [True: 459, False: 654]
  |  Branch (1607:35): [True: 459, False: 0]
  ------------------
 1608|    953|        (profile == EEsProfile && version >= 310)) {    // GL_OES_gpu_shader5
  ------------------
  |  Branch (1608:10): [True: 654, False: 0]
  |  Branch (1608:35): [True: 494, False: 160]
  ------------------
 1609|       |
 1610|    953|        commonBuiltins.append(
 1611|    953|            "float  fma(float,  float,  float );"
 1612|    953|            "vec2   fma(vec2,   vec2,   vec2  );"
 1613|    953|            "vec3   fma(vec3,   vec3,   vec3  );"
 1614|    953|            "vec4   fma(vec4,   vec4,   vec4  );"
 1615|    953|            "\n");
 1616|    953|    }
 1617|       |
 1618|  1.11k|    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1618:9): [True: 459, False: 654]
  |  Branch (1618:34): [True: 459, False: 0]
  ------------------
 1619|    459|            commonBuiltins.append(
 1620|    459|                "double fma(double, double, double);"
 1621|    459|                "dvec2  fma(dvec2,  dvec2,  dvec2 );"
 1622|    459|                "dvec3  fma(dvec3,  dvec3,  dvec3 );"
 1623|    459|                "dvec4  fma(dvec4,  dvec4,  dvec4 );"
 1624|    459|                "\n");
 1625|    459|    }
 1626|       |
 1627|  1.11k|    if (profile == EEsProfile && version >= 310) {  // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1627:9): [True: 654, False: 459]
  |  Branch (1627:34): [True: 494, False: 160]
  ------------------
 1628|    494|            commonBuiltins.append(
 1629|    494|                "float64_t fma(float64_t, float64_t, float64_t);"
 1630|    494|                "f64vec2  fma(f64vec2,  f64vec2,  f64vec2 );"
 1631|    494|                "f64vec3  fma(f64vec3,  f64vec3,  f64vec3 );"
 1632|    494|                "f64vec4  fma(f64vec4,  f64vec4,  f64vec4 );"
 1633|    494|                "\n");
 1634|    494|    }
 1635|       |
 1636|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1636:10): [True: 654, False: 459]
  |  Branch (1636:35): [True: 494, False: 160]
  ------------------
 1637|    953|        (profile != EEsProfile && version >= 150)) { // GL_NV_gpu_shader5
  ------------------
  |  Branch (1637:10): [True: 459, False: 160]
  |  Branch (1637:35): [True: 459, False: 0]
  ------------------
 1638|    953|        commonBuiltins.append(
 1639|    953|            "float frexp(highp float, out highp int);"
 1640|    953|            "vec2  frexp(highp vec2,  out highp ivec2);"
 1641|    953|            "vec3  frexp(highp vec3,  out highp ivec3);"
 1642|    953|            "vec4  frexp(highp vec4,  out highp ivec4);"
 1643|       |
 1644|    953|            "float ldexp(highp float, highp int);"
 1645|    953|            "vec2  ldexp(highp vec2,  highp ivec2);"
 1646|    953|            "vec3  ldexp(highp vec3,  highp ivec3);"
 1647|    953|            "vec4  ldexp(highp vec4,  highp ivec4);"
 1648|       |
 1649|    953|            "\n");
 1650|    953|    }
 1651|       |
 1652|  1.11k|    if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1652:9): [True: 459, False: 654]
  |  Branch (1652:34): [True: 459, False: 0]
  ------------------
 1653|    459|        commonBuiltins.append(
 1654|    459|            "double frexp(double, out int);"
 1655|    459|            "dvec2  frexp( dvec2, out ivec2);"
 1656|    459|            "dvec3  frexp( dvec3, out ivec3);"
 1657|    459|            "dvec4  frexp( dvec4, out ivec4);"
 1658|       |
 1659|    459|            "double ldexp(double, int);"
 1660|    459|            "dvec2  ldexp( dvec2, ivec2);"
 1661|    459|            "dvec3  ldexp( dvec3, ivec3);"
 1662|    459|            "dvec4  ldexp( dvec4, ivec4);"
 1663|       |
 1664|    459|            "double packDouble2x32(uvec2);"
 1665|    459|            "uvec2 unpackDouble2x32(double);"
 1666|       |
 1667|    459|            "\n");
 1668|    459|    }
 1669|       |
 1670|  1.11k|    if (profile == EEsProfile && version >= 310) { // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1670:9): [True: 654, False: 459]
  |  Branch (1670:34): [True: 494, False: 160]
  ------------------
 1671|    494|        commonBuiltins.append(
 1672|    494|            "float64_t frexp(float64_t, out int);"
 1673|    494|            "f64vec2  frexp( f64vec2, out ivec2);"
 1674|    494|            "f64vec3  frexp( f64vec3, out ivec3);"
 1675|    494|            "f64vec4  frexp( f64vec4, out ivec4);"
 1676|       |
 1677|    494|            "float64_t ldexp(float64_t, int);"
 1678|    494|            "f64vec2  ldexp( f64vec2, ivec2);"
 1679|    494|            "f64vec3  ldexp( f64vec3, ivec3);"
 1680|    494|            "f64vec4  ldexp( f64vec4, ivec4);"
 1681|       |
 1682|    494|            "\n");
 1683|    494|    }
 1684|       |
 1685|  1.11k|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1685:10): [True: 654, False: 459]
  |  Branch (1685:35): [True: 494, False: 160]
  ------------------
 1686|    953|        (profile != EEsProfile && version >= 150)) {
  ------------------
  |  Branch (1686:10): [True: 459, False: 160]
  |  Branch (1686:35): [True: 459, False: 0]
  ------------------
 1687|    953|        commonBuiltins.append(
 1688|    953|            "highp uint packUnorm2x16(vec2);"
 1689|    953|                  "vec2 unpackUnorm2x16(highp uint);"
 1690|    953|            "\n");
 1691|    953|    }
 1692|       |
 1693|  1.11k|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1693:10): [True: 654, False: 459]
  |  Branch (1693:35): [True: 494, False: 160]
  ------------------
 1694|    953|        (profile != EEsProfile && version >= 150)) {
  ------------------
  |  Branch (1694:10): [True: 459, False: 160]
  |  Branch (1694:35): [True: 459, False: 0]
  ------------------
 1695|    953|        commonBuiltins.append(
 1696|    953|            "highp uint packSnorm2x16(vec2);"
 1697|    953|            "      vec2 unpackSnorm2x16(highp uint);"
 1698|    953|            "highp uint packHalf2x16(vec2);"
 1699|    953|            "\n");
 1700|    953|    }
 1701|       |
 1702|  1.11k|    if (profile == EEsProfile && version >= 300) {
  ------------------
  |  Branch (1702:9): [True: 654, False: 459]
  |  Branch (1702:34): [True: 494, False: 160]
  ------------------
 1703|    494|        commonBuiltins.append(
 1704|    494|            "mediump vec2 unpackHalf2x16(highp uint);"
 1705|    494|            "\n");
 1706|    619|    } else if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (1706:16): [True: 459, False: 160]
  |  Branch (1706:41): [True: 459, False: 0]
  ------------------
 1707|    459|        commonBuiltins.append(
 1708|    459|            "        vec2 unpackHalf2x16(highp uint);"
 1709|    459|            "\n");
 1710|    459|    }
 1711|       |
 1712|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1712:10): [True: 654, False: 459]
  |  Branch (1712:35): [True: 494, False: 160]
  ------------------
 1713|    953|        (profile != EEsProfile && version >= 150)) {
  ------------------
  |  Branch (1713:10): [True: 459, False: 160]
  |  Branch (1713:35): [True: 459, False: 0]
  ------------------
 1714|    953|        commonBuiltins.append(
 1715|    953|            "highp uint packSnorm4x8(vec4);"
 1716|    953|            "highp uint packUnorm4x8(vec4);"
 1717|    953|            "\n");
 1718|    953|    }
 1719|       |
 1720|  1.11k|    if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (1720:9): [True: 654, False: 459]
  |  Branch (1720:34): [True: 494, False: 160]
  ------------------
 1721|    494|        commonBuiltins.append(
 1722|    494|            "mediump vec4 unpackSnorm4x8(highp uint);"
 1723|    494|            "mediump vec4 unpackUnorm4x8(highp uint);"
 1724|    494|            "\n");
 1725|    619|    } else if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (1725:16): [True: 459, False: 160]
  |  Branch (1725:41): [True: 459, False: 0]
  ------------------
 1726|    459|        commonBuiltins.append(
 1727|    459|                    "vec4 unpackSnorm4x8(highp uint);"
 1728|    459|                    "vec4 unpackUnorm4x8(highp uint);"
 1729|    459|            "\n");
 1730|    459|    }
 1731|       |
 1732|       |    //
 1733|       |    // Matrix Functions.
 1734|       |    //
 1735|  1.11k|    commonBuiltins.append(
 1736|  1.11k|        "mat2 matrixCompMult(mat2 x, mat2 y);"
 1737|  1.11k|        "mat3 matrixCompMult(mat3 x, mat3 y);"
 1738|  1.11k|        "mat4 matrixCompMult(mat4 x, mat4 y);"
 1739|       |
 1740|  1.11k|        "\n");
 1741|       |
 1742|       |    // 120 is correct for both ES and desktop
 1743|  1.11k|    if (version >= 120) {
  ------------------
  |  Branch (1743:9): [True: 953, False: 160]
  ------------------
 1744|    953|        commonBuiltins.append(
 1745|    953|            "mat2   outerProduct(vec2 c, vec2 r);"
 1746|    953|            "mat3   outerProduct(vec3 c, vec3 r);"
 1747|    953|            "mat4   outerProduct(vec4 c, vec4 r);"
 1748|    953|            "mat2x3 outerProduct(vec3 c, vec2 r);"
 1749|    953|            "mat3x2 outerProduct(vec2 c, vec3 r);"
 1750|    953|            "mat2x4 outerProduct(vec4 c, vec2 r);"
 1751|    953|            "mat4x2 outerProduct(vec2 c, vec4 r);"
 1752|    953|            "mat3x4 outerProduct(vec4 c, vec3 r);"
 1753|    953|            "mat4x3 outerProduct(vec3 c, vec4 r);"
 1754|       |
 1755|    953|            "mat2   transpose(mat2   m);"
 1756|    953|            "mat3   transpose(mat3   m);"
 1757|    953|            "mat4   transpose(mat4   m);"
 1758|    953|            "mat2x3 transpose(mat3x2 m);"
 1759|    953|            "mat3x2 transpose(mat2x3 m);"
 1760|    953|            "mat2x4 transpose(mat4x2 m);"
 1761|    953|            "mat4x2 transpose(mat2x4 m);"
 1762|    953|            "mat3x4 transpose(mat4x3 m);"
 1763|    953|            "mat4x3 transpose(mat3x4 m);"
 1764|       |
 1765|    953|            "mat2x3 matrixCompMult(mat2x3, mat2x3);"
 1766|    953|            "mat2x4 matrixCompMult(mat2x4, mat2x4);"
 1767|    953|            "mat3x2 matrixCompMult(mat3x2, mat3x2);"
 1768|    953|            "mat3x4 matrixCompMult(mat3x4, mat3x4);"
 1769|    953|            "mat4x2 matrixCompMult(mat4x2, mat4x2);"
 1770|    953|            "mat4x3 matrixCompMult(mat4x3, mat4x3);"
 1771|       |
 1772|    953|            "\n");
 1773|       |
 1774|       |        // 150 is correct for both ES and desktop
 1775|    953|        if (version >= 150) {
  ------------------
  |  Branch (1775:13): [True: 953, False: 0]
  ------------------
 1776|    953|            commonBuiltins.append(
 1777|    953|                "float determinant(mat2 m);"
 1778|    953|                "float determinant(mat3 m);"
 1779|    953|                "float determinant(mat4 m);"
 1780|       |
 1781|    953|                "mat2 inverse(mat2 m);"
 1782|    953|                "mat3 inverse(mat3 m);"
 1783|    953|                "mat4 inverse(mat4 m);"
 1784|       |
 1785|    953|                "\n");
 1786|    953|        }
 1787|    953|    }
 1788|       |
 1789|       |    //
 1790|       |    // Original-style texture functions existing in all stages.
 1791|       |    // (Per-stage functions below.)
 1792|       |    //
 1793|  1.11k|    if ((profile == EEsProfile && version == 100) ||
  ------------------
  |  Branch (1793:10): [True: 654, False: 459]
  |  Branch (1793:35): [True: 160, False: 494]
  ------------------
 1794|    953|         profile == ECompatibilityProfile ||
  ------------------
  |  Branch (1794:10): [True: 0, False: 953]
  ------------------
 1795|    953|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (1795:10): [True: 452, False: 501]
  |  Branch (1795:37): [True: 4, False: 448]
  ------------------
 1796|    949|         profile == ENoProfile) {
  ------------------
  |  Branch (1796:10): [True: 7, False: 942]
  ------------------
 1797|    171|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (1797:13): [True: 160, False: 11]
  ------------------
 1798|    160|            commonBuiltins.append(
 1799|    160|                "vec4 texture2D(sampler2D, vec2);"
 1800|       |
 1801|    160|                "vec4 texture2DProj(sampler2D, vec3);"
 1802|    160|                "vec4 texture2DProj(sampler2D, vec4);"
 1803|       |
 1804|    160|                "vec4 texture3D(sampler3D, vec3);"     // OES_texture_3D, but caught by keyword check
 1805|    160|                "vec4 texture3DProj(sampler3D, vec4);" // OES_texture_3D, but caught by keyword check
 1806|       |
 1807|    160|                "vec4 textureCube(samplerCube, vec3);"
 1808|       |
 1809|    160|                "\n");
 1810|    160|        }
 1811|    171|    }
 1812|       |
 1813|  1.11k|    if ( profile == ECompatibilityProfile ||
  ------------------
  |  Branch (1813:10): [True: 0, False: 1.11k]
  ------------------
 1814|  1.11k|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (1814:10): [True: 452, False: 661]
  |  Branch (1814:37): [True: 4, False: 448]
  ------------------
 1815|  1.10k|         profile == ENoProfile) {
  ------------------
  |  Branch (1815:10): [True: 7, False: 1.10k]
  ------------------
 1816|     11|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (1816:13): [True: 0, False: 11]
  ------------------
 1817|      0|            commonBuiltins.append(
 1818|      0|                "vec4 texture1D(sampler1D, float);"
 1819|       |
 1820|      0|                "vec4 texture1DProj(sampler1D, vec2);"
 1821|      0|                "vec4 texture1DProj(sampler1D, vec4);"
 1822|       |
 1823|      0|                "vec4 shadow1D(sampler1DShadow, vec3);"
 1824|      0|                "vec4 shadow2D(sampler2DShadow, vec3);"
 1825|      0|                "vec4 shadow1DProj(sampler1DShadow, vec4);"
 1826|      0|                "vec4 shadow2DProj(sampler2DShadow, vec4);"
 1827|       |
 1828|      0|                "vec4 texture2DRect(sampler2DRect, vec2);"          // GL_ARB_texture_rectangle, caught by keyword check
 1829|      0|                "vec4 texture2DRectProj(sampler2DRect, vec3);"      // GL_ARB_texture_rectangle, caught by keyword check
 1830|      0|                "vec4 texture2DRectProj(sampler2DRect, vec4);"      // GL_ARB_texture_rectangle, caught by keyword check
 1831|      0|                "vec4 shadow2DRect(sampler2DRectShadow, vec3);"     // GL_ARB_texture_rectangle, caught by keyword check
 1832|      0|                "vec4 shadow2DRectProj(sampler2DRectShadow, vec4);" // GL_ARB_texture_rectangle, caught by keyword check
 1833|       |
 1834|      0|                "vec4 texture1DArray(sampler1DArray, vec2);"      // GL_EXT_texture_array
 1835|      0|                "vec4 texture2DArray(sampler2DArray, vec3);"      // GL_EXT_texture_array
 1836|      0|                "vec4 shadow1DArray(sampler1DArrayShadow, vec3);" // GL_EXT_texture_array
 1837|      0|                "vec4 shadow2DArray(sampler2DArrayShadow, vec4);" // GL_EXT_texture_array
 1838|      0|                "vec4 texture1DArray(sampler1DArray, vec2, float);"                // GL_EXT_texture_array
 1839|      0|                "vec4 texture2DArray(sampler2DArray, vec3, float);"                // GL_EXT_texture_array
 1840|      0|                "vec4 shadow1DArray(sampler1DArrayShadow, vec3, float);"           // GL_EXT_texture_array
 1841|      0|                "vec4 texture1DArrayLod(sampler1DArray, vec2, float);"      // GL_EXT_texture_array
 1842|      0|                "vec4 texture2DArrayLod(sampler2DArray, vec3, float);"      // GL_EXT_texture_array
 1843|      0|                "vec4 shadow1DArrayLod(sampler1DArrayShadow, vec3, float);" // GL_EXT_texture_array
 1844|      0|                "\n");
 1845|      0|        }
 1846|     11|    }
 1847|       |
 1848|  1.11k|    if (profile == EEsProfile) {
  ------------------
  |  Branch (1848:9): [True: 654, False: 459]
  ------------------
 1849|    654|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (1849:13): [True: 160, False: 494]
  ------------------
 1850|    160|            if (version < 300) {
  ------------------
  |  Branch (1850:17): [True: 160, False: 0]
  ------------------
 1851|    160|                commonBuiltins.append(
 1852|    160|                    "vec4 texture2D(samplerExternalOES, vec2 coord);" // GL_OES_EGL_image_external
 1853|    160|                    "vec4 texture2DProj(samplerExternalOES, vec3);"   // GL_OES_EGL_image_external
 1854|    160|                    "vec4 texture2DProj(samplerExternalOES, vec4);"   // GL_OES_EGL_image_external
 1855|    160|                "\n");
 1856|    160|            } else {
 1857|      0|                commonBuiltins.append(
 1858|      0|                    "highp ivec2 textureSize(samplerExternalOES, int lod);"   // GL_OES_EGL_image_external_essl3
 1859|      0|                    "vec4 texture(samplerExternalOES, vec2);"                 // GL_OES_EGL_image_external_essl3
 1860|      0|                    "vec4 texture(samplerExternalOES, vec2, float bias);"     // GL_OES_EGL_image_external_essl3
 1861|      0|                    "vec4 textureProj(samplerExternalOES, vec3);"             // GL_OES_EGL_image_external_essl3
 1862|      0|                    "vec4 textureProj(samplerExternalOES, vec3, float bias);" // GL_OES_EGL_image_external_essl3
 1863|      0|                    "vec4 textureProj(samplerExternalOES, vec4);"             // GL_OES_EGL_image_external_essl3
 1864|      0|                    "vec4 textureProj(samplerExternalOES, vec4, float bias);" // GL_OES_EGL_image_external_essl3
 1865|      0|                    "vec4 texelFetch(samplerExternalOES, ivec2, int lod);"    // GL_OES_EGL_image_external_essl3
 1866|      0|                "\n");
 1867|      0|            }
 1868|    160|            commonBuiltins.append(
 1869|    160|                "highp ivec2 textureSize(__samplerExternal2DY2YEXT, int lod);" // GL_EXT_YUV_target
 1870|    160|                "vec4 texture(__samplerExternal2DY2YEXT, vec2);"               // GL_EXT_YUV_target
 1871|    160|                "vec4 texture(__samplerExternal2DY2YEXT, vec2, float bias);"   // GL_EXT_YUV_target
 1872|    160|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec3);"           // GL_EXT_YUV_target
 1873|    160|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec3, float bias);" // GL_EXT_YUV_target
 1874|    160|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec4);"           // GL_EXT_YUV_target
 1875|    160|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec4, float bias);" // GL_EXT_YUV_target
 1876|    160|                "vec4 texelFetch(__samplerExternal2DY2YEXT sampler, ivec2, int lod);" // GL_EXT_YUV_target
 1877|    160|                "\n");
 1878|    160|            commonBuiltins.append(
 1879|    160|                "vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);"      // GL_EXT_shader_texture_lod
 1880|    160|                "vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);"  // GL_EXT_shader_texture_lod
 1881|    160|                "vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);"  // GL_EXT_shader_texture_lod
 1882|    160|                "vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3);"  // GL_EXT_shader_texture_lod
 1883|       |
 1884|    160|                "float shadow2DEXT(sampler2DShadow, vec3);"     // GL_EXT_shadow_samplers
 1885|    160|                "float shadow2DProjEXT(sampler2DShadow, vec4);" // GL_EXT_shadow_samplers
 1886|       |
 1887|    160|                "\n");
 1888|    160|        }
 1889|    654|    }
 1890|       |
 1891|       |    //
 1892|       |    // Noise functions.
 1893|       |    //
 1894|  1.11k|    if (spvVersion.spv == 0 && profile != EEsProfile) {
  ------------------
  |  Branch (1894:9): [True: 215, False: 898]
  |  Branch (1894:32): [True: 55, False: 160]
  ------------------
 1895|     55|        commonBuiltins.append(
 1896|     55|            "float noise1(float x);"
 1897|     55|            "float noise1(vec2  x);"
 1898|     55|            "float noise1(vec3  x);"
 1899|     55|            "float noise1(vec4  x);"
 1900|       |
 1901|     55|            "vec2 noise2(float x);"
 1902|     55|            "vec2 noise2(vec2  x);"
 1903|     55|            "vec2 noise2(vec3  x);"
 1904|     55|            "vec2 noise2(vec4  x);"
 1905|       |
 1906|     55|            "vec3 noise3(float x);"
 1907|     55|            "vec3 noise3(vec2  x);"
 1908|     55|            "vec3 noise3(vec3  x);"
 1909|     55|            "vec3 noise3(vec4  x);"
 1910|       |
 1911|     55|            "vec4 noise4(float x);"
 1912|     55|            "vec4 noise4(vec2  x);"
 1913|     55|            "vec4 noise4(vec3  x);"
 1914|     55|            "vec4 noise4(vec4  x);"
 1915|       |
 1916|     55|            "\n");
 1917|     55|    }
 1918|       |
 1919|  1.11k|    if (spvVersion.vulkan == 0) {
  ------------------
  |  Branch (1919:9): [True: 920, False: 193]
  ------------------
 1920|       |        //
 1921|       |        // Atomic counter functions.
 1922|       |        //
 1923|    920|        if ((profile != EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1923:14): [True: 406, False: 514]
  |  Branch (1923:39): [True: 406, False: 0]
  ------------------
 1924|    900|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (1924:14): [True: 514, False: 0]
  |  Branch (1924:39): [True: 494, False: 20]
  ------------------
 1925|    900|            commonBuiltins.append(
 1926|    900|                "uint atomicCounterIncrement(atomic_uint);"
 1927|    900|                "uint atomicCounterDecrement(atomic_uint);"
 1928|    900|                "uint atomicCounter(atomic_uint);"
 1929|       |
 1930|    900|                "\n");
 1931|    900|        }
 1932|    920|        if (profile != EEsProfile && version == 450) {
  ------------------
  |  Branch (1932:13): [True: 406, False: 514]
  |  Branch (1932:38): [True: 390, False: 16]
  ------------------
 1933|    390|            commonBuiltins.append(
 1934|    390|                "uint atomicCounterAddARB(atomic_uint, uint);"
 1935|    390|                "uint atomicCounterSubtractARB(atomic_uint, uint);"
 1936|    390|                "uint atomicCounterMinARB(atomic_uint, uint);"
 1937|    390|                "uint atomicCounterMaxARB(atomic_uint, uint);"
 1938|    390|                "uint atomicCounterAndARB(atomic_uint, uint);"
 1939|    390|                "uint atomicCounterOrARB(atomic_uint, uint);"
 1940|    390|                "uint atomicCounterXorARB(atomic_uint, uint);"
 1941|    390|                "uint atomicCounterExchangeARB(atomic_uint, uint);"
 1942|    390|                "uint atomicCounterCompSwapARB(atomic_uint, uint, uint);"
 1943|       |
 1944|    390|                "\n");
 1945|    390|        }
 1946|       |
 1947|       |
 1948|    920|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (1948:13): [True: 406, False: 514]
  |  Branch (1948:38): [True: 1, False: 405]
  ------------------
 1949|      1|            commonBuiltins.append(
 1950|      1|                "uint atomicCounterAdd(atomic_uint, uint);"
 1951|      1|                "uint atomicCounterSubtract(atomic_uint, uint);"
 1952|      1|                "uint atomicCounterMin(atomic_uint, uint);"
 1953|      1|                "uint atomicCounterMax(atomic_uint, uint);"
 1954|      1|                "uint atomicCounterAnd(atomic_uint, uint);"
 1955|      1|                "uint atomicCounterOr(atomic_uint, uint);"
 1956|      1|                "uint atomicCounterXor(atomic_uint, uint);"
 1957|      1|                "uint atomicCounterExchange(atomic_uint, uint);"
 1958|      1|                "uint atomicCounterCompSwap(atomic_uint, uint, uint);"
 1959|       |
 1960|      1|                "\n");
 1961|      1|        }
 1962|    920|    }
 1963|    193|    else if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (1963:14): [True: 0, False: 193]
  ------------------
 1964|       |        //
 1965|       |        // Atomic counter functions act as aliases to normal atomic functions.
 1966|       |        // replace definitions to take 'volatile coherent nontemporal uint' instead of 'atomic_uint'
 1967|       |        // and map to equivalent non-counter atomic op
 1968|       |        //
 1969|      0|        if ((profile != EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1969:14): [True: 0, False: 0]
  |  Branch (1969:39): [True: 0, False: 0]
  ------------------
 1970|      0|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (1970:14): [True: 0, False: 0]
  |  Branch (1970:39): [True: 0, False: 0]
  ------------------
 1971|      0|            commonBuiltins.append(
 1972|      0|                "uint atomicCounterIncrement(volatile coherent nontemporal uint);"
 1973|      0|                "uint atomicCounterDecrement(volatile coherent nontemporal uint);"
 1974|      0|                "uint atomicCounter(volatile coherent nontemporal uint);"
 1975|       |
 1976|      0|                "\n");
 1977|      0|        }
 1978|      0|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (1978:13): [True: 0, False: 0]
  |  Branch (1978:38): [True: 0, False: 0]
  ------------------
 1979|      0|            commonBuiltins.append(
 1980|      0|                "uint atomicCounterAdd(volatile coherent nontemporal uint, uint);"
 1981|      0|                "uint atomicCounterSubtract(volatile coherent nontemporal uint, uint);"
 1982|      0|                "uint atomicCounterMin(volatile coherent nontemporal uint, uint);"
 1983|      0|                "uint atomicCounterMax(volatile coherent nontemporal uint, uint);"
 1984|      0|                "uint atomicCounterAnd(volatile coherent nontemporal uint, uint);"
 1985|      0|                "uint atomicCounterOr(volatile coherent nontemporal uint, uint);"
 1986|      0|                "uint atomicCounterXor(volatile coherent nontemporal uint, uint);"
 1987|      0|                "uint atomicCounterExchange(volatile coherent nontemporal uint, uint);"
 1988|      0|                "uint atomicCounterCompSwap(volatile coherent nontemporal uint, uint, uint);"
 1989|       |
 1990|      0|                "\n");
 1991|      0|        }
 1992|      0|    }
 1993|       |
 1994|       |    // Bitfield
 1995|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1995:10): [True: 654, False: 459]
  |  Branch (1995:35): [True: 494, False: 160]
  ------------------
 1996|    953|        (profile != EEsProfile && version >= 150)) { // ARB_gpu_shader5/NV_gpu_shader5
  ------------------
  |  Branch (1996:10): [True: 459, False: 160]
  |  Branch (1996:35): [True: 459, False: 0]
  ------------------
 1997|    953|        commonBuiltins.append(
 1998|    953|            "  int bitfieldExtract(  int, int, int);"
 1999|    953|            "ivec2 bitfieldExtract(ivec2, int, int);"
 2000|    953|            "ivec3 bitfieldExtract(ivec3, int, int);"
 2001|    953|            "ivec4 bitfieldExtract(ivec4, int, int);"
 2002|       |
 2003|    953|            " uint bitfieldExtract( uint, int, int);"
 2004|    953|            "uvec2 bitfieldExtract(uvec2, int, int);"
 2005|    953|            "uvec3 bitfieldExtract(uvec3, int, int);"
 2006|    953|            "uvec4 bitfieldExtract(uvec4, int, int);"
 2007|       |
 2008|    953|            "  int bitfieldInsert(  int base,   int, int, int);"
 2009|    953|            "ivec2 bitfieldInsert(ivec2 base, ivec2, int, int);"
 2010|    953|            "ivec3 bitfieldInsert(ivec3 base, ivec3, int, int);"
 2011|    953|            "ivec4 bitfieldInsert(ivec4 base, ivec4, int, int);"
 2012|       |
 2013|    953|            " uint bitfieldInsert( uint base,  uint, int, int);"
 2014|    953|            "uvec2 bitfieldInsert(uvec2 base, uvec2, int, int);"
 2015|    953|            "uvec3 bitfieldInsert(uvec3 base, uvec3, int, int);"
 2016|    953|            "uvec4 bitfieldInsert(uvec4 base, uvec4, int, int);"
 2017|       |
 2018|    953|            "\n");
 2019|    953|    }
 2020|       |
 2021|  1.11k|    if (profile != EEsProfile && version >= 150) { //GL_ARB_gpu_shader5/GL_NV_gpu_shader5
  ------------------
  |  Branch (2021:9): [True: 459, False: 654]
  |  Branch (2021:34): [True: 459, False: 0]
  ------------------
 2022|    459|        commonBuiltins.append(
 2023|    459|            "  int findLSB(  int);"
 2024|    459|            "ivec2 findLSB(ivec2);"
 2025|    459|            "ivec3 findLSB(ivec3);"
 2026|    459|            "ivec4 findLSB(ivec4);"
 2027|       |
 2028|    459|            "  int findLSB( uint);"
 2029|    459|            "ivec2 findLSB(uvec2);"
 2030|    459|            "ivec3 findLSB(uvec3);"
 2031|    459|            "ivec4 findLSB(uvec4);"
 2032|       |
 2033|    459|            "\n");
 2034|    654|    } else if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (2034:16): [True: 654, False: 0]
  |  Branch (2034:41): [True: 494, False: 160]
  ------------------
 2035|    494|        commonBuiltins.append(
 2036|    494|            "lowp   int findLSB(  int);"
 2037|    494|            "lowp ivec2 findLSB(ivec2);"
 2038|    494|            "lowp ivec3 findLSB(ivec3);"
 2039|    494|            "lowp ivec4 findLSB(ivec4);"
 2040|       |
 2041|    494|            "lowp   int findLSB( uint);"
 2042|    494|            "lowp ivec2 findLSB(uvec2);"
 2043|    494|            "lowp ivec3 findLSB(uvec3);"
 2044|    494|            "lowp ivec4 findLSB(uvec4);"
 2045|       |
 2046|    494|            "\n");
 2047|    494|    }
 2048|       |
 2049|  1.11k|    if (profile != EEsProfile && version >= 150) { //GL_ARB_gpu_shader5/GL_NV_gpu_shader5
  ------------------
  |  Branch (2049:9): [True: 459, False: 654]
  |  Branch (2049:34): [True: 459, False: 0]
  ------------------
 2050|    459|        commonBuiltins.append(
 2051|    459|            "  int bitCount(  int);"
 2052|    459|            "ivec2 bitCount(ivec2);"
 2053|    459|            "ivec3 bitCount(ivec3);"
 2054|    459|            "ivec4 bitCount(ivec4);"
 2055|       |
 2056|    459|            "  int bitCount( uint);"
 2057|    459|            "ivec2 bitCount(uvec2);"
 2058|    459|            "ivec3 bitCount(uvec3);"
 2059|    459|            "ivec4 bitCount(uvec4);"
 2060|       |
 2061|    459|            "  int findMSB(highp   int);"
 2062|    459|            "ivec2 findMSB(highp ivec2);"
 2063|    459|            "ivec3 findMSB(highp ivec3);"
 2064|    459|            "ivec4 findMSB(highp ivec4);"
 2065|       |
 2066|    459|            "  int findMSB(highp  uint);"
 2067|    459|            "ivec2 findMSB(highp uvec2);"
 2068|    459|            "ivec3 findMSB(highp uvec3);"
 2069|    459|            "ivec4 findMSB(highp uvec4);"
 2070|    459|            "\n");
 2071|    459|    }
 2072|       |
 2073|  1.11k|    if (profile != EEsProfile && version >= 150 && version < 450) { //GL_NV_gpu_shader5
  ------------------
  |  Branch (2073:9): [True: 459, False: 654]
  |  Branch (2073:34): [True: 459, False: 0]
  |  Branch (2073:52): [True: 15, False: 444]
  ------------------
 2074|     15|        commonBuiltins.append(
 2075|     15|            "int64_t  packInt2x32(ivec2);"
 2076|     15|            "uint64_t packUint2x32(uvec2);"
 2077|     15|            "ivec2    unpackInt2x32(int64_t);"
 2078|     15|            "uvec2    unpackUint2x32(uint64_t);"
 2079|       |
 2080|     15|            "uint     packFloat2x16(f16vec2);"
 2081|     15|            "f16vec2  unpackFloat2x16(uint);"
 2082|       |
 2083|     15|            "int64_t doubleBitsToInt64(double);"
 2084|     15|            "i64vec2 doubleBitsToInt64(dvec2);"
 2085|     15|            "i64vec3 doubleBitsToInt64(dvec3);"
 2086|     15|            "i64vec4 doubleBitsToInt64(dvec4);"
 2087|       |
 2088|     15|            "uint64_t doubleBitsToUint64(double);"
 2089|     15|            "u64vec2  doubleBitsToUint64(dvec2);"
 2090|     15|            "u64vec3  doubleBitsToUint64(dvec3);"
 2091|     15|            "u64vec4  doubleBitsToUint64(dvec4);"
 2092|       |
 2093|     15|            "double int64BitsToDouble(int64_t);"
 2094|     15|            "dvec2  int64BitsToDouble(i64vec2);"
 2095|     15|            "dvec3  int64BitsToDouble(i64vec3);"
 2096|     15|            "dvec4  int64BitsToDouble(i64vec4);"
 2097|       |
 2098|     15|            "double uint64BitsToDouble(uint64_t);"
 2099|     15|            "dvec2  uint64BitsToDouble(u64vec2);"
 2100|     15|            "dvec3  uint64BitsToDouble(u64vec3);"
 2101|     15|            "dvec4  uint64BitsToDouble(u64vec4);"
 2102|       |            // Modifications to Vector Relational Functions
 2103|       |            // Introduction of explicitly sized types
 2104|     15|            "bvec2 lessThan(i64vec2, i64vec2);"
 2105|     15|            "bvec3 lessThan(i64vec3, i64vec3);"
 2106|     15|            "bvec4 lessThan(i64vec4, i64vec4);"
 2107|     15|            "bvec2 lessThan(u64vec2, u64vec2);"
 2108|     15|            "bvec3 lessThan(u64vec3, u64vec3);"
 2109|     15|            "bvec4 lessThan(u64vec4, u64vec4);"
 2110|       |
 2111|     15|            "bvec2 lessThanEqual(i64vec2, i64vec2);"
 2112|     15|            "bvec3 lessThanEqual(i64vec3, i64vec3);"
 2113|     15|            "bvec4 lessThanEqual(i64vec4, i64vec4);"
 2114|     15|            "bvec2 lessThanEqual(u64vec2, u64vec2);"
 2115|     15|            "bvec3 lessThanEqual(u64vec3, u64vec3);"
 2116|     15|            "bvec4 lessThanEqual(u64vec4, u64vec4);"
 2117|       |
 2118|     15|            "bvec2 greaterThan(i64vec2, i64vec2);"
 2119|     15|            "bvec3 greaterThan(i64vec3, i64vec3);"
 2120|     15|            "bvec4 greaterThan(i64vec4, i64vec4);"
 2121|     15|            "bvec2 greaterThan(u64vec2, u64vec2);"
 2122|     15|            "bvec3 greaterThan(u64vec3, u64vec3);"
 2123|     15|            "bvec4 greaterThan(u64vec4, u64vec4);"
 2124|       |
 2125|     15|            "bvec2 greaterThanEqual(i64vec2, i64vec2);"
 2126|     15|            "bvec3 greaterThanEqual(i64vec3, i64vec3);"
 2127|     15|            "bvec4 greaterThanEqual(i64vec4, i64vec4);"
 2128|     15|            "bvec2 greaterThanEqual(u64vec2, u64vec2);"
 2129|     15|            "bvec3 greaterThanEqual(u64vec3, u64vec3);"
 2130|     15|            "bvec4 greaterThanEqual(u64vec4, u64vec4);"
 2131|       |
 2132|     15|            "bvec2 equal(i64vec2, i64vec2);"
 2133|     15|            "bvec3 equal(i64vec3, i64vec3);"
 2134|     15|            "bvec4 equal(i64vec4, i64vec4);"
 2135|     15|            "bvec2 equal(u64vec2, u64vec2);"
 2136|     15|            "bvec3 equal(u64vec3, u64vec3);"
 2137|     15|            "bvec4 equal(u64vec4, u64vec4);"
 2138|       |
 2139|     15|            "bvec2 notEqual(i64vec2, i64vec2);"
 2140|     15|            "bvec3 notEqual(i64vec3, i64vec3);"
 2141|     15|            "bvec4 notEqual(i64vec4, i64vec4);"
 2142|     15|            "bvec2 notEqual(u64vec2, u64vec2);"
 2143|     15|            "bvec3 notEqual(u64vec3, u64vec3);"
 2144|     15|            "bvec4 notEqual(u64vec4, u64vec4);"
 2145|       |
 2146|     15|            "bvec2 lessThan(f16vec2, f16vec2);"
 2147|     15|            "bvec3 lessThan(f16vec3, f16vec3);"
 2148|     15|            "bvec4 lessThan(f16vec4, f16vec4);"
 2149|       |
 2150|     15|            "bvec2 lessThanEqual(f16vec2, f16vec2);"
 2151|     15|            "bvec3 lessThanEqual(f16vec3, f16vec3);"
 2152|     15|            "bvec4 lessThanEqual(f16vec4, f16vec4);"
 2153|       |
 2154|     15|            "bvec2 greaterThan(f16vec2, f16vec2);"
 2155|     15|            "bvec3 greaterThan(f16vec3, f16vec3);"
 2156|     15|            "bvec4 greaterThan(f16vec4, f16vec4);"
 2157|       |
 2158|     15|            "bvec2 greaterThanEqual(f16vec2, f16vec2);"
 2159|     15|            "bvec3 greaterThanEqual(f16vec3, f16vec3);"
 2160|     15|            "bvec4 greaterThanEqual(f16vec4, f16vec4);"
 2161|       |
 2162|     15|            "bvec2 equal(f16vec2, f16vec2);"
 2163|     15|            "bvec3 equal(f16vec3, f16vec3);"
 2164|     15|            "bvec4 equal(f16vec4, f16vec4);"
 2165|       |
 2166|     15|            "bvec2 notEqual(f16vec2, f16vec2);"
 2167|     15|            "bvec3 notEqual(f16vec3, f16vec3);"
 2168|     15|            "bvec4 notEqual(f16vec4, f16vec4);"
 2169|       |
 2170|       |            // Dependency on GL_ARB_gpu_shader_fp64
 2171|     15|            "bvec2 lessThan(dvec2, dvec2);"
 2172|     15|            "bvec3 lessThan(dvec3, dvec3);"
 2173|     15|            "bvec4 lessThan(dvec4, dvec4);"
 2174|       |
 2175|     15|            "bvec2 lessThanEqual(dvec2, dvec2);"
 2176|     15|            "bvec3 lessThanEqual(dvec3, dvec3);"
 2177|     15|            "bvec4 lessThanEqual(dvec4, dvec4);"
 2178|       |
 2179|     15|            "bvec2 greaterThan(dvec2, dvec2);"
 2180|     15|            "bvec3 greaterThan(dvec3, dvec3);"
 2181|     15|            "bvec4 greaterThan(dvec4, dvec4);"
 2182|       |
 2183|     15|            "bvec2 greaterThanEqual(dvec2, dvec2);"
 2184|     15|            "bvec3 greaterThanEqual(dvec3, dvec3);"
 2185|     15|            "bvec4 greaterThanEqual(dvec4, dvec4);"
 2186|       |
 2187|     15|            "bvec2 equal(dvec2, dvec2);"
 2188|     15|            "bvec3 equal(dvec3, dvec3);"
 2189|     15|            "bvec4 equal(dvec4, dvec4);"
 2190|       |
 2191|     15|            "bvec2 notEqual(dvec2, dvec2);"
 2192|     15|            "bvec3 notEqual(dvec3, dvec3);"
 2193|     15|            "bvec4 notEqual(dvec4, dvec4);"
 2194|       |
 2195|     15|            "\n");
 2196|     15|    }
 2197|       |
 2198|       |
 2199|  1.11k|    if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (2199:9): [True: 459, False: 654]
  |  Branch (2199:34): [True: 459, False: 0]
  ------------------
 2200|    459|        commonBuiltins.append(
 2201|    459|            "bool anyThreadNV(bool);"
 2202|    459|            "bool allThreadsNV(bool);"
 2203|    459|            "bool allThreadsEqualNV(bool);"
 2204|       |
 2205|    459|            "\n");
 2206|    459|    }
 2207|       |
 2208|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (2208:10): [True: 654, False: 459]
  |  Branch (2208:35): [True: 494, False: 160]
  ------------------
 2209|    953|        (profile != EEsProfile && version >= 150)) { // NV_gpu_shader5
  ------------------
  |  Branch (2209:10): [True: 459, False: 160]
  |  Branch (2209:35): [True: 459, False: 0]
  ------------------
 2210|    953|        commonBuiltins.append(
 2211|    953|            " uint uaddCarry(highp  uint, highp  uint, out lowp  uint carry);"
 2212|    953|            "uvec2 uaddCarry(highp uvec2, highp uvec2, out lowp uvec2 carry);"
 2213|    953|            "uvec3 uaddCarry(highp uvec3, highp uvec3, out lowp uvec3 carry);"
 2214|    953|            "uvec4 uaddCarry(highp uvec4, highp uvec4, out lowp uvec4 carry);"
 2215|       |
 2216|    953|            " uint usubBorrow(highp  uint, highp  uint, out lowp  uint borrow);"
 2217|    953|            "uvec2 usubBorrow(highp uvec2, highp uvec2, out lowp uvec2 borrow);"
 2218|    953|            "uvec3 usubBorrow(highp uvec3, highp uvec3, out lowp uvec3 borrow);"
 2219|    953|            "uvec4 usubBorrow(highp uvec4, highp uvec4, out lowp uvec4 borrow);"
 2220|       |
 2221|    953|            "void umulExtended(highp  uint, highp  uint, out highp  uint, out highp  uint lsb);"
 2222|    953|            "void umulExtended(highp uvec2, highp uvec2, out highp uvec2, out highp uvec2 lsb);"
 2223|    953|            "void umulExtended(highp uvec3, highp uvec3, out highp uvec3, out highp uvec3 lsb);"
 2224|    953|            "void umulExtended(highp uvec4, highp uvec4, out highp uvec4, out highp uvec4 lsb);"
 2225|       |
 2226|    953|            "void imulExtended(highp   int, highp   int, out highp   int, out highp   int lsb);"
 2227|    953|            "void imulExtended(highp ivec2, highp ivec2, out highp ivec2, out highp ivec2 lsb);"
 2228|    953|            "void imulExtended(highp ivec3, highp ivec3, out highp ivec3, out highp ivec3 lsb);"
 2229|    953|            "void imulExtended(highp ivec4, highp ivec4, out highp ivec4, out highp ivec4 lsb);"
 2230|       |
 2231|    953|            "  int bitfieldReverse(highp   int);"
 2232|    953|            "ivec2 bitfieldReverse(highp ivec2);"
 2233|    953|            "ivec3 bitfieldReverse(highp ivec3);"
 2234|    953|            "ivec4 bitfieldReverse(highp ivec4);"
 2235|       |
 2236|    953|            " uint bitfieldReverse(highp  uint);"
 2237|    953|            "uvec2 bitfieldReverse(highp uvec2);"
 2238|    953|            "uvec3 bitfieldReverse(highp uvec3);"
 2239|    953|            "uvec4 bitfieldReverse(highp uvec4);"
 2240|       |
 2241|    953|            "\n");
 2242|    953|    }
 2243|       |
 2244|  1.11k|    if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (2244:9): [True: 654, False: 459]
  |  Branch (2244:34): [True: 494, False: 160]
  ------------------
 2245|    494|        commonBuiltins.append(
 2246|    494|            "lowp   int bitCount(  int);"
 2247|    494|            "lowp ivec2 bitCount(ivec2);"
 2248|    494|            "lowp ivec3 bitCount(ivec3);"
 2249|    494|            "lowp ivec4 bitCount(ivec4);"
 2250|       |
 2251|    494|            "lowp   int bitCount( uint);"
 2252|    494|            "lowp ivec2 bitCount(uvec2);"
 2253|    494|            "lowp ivec3 bitCount(uvec3);"
 2254|    494|            "lowp ivec4 bitCount(uvec4);"
 2255|       |
 2256|    494|            "lowp   int findMSB(highp   int);"
 2257|    494|            "lowp ivec2 findMSB(highp ivec2);"
 2258|    494|            "lowp ivec3 findMSB(highp ivec3);"
 2259|    494|            "lowp ivec4 findMSB(highp ivec4);"
 2260|       |
 2261|    494|            "lowp   int findMSB(highp  uint);"
 2262|    494|            "lowp ivec2 findMSB(highp uvec2);"
 2263|    494|            "lowp ivec3 findMSB(highp uvec3);"
 2264|    494|            "lowp ivec4 findMSB(highp uvec4);"
 2265|       |
 2266|    494|            "\n");
 2267|    494|    }
 2268|       |
 2269|       |    // GL_ARB_shader_ballot
 2270|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (2270:9): [True: 459, False: 654]
  |  Branch (2270:34): [True: 444, False: 15]
  ------------------
 2271|    444|        commonBuiltins.append(
 2272|    444|            "uint64_t ballotARB(bool);"
 2273|       |
 2274|    444|            "float readInvocationARB(float, uint);"
 2275|    444|            "vec2  readInvocationARB(vec2,  uint);"
 2276|    444|            "vec3  readInvocationARB(vec3,  uint);"
 2277|    444|            "vec4  readInvocationARB(vec4,  uint);"
 2278|       |
 2279|    444|            "int   readInvocationARB(int,   uint);"
 2280|    444|            "ivec2 readInvocationARB(ivec2, uint);"
 2281|    444|            "ivec3 readInvocationARB(ivec3, uint);"
 2282|    444|            "ivec4 readInvocationARB(ivec4, uint);"
 2283|       |
 2284|    444|            "uint  readInvocationARB(uint,  uint);"
 2285|    444|            "uvec2 readInvocationARB(uvec2, uint);"
 2286|    444|            "uvec3 readInvocationARB(uvec3, uint);"
 2287|    444|            "uvec4 readInvocationARB(uvec4, uint);"
 2288|       |
 2289|    444|            "float readFirstInvocationARB(float);"
 2290|    444|            "vec2  readFirstInvocationARB(vec2);"
 2291|    444|            "vec3  readFirstInvocationARB(vec3);"
 2292|    444|            "vec4  readFirstInvocationARB(vec4);"
 2293|       |
 2294|    444|            "int   readFirstInvocationARB(int);"
 2295|    444|            "ivec2 readFirstInvocationARB(ivec2);"
 2296|    444|            "ivec3 readFirstInvocationARB(ivec3);"
 2297|    444|            "ivec4 readFirstInvocationARB(ivec4);"
 2298|       |
 2299|    444|            "uint  readFirstInvocationARB(uint);"
 2300|    444|            "uvec2 readFirstInvocationARB(uvec2);"
 2301|    444|            "uvec3 readFirstInvocationARB(uvec3);"
 2302|    444|            "uvec4 readFirstInvocationARB(uvec4);"
 2303|       |
 2304|    444|            "\n");
 2305|    444|    }
 2306|       |
 2307|       |    // GL_ARB_shader_group_vote
 2308|  1.11k|    if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (2308:9): [True: 459, False: 654]
  |  Branch (2308:34): [True: 447, False: 12]
  ------------------
 2309|    447|        commonBuiltins.append(
 2310|    447|            "bool anyInvocationARB(bool);"
 2311|    447|            "bool allInvocationsARB(bool);"
 2312|    447|            "bool allInvocationsEqualARB(bool);"
 2313|       |
 2314|    447|            "\n");
 2315|    447|    }
 2316|       |
 2317|       |    // GL_EXT_integer_dot_product
 2318|  1.11k|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (2318:10): [True: 654, False: 459]
  |  Branch (2318:35): [True: 494, False: 160]
  ------------------
 2319|    938|        (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (2319:10): [True: 459, False: 160]
  |  Branch (2319:35): [True: 444, False: 15]
  ------------------
 2320|    938|        commonBuiltins.append(
 2321|       |
 2322|    938|            "uint dotEXT(uvec2 a, uvec2 b);"
 2323|    938|            "int dotEXT(ivec2 a, ivec2 b);"
 2324|    938|            "int dotEXT(ivec2 a, uvec2 b);"
 2325|    938|            "int dotEXT(uvec2 a, ivec2 b);"
 2326|       |
 2327|    938|            "uint dotEXT(uvec3 a, uvec3 b);"
 2328|    938|            "int dotEXT(ivec3 a, ivec3 b);"
 2329|    938|            "int dotEXT(ivec3 a, uvec3 b);"
 2330|    938|            "int dotEXT(uvec3 a, ivec3 b);"
 2331|       |
 2332|    938|            "uint dotEXT(uvec4 a, uvec4 b);"
 2333|    938|            "int dotEXT(ivec4 a, ivec4 b);"
 2334|    938|            "int dotEXT(ivec4 a, uvec4 b);"
 2335|    938|            "int dotEXT(uvec4 a, ivec4 b);"
 2336|       |
 2337|    938|            "uint dotPacked4x8EXT(uint a, uint b);"
 2338|    938|            "int dotPacked4x8EXT(int a, uint b);"
 2339|    938|            "int dotPacked4x8EXT(uint a, int b);"
 2340|    938|            "int dotPacked4x8EXT(int a, int b);"
 2341|       |
 2342|    938|            "uint dotEXT(u8vec2 a, u8vec2 b);"
 2343|    938|            "int dotEXT(i8vec2 a, u8vec2 b);"
 2344|    938|            "int dotEXT(u8vec2 a, i8vec2 b);"
 2345|    938|            "int dotEXT(i8vec2 a, i8vec2 b);"
 2346|       |
 2347|    938|            "uint dotEXT(u8vec3 a, u8vec3 b);"
 2348|    938|            "int dotEXT(i8vec3 a, u8vec3 b);"
 2349|    938|            "int dotEXT(u8vec3 a, i8vec3 b);"
 2350|    938|            "int dotEXT(i8vec3 a, i8vec3 b);"
 2351|       |
 2352|    938|            "uint dotEXT(u8vec4 a, u8vec4 b);"
 2353|    938|            "int dotEXT(i8vec4 a, u8vec4 b);"
 2354|    938|            "int dotEXT(u8vec4 a, i8vec4 b);"
 2355|    938|            "int dotEXT(i8vec4 a, i8vec4 b);"
 2356|       |
 2357|    938|            "uint dotEXT(u16vec2 a, u16vec2 b);"
 2358|    938|            "int dotEXT(i16vec2 a, u16vec2 b);"
 2359|    938|            "int dotEXT(u16vec2 a, i16vec2 b);"
 2360|    938|            "int dotEXT(i16vec2 a, i16vec2 b);"
 2361|       |
 2362|    938|            "uint dotEXT(u16vec3 a, u16vec3 b);"
 2363|    938|            "int dotEXT(i16vec3 a, u16vec3 b);"
 2364|    938|            "int dotEXT(u16vec3 a, i16vec3 b);"
 2365|    938|            "int dotEXT(i16vec3 a, i16vec3 b);"
 2366|       |
 2367|    938|            "uint dotEXT(u16vec4 a, u16vec4 b);"
 2368|    938|            "int dotEXT(i16vec4 a, u16vec4 b);"
 2369|    938|            "int dotEXT(u16vec4 a, i16vec4 b);"
 2370|    938|            "int dotEXT(i16vec4 a, i16vec4 b);"
 2371|       |
 2372|    938|            "uint64_t dotEXT(u64vec2 a, u64vec2 b);"
 2373|    938|            "int64_t dotEXT(i64vec2 a, u64vec2 b);"
 2374|    938|            "int64_t dotEXT(u64vec2 a, i64vec2 b);"
 2375|    938|            "int64_t dotEXT(i64vec2 a, i64vec2 b);"
 2376|       |
 2377|    938|            "uint64_t dotEXT(u64vec3 a, u64vec3 b);"
 2378|    938|            "int64_t dotEXT(i64vec3 a, u64vec3 b);"
 2379|    938|            "int64_t dotEXT(u64vec3 a, i64vec3 b);"
 2380|    938|            "int64_t dotEXT(i64vec3 a, i64vec3 b);"
 2381|       |
 2382|    938|            "uint64_t dotEXT(u64vec4 a, u64vec4 b);"
 2383|    938|            "int64_t dotEXT(i64vec4 a, u64vec4 b);"
 2384|    938|            "int64_t dotEXT(u64vec4 a, i64vec4 b);"
 2385|    938|            "int64_t dotEXT(i64vec4 a, i64vec4 b);"
 2386|       |
 2387|    938|            "uint dotAccSatEXT(uvec2 a, uvec2 b, uint c);"
 2388|    938|            "int dotAccSatEXT(ivec2 a, uvec2 b, int c);"
 2389|    938|            "int dotAccSatEXT(uvec2 a, ivec2 b, int c);"
 2390|    938|            "int dotAccSatEXT(ivec2 a, ivec2 b, int c);"
 2391|       |
 2392|    938|            "uint dotAccSatEXT(uvec3 a, uvec3 b, uint c);"
 2393|    938|            "int dotAccSatEXT(ivec3 a, uvec3 b, int c);"
 2394|    938|            "int dotAccSatEXT(uvec3 a, ivec3 b, int c);"
 2395|    938|            "int dotAccSatEXT(ivec3 a, ivec3 b, int c);"
 2396|       |
 2397|    938|            "uint dotAccSatEXT(uvec4 a, uvec4 b, uint c);"
 2398|    938|            "int dotAccSatEXT(ivec4 a, uvec4 b, int c);"
 2399|    938|            "int dotAccSatEXT(uvec4 a, ivec4 b, int c);"
 2400|    938|            "int dotAccSatEXT(ivec4 a, ivec4 b, int c);"
 2401|       |
 2402|    938|            "uint dotPacked4x8AccSatEXT(uint a, uint b, uint c);"
 2403|    938|            "int dotPacked4x8AccSatEXT(int a, uint b, int c);"
 2404|    938|            "int dotPacked4x8AccSatEXT(uint a, int b, int c);"
 2405|    938|            "int dotPacked4x8AccSatEXT(int a, int b, int c);"
 2406|       |
 2407|    938|            "uint dotAccSatEXT(u8vec2 a, u8vec2 b, uint c);"
 2408|    938|            "int dotAccSatEXT(i8vec2 a, u8vec2 b, int c);"
 2409|    938|            "int dotAccSatEXT(u8vec2 a, i8vec2 b, int c);"
 2410|    938|            "int dotAccSatEXT(i8vec2 a, i8vec2 b, int c);"
 2411|       |
 2412|    938|            "uint dotAccSatEXT(u8vec3 a, u8vec3 b, uint c);"
 2413|    938|            "int dotAccSatEXT(i8vec3 a, u8vec3 b, int c);"
 2414|    938|            "int dotAccSatEXT(u8vec3 a, i8vec3 b, int c);"
 2415|    938|            "int dotAccSatEXT(i8vec3 a, i8vec3 b, int c);"
 2416|       |
 2417|    938|            "uint dotAccSatEXT(u8vec4 a, u8vec4 b, uint c);"
 2418|    938|            "int dotAccSatEXT(i8vec4 a, u8vec4 b, int c);"
 2419|    938|            "int dotAccSatEXT(u8vec4 a, i8vec4 b, int c);"
 2420|    938|            "int dotAccSatEXT(i8vec4 a, i8vec4 b, int c);"
 2421|       |
 2422|    938|            "uint dotAccSatEXT(u16vec2 a, u16vec2 b, uint c);"
 2423|    938|            "int dotAccSatEXT(i16vec2 a, u16vec2 b, int c);"
 2424|    938|            "int dotAccSatEXT(u16vec2 a, i16vec2 b, int c);"
 2425|    938|            "int dotAccSatEXT(i16vec2 a, i16vec2 b, int c);"
 2426|       |
 2427|    938|            "uint dotAccSatEXT(u16vec3 a, u16vec3 b, uint c);"
 2428|    938|            "int dotAccSatEXT(i16vec3 a, u16vec3 b, int c);"
 2429|    938|            "int dotAccSatEXT(u16vec3 a, i16vec3 b, int c);"
 2430|    938|            "int dotAccSatEXT(i16vec3 a, i16vec3 b, int c);"
 2431|       |
 2432|    938|            "uint dotAccSatEXT(u16vec4 a, u16vec4 b, uint c);"
 2433|    938|            "int dotAccSatEXT(i16vec4 a, u16vec4 b, int c);"
 2434|    938|            "int dotAccSatEXT(u16vec4 a, i16vec4 b, int c);"
 2435|    938|            "int dotAccSatEXT(i16vec4 a, i16vec4 b, int c);"
 2436|       |
 2437|    938|            "uint64_t dotAccSatEXT(u64vec2 a, u64vec2 b, uint64_t c);"
 2438|    938|            "int64_t dotAccSatEXT(i64vec2 a, u64vec2 b, int64_t c);"
 2439|    938|            "int64_t dotAccSatEXT(u64vec2 a, i64vec2 b, int64_t c);"
 2440|    938|            "int64_t dotAccSatEXT(i64vec2 a, i64vec2 b, int64_t c);"
 2441|       |
 2442|    938|            "uint64_t dotAccSatEXT(u64vec3 a, u64vec3 b, uint64_t c);"
 2443|    938|            "int64_t dotAccSatEXT(i64vec3 a, u64vec3 b, int64_t c);"
 2444|    938|            "int64_t dotAccSatEXT(u64vec3 a, i64vec3 b, int64_t c);"
 2445|    938|            "int64_t dotAccSatEXT(i64vec3 a, i64vec3 b, int64_t c);"
 2446|       |
 2447|    938|            "uint64_t dotAccSatEXT(u64vec4 a, u64vec4 b, uint64_t c);"
 2448|    938|            "int64_t dotAccSatEXT(i64vec4 a, u64vec4 b, int64_t c);"
 2449|    938|            "int64_t dotAccSatEXT(u64vec4 a, i64vec4 b, int64_t c);"
 2450|    938|            "int64_t dotAccSatEXT(i64vec4 a, i64vec4 b, int64_t c);"
 2451|    938|            "\n");
 2452|    938|    }
 2453|       |
 2454|       |    // GL_KHR_shader_subgroup
 2455|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (2455:10): [True: 654, False: 459]
  |  Branch (2455:35): [True: 494, False: 160]
  ------------------
 2456|    953|        (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (2456:10): [True: 459, False: 160]
  |  Branch (2456:35): [True: 459, False: 0]
  ------------------
 2457|    953|        commonBuiltins.append(
 2458|    953|            "void subgroupBarrier();"
 2459|    953|            "void subgroupMemoryBarrier();"
 2460|    953|            "void subgroupMemoryBarrierBuffer();"
 2461|    953|            "void subgroupMemoryBarrierImage();"
 2462|    953|            "bool subgroupElect();"
 2463|       |
 2464|    953|            "bool   subgroupAll(bool);\n"
 2465|    953|            "bool   subgroupAny(bool);\n"
 2466|    953|            "uvec4  subgroupBallot(bool);\n"
 2467|    953|            "bool   subgroupInverseBallot(uvec4);\n"
 2468|    953|            "bool   subgroupBallotBitExtract(uvec4, uint);\n"
 2469|    953|            "uint   subgroupBallotBitCount(uvec4);\n"
 2470|    953|            "uint   subgroupBallotInclusiveBitCount(uvec4);\n"
 2471|    953|            "uint   subgroupBallotExclusiveBitCount(uvec4);\n"
 2472|    953|            "uint   subgroupBallotFindLSB(uvec4);\n"
 2473|    953|            "uint   subgroupBallotFindMSB(uvec4);\n"
 2474|    953|            );
 2475|       |
 2476|       |        // Generate all flavors of subgroup ops.
 2477|    953|        static const char *subgroupOps[] = 
 2478|    953|        {
 2479|    953|            "bool   subgroupAllEqual(%s);\n",
 2480|    953|            "%s     subgroupBroadcast(%s, uint);\n",
 2481|    953|            "%s     subgroupBroadcastFirst(%s);\n",
 2482|    953|            "%s     subgroupShuffle(%s, uint);\n",
 2483|    953|            "%s     subgroupShuffleXor(%s, uint);\n",
 2484|    953|            "%s     subgroupShuffleUp(%s, uint delta);\n",
 2485|    953|            "%s     subgroupShuffleDown(%s, uint delta);\n",
 2486|    953|            "%s     subgroupRotate(%s, uint);\n",
 2487|    953|            "%s     subgroupClusteredRotate(%s, uint, uint);\n",
 2488|    953|            "%s     subgroupAdd(%s);\n",
 2489|    953|            "%s     subgroupMul(%s);\n",
 2490|    953|            "%s     subgroupMin(%s);\n",
 2491|    953|            "%s     subgroupMax(%s);\n",
 2492|    953|            "%s     subgroupAnd(%s);\n",
 2493|    953|            "%s     subgroupOr(%s);\n",
 2494|    953|            "%s     subgroupXor(%s);\n",
 2495|    953|            "%s     subgroupInclusiveAdd(%s);\n",
 2496|    953|            "%s     subgroupInclusiveMul(%s);\n",
 2497|    953|            "%s     subgroupInclusiveMin(%s);\n",
 2498|    953|            "%s     subgroupInclusiveMax(%s);\n",
 2499|    953|            "%s     subgroupInclusiveAnd(%s);\n",
 2500|    953|            "%s     subgroupInclusiveOr(%s);\n",
 2501|    953|            "%s     subgroupInclusiveXor(%s);\n",
 2502|    953|            "%s     subgroupExclusiveAdd(%s);\n",
 2503|    953|            "%s     subgroupExclusiveMul(%s);\n",
 2504|    953|            "%s     subgroupExclusiveMin(%s);\n",
 2505|    953|            "%s     subgroupExclusiveMax(%s);\n",
 2506|    953|            "%s     subgroupExclusiveAnd(%s);\n",
 2507|    953|            "%s     subgroupExclusiveOr(%s);\n",
 2508|    953|            "%s     subgroupExclusiveXor(%s);\n",
 2509|    953|            "%s     subgroupClusteredAdd(%s, uint);\n",
 2510|    953|            "%s     subgroupClusteredMul(%s, uint);\n",
 2511|    953|            "%s     subgroupClusteredMin(%s, uint);\n",
 2512|    953|            "%s     subgroupClusteredMax(%s, uint);\n",
 2513|    953|            "%s     subgroupClusteredAnd(%s, uint);\n",
 2514|    953|            "%s     subgroupClusteredOr(%s, uint);\n",
 2515|    953|            "%s     subgroupClusteredXor(%s, uint);\n",
 2516|    953|            "%s     subgroupQuadBroadcast(%s, uint);\n",
 2517|    953|            "%s     subgroupQuadSwapHorizontal(%s);\n",
 2518|    953|            "%s     subgroupQuadSwapVertical(%s);\n",
 2519|    953|            "%s     subgroupQuadSwapDiagonal(%s);\n",
 2520|    953|            "uvec4  subgroupPartitionNV(%s);\n",
 2521|    953|            "%s     subgroupPartitionedAddNV(%s, uvec4 ballot);\n",
 2522|    953|            "%s     subgroupPartitionedMulNV(%s, uvec4 ballot);\n",
 2523|    953|            "%s     subgroupPartitionedMinNV(%s, uvec4 ballot);\n",
 2524|    953|            "%s     subgroupPartitionedMaxNV(%s, uvec4 ballot);\n",
 2525|    953|            "%s     subgroupPartitionedAndNV(%s, uvec4 ballot);\n",
 2526|    953|            "%s     subgroupPartitionedOrNV(%s, uvec4 ballot);\n",
 2527|    953|            "%s     subgroupPartitionedXorNV(%s, uvec4 ballot);\n",
 2528|    953|            "%s     subgroupPartitionedInclusiveAddNV(%s, uvec4 ballot);\n",
 2529|    953|            "%s     subgroupPartitionedInclusiveMulNV(%s, uvec4 ballot);\n",
 2530|    953|            "%s     subgroupPartitionedInclusiveMinNV(%s, uvec4 ballot);\n",
 2531|    953|            "%s     subgroupPartitionedInclusiveMaxNV(%s, uvec4 ballot);\n",
 2532|    953|            "%s     subgroupPartitionedInclusiveAndNV(%s, uvec4 ballot);\n",
 2533|    953|            "%s     subgroupPartitionedInclusiveOrNV(%s, uvec4 ballot);\n",
 2534|    953|            "%s     subgroupPartitionedInclusiveXorNV(%s, uvec4 ballot);\n",
 2535|    953|            "%s     subgroupPartitionedExclusiveAddNV(%s, uvec4 ballot);\n",
 2536|    953|            "%s     subgroupPartitionedExclusiveMulNV(%s, uvec4 ballot);\n",
 2537|    953|            "%s     subgroupPartitionedExclusiveMinNV(%s, uvec4 ballot);\n",
 2538|    953|            "%s     subgroupPartitionedExclusiveMaxNV(%s, uvec4 ballot);\n",
 2539|    953|            "%s     subgroupPartitionedExclusiveAndNV(%s, uvec4 ballot);\n",
 2540|    953|            "%s     subgroupPartitionedExclusiveOrNV(%s, uvec4 ballot);\n",
 2541|    953|            "%s     subgroupPartitionedExclusiveXorNV(%s, uvec4 ballot);\n",
 2542|    953|        };
 2543|       |
 2544|    953|        static const char *floatTypes[] = { 
 2545|    953|            "float", "vec2", "vec3", "vec4", 
 2546|    953|            "float16_t", "f16vec2", "f16vec3", "f16vec4", 
 2547|    953|        };
 2548|    953|        static const char *doubleTypes[] = { 
 2549|    953|            "double", "dvec2", "dvec3", "dvec4", 
 2550|    953|        };
 2551|    953|        static const char *intTypes[] = { 
 2552|    953|            "int8_t", "i8vec2", "i8vec3", "i8vec4", 
 2553|    953|            "int16_t", "i16vec2", "i16vec3", "i16vec4", 
 2554|    953|            "int", "ivec2", "ivec3", "ivec4", 
 2555|    953|            "int64_t", "i64vec2", "i64vec3", "i64vec4", 
 2556|    953|            "uint8_t", "u8vec2", "u8vec3", "u8vec4", 
 2557|    953|            "uint16_t", "u16vec2", "u16vec3", "u16vec4", 
 2558|    953|            "uint", "uvec2", "uvec3", "uvec4", 
 2559|    953|            "uint64_t", "u64vec2", "u64vec3", "u64vec4", 
 2560|    953|        };
 2561|    953|        static const char *boolTypes[] = { 
 2562|    953|            "bool", "bvec2", "bvec3", "bvec4", 
 2563|    953|        };
 2564|       |
 2565|  60.9k|        for (size_t i = 0; i < sizeof(subgroupOps)/sizeof(subgroupOps[0]); ++i) {
  ------------------
  |  Branch (2565:28): [True: 60.0k, False: 953]
  ------------------
 2566|  60.0k|            const char *op = subgroupOps[i];
 2567|       |
 2568|       |            // Logical operations don't support float
 2569|  60.0k|            bool logicalOp = strstr(op, "Or") || strstr(op, "And") ||
  ------------------
  |  Branch (2569:30): [True: 6.67k, False: 53.3k]
  |  Branch (2569:50): [True: 6.67k, False: 46.6k]
  ------------------
 2570|  46.6k|                             (strstr(op, "Xor") && !strstr(op, "ShuffleXor"));
  ------------------
  |  Branch (2570:31): [True: 7.62k, False: 39.0k]
  |  Branch (2570:52): [True: 6.67k, False: 953]
  ------------------
 2571|       |            // Math operations don't support bool
 2572|  60.0k|            bool mathOp = strstr(op, "Add") || strstr(op, "Mul") || strstr(op, "Min") || strstr(op, "Max");
  ------------------
  |  Branch (2572:27): [True: 6.67k, False: 53.3k]
  |  Branch (2572:48): [True: 6.67k, False: 46.6k]
  |  Branch (2572:69): [True: 6.67k, False: 40.0k]
  |  Branch (2572:90): [True: 6.67k, False: 33.3k]
  ------------------
 2573|       |
 2574|  60.0k|            const int bufSize = 256;
 2575|  60.0k|            char buf[bufSize];
 2576|       |
 2577|  60.0k|            if (!logicalOp) {
  ------------------
  |  Branch (2577:17): [True: 40.0k, False: 20.0k]
  ------------------
 2578|   360k|                for (size_t j = 0; j < sizeof(floatTypes)/sizeof(floatTypes[0]); ++j) {
  ------------------
  |  Branch (2578:36): [True: 320k, False: 40.0k]
  ------------------
 2579|   320k|                    snprintf(buf, bufSize, op, floatTypes[j], floatTypes[j]);
 2580|   320k|                    commonBuiltins.append(buf);
 2581|   320k|                }
 2582|  40.0k|                if (profile != EEsProfile && version >= 400) {
  ------------------
  |  Branch (2582:21): [True: 19.2k, False: 20.7k]
  |  Branch (2582:46): [True: 18.9k, False: 378]
  ------------------
 2583|  94.5k|                    for (size_t j = 0; j < sizeof(doubleTypes)/sizeof(doubleTypes[0]); ++j) {
  ------------------
  |  Branch (2583:40): [True: 75.6k, False: 18.9k]
  ------------------
 2584|  75.6k|                        snprintf(buf, bufSize, op, doubleTypes[j], doubleTypes[j]);
 2585|  75.6k|                        commonBuiltins.append(buf);
 2586|  75.6k|                    }
 2587|  18.9k|                }
 2588|  40.0k|            }
 2589|  60.0k|            if (!mathOp) {
  ------------------
  |  Branch (2589:17): [True: 33.3k, False: 26.6k]
  ------------------
 2590|   166k|                for (size_t j = 0; j < sizeof(boolTypes)/sizeof(boolTypes[0]); ++j) {
  ------------------
  |  Branch (2590:36): [True: 133k, False: 33.3k]
  ------------------
 2591|   133k|                    snprintf(buf, bufSize, op, boolTypes[j], boolTypes[j]);
 2592|   133k|                    commonBuiltins.append(buf);
 2593|   133k|                }
 2594|  33.3k|            }
 2595|  1.98M|            for (size_t j = 0; j < sizeof(intTypes)/sizeof(intTypes[0]); ++j) {
  ------------------
  |  Branch (2595:32): [True: 1.92M, False: 60.0k]
  ------------------
 2596|  1.92M|                snprintf(buf, bufSize, op, intTypes[j], intTypes[j]);
 2597|  1.92M|                commonBuiltins.append(buf);
 2598|  1.92M|            }
 2599|  60.0k|            snprintf(buf, bufSize, op, "vector", "vector");
 2600|  60.0k|            commonBuiltins.append(buf);
 2601|  60.0k|        }
 2602|       |
 2603|    953|        stageBuiltins[EShLangCompute].append(
 2604|    953|            "void subgroupMemoryBarrierShared();"
 2605|       |
 2606|    953|            "\n"
 2607|    953|            );
 2608|    953|        stageBuiltins[EShLangMesh].append(
 2609|    953|            "void subgroupMemoryBarrierShared();"
 2610|    953|            "\n"
 2611|    953|            );
 2612|    953|        stageBuiltins[EShLangTask].append(
 2613|    953|            "void subgroupMemoryBarrierShared();"
 2614|    953|            "\n"
 2615|    953|            );
 2616|    953|    }
 2617|       |
 2618|       |    // GL_EXT_shader_quad_control
 2619|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (2619:10): [True: 654, False: 459]
  |  Branch (2619:35): [True: 494, False: 160]
  ------------------
 2620|    953|        (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (2620:10): [True: 459, False: 160]
  |  Branch (2620:35): [True: 459, False: 0]
  ------------------
 2621|    953|        commonBuiltins.append(
 2622|    953|            "bool subgroupQuadAll(bool);\n"
 2623|    953|            "bool subgroupQuadAny(bool);\n"
 2624|    953|            );
 2625|    953|    }
 2626|       |
 2627|  1.11k|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (2627:9): [True: 459, False: 654]
  |  Branch (2627:34): [True: 1, False: 458]
  ------------------
 2628|      1|        commonBuiltins.append(
 2629|      1|            "bool anyInvocation(bool);"
 2630|      1|            "bool allInvocations(bool);"
 2631|      1|            "bool allInvocationsEqual(bool);"
 2632|       |
 2633|      1|            "\n");
 2634|      1|    }
 2635|       |
 2636|       |    // GL_AMD_shader_ballot
 2637|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (2637:9): [True: 459, False: 654]
  |  Branch (2637:34): [True: 444, False: 15]
  ------------------
 2638|    444|        commonBuiltins.append(
 2639|    444|            "float minInvocationsAMD(float);"
 2640|    444|            "vec2  minInvocationsAMD(vec2);"
 2641|    444|            "vec3  minInvocationsAMD(vec3);"
 2642|    444|            "vec4  minInvocationsAMD(vec4);"
 2643|       |
 2644|    444|            "int   minInvocationsAMD(int);"
 2645|    444|            "ivec2 minInvocationsAMD(ivec2);"
 2646|    444|            "ivec3 minInvocationsAMD(ivec3);"
 2647|    444|            "ivec4 minInvocationsAMD(ivec4);"
 2648|       |
 2649|    444|            "uint  minInvocationsAMD(uint);"
 2650|    444|            "uvec2 minInvocationsAMD(uvec2);"
 2651|    444|            "uvec3 minInvocationsAMD(uvec3);"
 2652|    444|            "uvec4 minInvocationsAMD(uvec4);"
 2653|       |
 2654|    444|            "double minInvocationsAMD(double);"
 2655|    444|            "dvec2  minInvocationsAMD(dvec2);"
 2656|    444|            "dvec3  minInvocationsAMD(dvec3);"
 2657|    444|            "dvec4  minInvocationsAMD(dvec4);"
 2658|       |
 2659|    444|            "int64_t minInvocationsAMD(int64_t);"
 2660|    444|            "i64vec2 minInvocationsAMD(i64vec2);"
 2661|    444|            "i64vec3 minInvocationsAMD(i64vec3);"
 2662|    444|            "i64vec4 minInvocationsAMD(i64vec4);"
 2663|       |
 2664|    444|            "uint64_t minInvocationsAMD(uint64_t);"
 2665|    444|            "u64vec2  minInvocationsAMD(u64vec2);"
 2666|    444|            "u64vec3  minInvocationsAMD(u64vec3);"
 2667|    444|            "u64vec4  minInvocationsAMD(u64vec4);"
 2668|       |
 2669|    444|            "float16_t minInvocationsAMD(float16_t);"
 2670|    444|            "f16vec2   minInvocationsAMD(f16vec2);"
 2671|    444|            "f16vec3   minInvocationsAMD(f16vec3);"
 2672|    444|            "f16vec4   minInvocationsAMD(f16vec4);"
 2673|       |
 2674|    444|            "int16_t minInvocationsAMD(int16_t);"
 2675|    444|            "i16vec2 minInvocationsAMD(i16vec2);"
 2676|    444|            "i16vec3 minInvocationsAMD(i16vec3);"
 2677|    444|            "i16vec4 minInvocationsAMD(i16vec4);"
 2678|       |
 2679|    444|            "uint16_t minInvocationsAMD(uint16_t);"
 2680|    444|            "u16vec2  minInvocationsAMD(u16vec2);"
 2681|    444|            "u16vec3  minInvocationsAMD(u16vec3);"
 2682|    444|            "u16vec4  minInvocationsAMD(u16vec4);"
 2683|       |
 2684|    444|            "float minInvocationsInclusiveScanAMD(float);"
 2685|    444|            "vec2  minInvocationsInclusiveScanAMD(vec2);"
 2686|    444|            "vec3  minInvocationsInclusiveScanAMD(vec3);"
 2687|    444|            "vec4  minInvocationsInclusiveScanAMD(vec4);"
 2688|       |
 2689|    444|            "int   minInvocationsInclusiveScanAMD(int);"
 2690|    444|            "ivec2 minInvocationsInclusiveScanAMD(ivec2);"
 2691|    444|            "ivec3 minInvocationsInclusiveScanAMD(ivec3);"
 2692|    444|            "ivec4 minInvocationsInclusiveScanAMD(ivec4);"
 2693|       |
 2694|    444|            "uint  minInvocationsInclusiveScanAMD(uint);"
 2695|    444|            "uvec2 minInvocationsInclusiveScanAMD(uvec2);"
 2696|    444|            "uvec3 minInvocationsInclusiveScanAMD(uvec3);"
 2697|    444|            "uvec4 minInvocationsInclusiveScanAMD(uvec4);"
 2698|       |
 2699|    444|            "double minInvocationsInclusiveScanAMD(double);"
 2700|    444|            "dvec2  minInvocationsInclusiveScanAMD(dvec2);"
 2701|    444|            "dvec3  minInvocationsInclusiveScanAMD(dvec3);"
 2702|    444|            "dvec4  minInvocationsInclusiveScanAMD(dvec4);"
 2703|       |
 2704|    444|            "int64_t minInvocationsInclusiveScanAMD(int64_t);"
 2705|    444|            "i64vec2 minInvocationsInclusiveScanAMD(i64vec2);"
 2706|    444|            "i64vec3 minInvocationsInclusiveScanAMD(i64vec3);"
 2707|    444|            "i64vec4 minInvocationsInclusiveScanAMD(i64vec4);"
 2708|       |
 2709|    444|            "uint64_t minInvocationsInclusiveScanAMD(uint64_t);"
 2710|    444|            "u64vec2  minInvocationsInclusiveScanAMD(u64vec2);"
 2711|    444|            "u64vec3  minInvocationsInclusiveScanAMD(u64vec3);"
 2712|    444|            "u64vec4  minInvocationsInclusiveScanAMD(u64vec4);"
 2713|       |
 2714|    444|            "float16_t minInvocationsInclusiveScanAMD(float16_t);"
 2715|    444|            "f16vec2   minInvocationsInclusiveScanAMD(f16vec2);"
 2716|    444|            "f16vec3   minInvocationsInclusiveScanAMD(f16vec3);"
 2717|    444|            "f16vec4   minInvocationsInclusiveScanAMD(f16vec4);"
 2718|       |
 2719|    444|            "int16_t minInvocationsInclusiveScanAMD(int16_t);"
 2720|    444|            "i16vec2 minInvocationsInclusiveScanAMD(i16vec2);"
 2721|    444|            "i16vec3 minInvocationsInclusiveScanAMD(i16vec3);"
 2722|    444|            "i16vec4 minInvocationsInclusiveScanAMD(i16vec4);"
 2723|       |
 2724|    444|            "uint16_t minInvocationsInclusiveScanAMD(uint16_t);"
 2725|    444|            "u16vec2  minInvocationsInclusiveScanAMD(u16vec2);"
 2726|    444|            "u16vec3  minInvocationsInclusiveScanAMD(u16vec3);"
 2727|    444|            "u16vec4  minInvocationsInclusiveScanAMD(u16vec4);"
 2728|       |
 2729|    444|            "float minInvocationsExclusiveScanAMD(float);"
 2730|    444|            "vec2  minInvocationsExclusiveScanAMD(vec2);"
 2731|    444|            "vec3  minInvocationsExclusiveScanAMD(vec3);"
 2732|    444|            "vec4  minInvocationsExclusiveScanAMD(vec4);"
 2733|       |
 2734|    444|            "int   minInvocationsExclusiveScanAMD(int);"
 2735|    444|            "ivec2 minInvocationsExclusiveScanAMD(ivec2);"
 2736|    444|            "ivec3 minInvocationsExclusiveScanAMD(ivec3);"
 2737|    444|            "ivec4 minInvocationsExclusiveScanAMD(ivec4);"
 2738|       |
 2739|    444|            "uint  minInvocationsExclusiveScanAMD(uint);"
 2740|    444|            "uvec2 minInvocationsExclusiveScanAMD(uvec2);"
 2741|    444|            "uvec3 minInvocationsExclusiveScanAMD(uvec3);"
 2742|    444|            "uvec4 minInvocationsExclusiveScanAMD(uvec4);"
 2743|       |
 2744|    444|            "double minInvocationsExclusiveScanAMD(double);"
 2745|    444|            "dvec2  minInvocationsExclusiveScanAMD(dvec2);"
 2746|    444|            "dvec3  minInvocationsExclusiveScanAMD(dvec3);"
 2747|    444|            "dvec4  minInvocationsExclusiveScanAMD(dvec4);"
 2748|       |
 2749|    444|            "int64_t minInvocationsExclusiveScanAMD(int64_t);"
 2750|    444|            "i64vec2 minInvocationsExclusiveScanAMD(i64vec2);"
 2751|    444|            "i64vec3 minInvocationsExclusiveScanAMD(i64vec3);"
 2752|    444|            "i64vec4 minInvocationsExclusiveScanAMD(i64vec4);"
 2753|       |
 2754|    444|            "uint64_t minInvocationsExclusiveScanAMD(uint64_t);"
 2755|    444|            "u64vec2  minInvocationsExclusiveScanAMD(u64vec2);"
 2756|    444|            "u64vec3  minInvocationsExclusiveScanAMD(u64vec3);"
 2757|    444|            "u64vec4  minInvocationsExclusiveScanAMD(u64vec4);"
 2758|       |
 2759|    444|            "float16_t minInvocationsExclusiveScanAMD(float16_t);"
 2760|    444|            "f16vec2   minInvocationsExclusiveScanAMD(f16vec2);"
 2761|    444|            "f16vec3   minInvocationsExclusiveScanAMD(f16vec3);"
 2762|    444|            "f16vec4   minInvocationsExclusiveScanAMD(f16vec4);"
 2763|       |
 2764|    444|            "int16_t minInvocationsExclusiveScanAMD(int16_t);"
 2765|    444|            "i16vec2 minInvocationsExclusiveScanAMD(i16vec2);"
 2766|    444|            "i16vec3 minInvocationsExclusiveScanAMD(i16vec3);"
 2767|    444|            "i16vec4 minInvocationsExclusiveScanAMD(i16vec4);"
 2768|       |
 2769|    444|            "uint16_t minInvocationsExclusiveScanAMD(uint16_t);"
 2770|    444|            "u16vec2  minInvocationsExclusiveScanAMD(u16vec2);"
 2771|    444|            "u16vec3  minInvocationsExclusiveScanAMD(u16vec3);"
 2772|    444|            "u16vec4  minInvocationsExclusiveScanAMD(u16vec4);"
 2773|       |
 2774|    444|            "float maxInvocationsAMD(float);"
 2775|    444|            "vec2  maxInvocationsAMD(vec2);"
 2776|    444|            "vec3  maxInvocationsAMD(vec3);"
 2777|    444|            "vec4  maxInvocationsAMD(vec4);"
 2778|       |
 2779|    444|            "int   maxInvocationsAMD(int);"
 2780|    444|            "ivec2 maxInvocationsAMD(ivec2);"
 2781|    444|            "ivec3 maxInvocationsAMD(ivec3);"
 2782|    444|            "ivec4 maxInvocationsAMD(ivec4);"
 2783|       |
 2784|    444|            "uint  maxInvocationsAMD(uint);"
 2785|    444|            "uvec2 maxInvocationsAMD(uvec2);"
 2786|    444|            "uvec3 maxInvocationsAMD(uvec3);"
 2787|    444|            "uvec4 maxInvocationsAMD(uvec4);"
 2788|       |
 2789|    444|            "double maxInvocationsAMD(double);"
 2790|    444|            "dvec2  maxInvocationsAMD(dvec2);"
 2791|    444|            "dvec3  maxInvocationsAMD(dvec3);"
 2792|    444|            "dvec4  maxInvocationsAMD(dvec4);"
 2793|       |
 2794|    444|            "int64_t maxInvocationsAMD(int64_t);"
 2795|    444|            "i64vec2 maxInvocationsAMD(i64vec2);"
 2796|    444|            "i64vec3 maxInvocationsAMD(i64vec3);"
 2797|    444|            "i64vec4 maxInvocationsAMD(i64vec4);"
 2798|       |
 2799|    444|            "uint64_t maxInvocationsAMD(uint64_t);"
 2800|    444|            "u64vec2  maxInvocationsAMD(u64vec2);"
 2801|    444|            "u64vec3  maxInvocationsAMD(u64vec3);"
 2802|    444|            "u64vec4  maxInvocationsAMD(u64vec4);"
 2803|       |
 2804|    444|            "float16_t maxInvocationsAMD(float16_t);"
 2805|    444|            "f16vec2   maxInvocationsAMD(f16vec2);"
 2806|    444|            "f16vec3   maxInvocationsAMD(f16vec3);"
 2807|    444|            "f16vec4   maxInvocationsAMD(f16vec4);"
 2808|       |
 2809|    444|            "int16_t maxInvocationsAMD(int16_t);"
 2810|    444|            "i16vec2 maxInvocationsAMD(i16vec2);"
 2811|    444|            "i16vec3 maxInvocationsAMD(i16vec3);"
 2812|    444|            "i16vec4 maxInvocationsAMD(i16vec4);"
 2813|       |
 2814|    444|            "uint16_t maxInvocationsAMD(uint16_t);"
 2815|    444|            "u16vec2  maxInvocationsAMD(u16vec2);"
 2816|    444|            "u16vec3  maxInvocationsAMD(u16vec3);"
 2817|    444|            "u16vec4  maxInvocationsAMD(u16vec4);"
 2818|       |
 2819|    444|            "float maxInvocationsInclusiveScanAMD(float);"
 2820|    444|            "vec2  maxInvocationsInclusiveScanAMD(vec2);"
 2821|    444|            "vec3  maxInvocationsInclusiveScanAMD(vec3);"
 2822|    444|            "vec4  maxInvocationsInclusiveScanAMD(vec4);"
 2823|       |
 2824|    444|            "int   maxInvocationsInclusiveScanAMD(int);"
 2825|    444|            "ivec2 maxInvocationsInclusiveScanAMD(ivec2);"
 2826|    444|            "ivec3 maxInvocationsInclusiveScanAMD(ivec3);"
 2827|    444|            "ivec4 maxInvocationsInclusiveScanAMD(ivec4);"
 2828|       |
 2829|    444|            "uint  maxInvocationsInclusiveScanAMD(uint);"
 2830|    444|            "uvec2 maxInvocationsInclusiveScanAMD(uvec2);"
 2831|    444|            "uvec3 maxInvocationsInclusiveScanAMD(uvec3);"
 2832|    444|            "uvec4 maxInvocationsInclusiveScanAMD(uvec4);"
 2833|       |
 2834|    444|            "double maxInvocationsInclusiveScanAMD(double);"
 2835|    444|            "dvec2  maxInvocationsInclusiveScanAMD(dvec2);"
 2836|    444|            "dvec3  maxInvocationsInclusiveScanAMD(dvec3);"
 2837|    444|            "dvec4  maxInvocationsInclusiveScanAMD(dvec4);"
 2838|       |
 2839|    444|            "int64_t maxInvocationsInclusiveScanAMD(int64_t);"
 2840|    444|            "i64vec2 maxInvocationsInclusiveScanAMD(i64vec2);"
 2841|    444|            "i64vec3 maxInvocationsInclusiveScanAMD(i64vec3);"
 2842|    444|            "i64vec4 maxInvocationsInclusiveScanAMD(i64vec4);"
 2843|       |
 2844|    444|            "uint64_t maxInvocationsInclusiveScanAMD(uint64_t);"
 2845|    444|            "u64vec2  maxInvocationsInclusiveScanAMD(u64vec2);"
 2846|    444|            "u64vec3  maxInvocationsInclusiveScanAMD(u64vec3);"
 2847|    444|            "u64vec4  maxInvocationsInclusiveScanAMD(u64vec4);"
 2848|       |
 2849|    444|            "float16_t maxInvocationsInclusiveScanAMD(float16_t);"
 2850|    444|            "f16vec2   maxInvocationsInclusiveScanAMD(f16vec2);"
 2851|    444|            "f16vec3   maxInvocationsInclusiveScanAMD(f16vec3);"
 2852|    444|            "f16vec4   maxInvocationsInclusiveScanAMD(f16vec4);"
 2853|       |
 2854|    444|            "int16_t maxInvocationsInclusiveScanAMD(int16_t);"
 2855|    444|            "i16vec2 maxInvocationsInclusiveScanAMD(i16vec2);"
 2856|    444|            "i16vec3 maxInvocationsInclusiveScanAMD(i16vec3);"
 2857|    444|            "i16vec4 maxInvocationsInclusiveScanAMD(i16vec4);"
 2858|       |
 2859|    444|            "uint16_t maxInvocationsInclusiveScanAMD(uint16_t);"
 2860|    444|            "u16vec2  maxInvocationsInclusiveScanAMD(u16vec2);"
 2861|    444|            "u16vec3  maxInvocationsInclusiveScanAMD(u16vec3);"
 2862|    444|            "u16vec4  maxInvocationsInclusiveScanAMD(u16vec4);"
 2863|       |
 2864|    444|            "float maxInvocationsExclusiveScanAMD(float);"
 2865|    444|            "vec2  maxInvocationsExclusiveScanAMD(vec2);"
 2866|    444|            "vec3  maxInvocationsExclusiveScanAMD(vec3);"
 2867|    444|            "vec4  maxInvocationsExclusiveScanAMD(vec4);"
 2868|       |
 2869|    444|            "int   maxInvocationsExclusiveScanAMD(int);"
 2870|    444|            "ivec2 maxInvocationsExclusiveScanAMD(ivec2);"
 2871|    444|            "ivec3 maxInvocationsExclusiveScanAMD(ivec3);"
 2872|    444|            "ivec4 maxInvocationsExclusiveScanAMD(ivec4);"
 2873|       |
 2874|    444|            "uint  maxInvocationsExclusiveScanAMD(uint);"
 2875|    444|            "uvec2 maxInvocationsExclusiveScanAMD(uvec2);"
 2876|    444|            "uvec3 maxInvocationsExclusiveScanAMD(uvec3);"
 2877|    444|            "uvec4 maxInvocationsExclusiveScanAMD(uvec4);"
 2878|       |
 2879|    444|            "double maxInvocationsExclusiveScanAMD(double);"
 2880|    444|            "dvec2  maxInvocationsExclusiveScanAMD(dvec2);"
 2881|    444|            "dvec3  maxInvocationsExclusiveScanAMD(dvec3);"
 2882|    444|            "dvec4  maxInvocationsExclusiveScanAMD(dvec4);"
 2883|       |
 2884|    444|            "int64_t maxInvocationsExclusiveScanAMD(int64_t);"
 2885|    444|            "i64vec2 maxInvocationsExclusiveScanAMD(i64vec2);"
 2886|    444|            "i64vec3 maxInvocationsExclusiveScanAMD(i64vec3);"
 2887|    444|            "i64vec4 maxInvocationsExclusiveScanAMD(i64vec4);"
 2888|       |
 2889|    444|            "uint64_t maxInvocationsExclusiveScanAMD(uint64_t);"
 2890|    444|            "u64vec2  maxInvocationsExclusiveScanAMD(u64vec2);"
 2891|    444|            "u64vec3  maxInvocationsExclusiveScanAMD(u64vec3);"
 2892|    444|            "u64vec4  maxInvocationsExclusiveScanAMD(u64vec4);"
 2893|       |
 2894|    444|            "float16_t maxInvocationsExclusiveScanAMD(float16_t);"
 2895|    444|            "f16vec2   maxInvocationsExclusiveScanAMD(f16vec2);"
 2896|    444|            "f16vec3   maxInvocationsExclusiveScanAMD(f16vec3);"
 2897|    444|            "f16vec4   maxInvocationsExclusiveScanAMD(f16vec4);"
 2898|       |
 2899|    444|            "int16_t maxInvocationsExclusiveScanAMD(int16_t);"
 2900|    444|            "i16vec2 maxInvocationsExclusiveScanAMD(i16vec2);"
 2901|    444|            "i16vec3 maxInvocationsExclusiveScanAMD(i16vec3);"
 2902|    444|            "i16vec4 maxInvocationsExclusiveScanAMD(i16vec4);"
 2903|       |
 2904|    444|            "uint16_t maxInvocationsExclusiveScanAMD(uint16_t);"
 2905|    444|            "u16vec2  maxInvocationsExclusiveScanAMD(u16vec2);"
 2906|    444|            "u16vec3  maxInvocationsExclusiveScanAMD(u16vec3);"
 2907|    444|            "u16vec4  maxInvocationsExclusiveScanAMD(u16vec4);"
 2908|       |
 2909|    444|            "float addInvocationsAMD(float);"
 2910|    444|            "vec2  addInvocationsAMD(vec2);"
 2911|    444|            "vec3  addInvocationsAMD(vec3);"
 2912|    444|            "vec4  addInvocationsAMD(vec4);"
 2913|       |
 2914|    444|            "int   addInvocationsAMD(int);"
 2915|    444|            "ivec2 addInvocationsAMD(ivec2);"
 2916|    444|            "ivec3 addInvocationsAMD(ivec3);"
 2917|    444|            "ivec4 addInvocationsAMD(ivec4);"
 2918|       |
 2919|    444|            "uint  addInvocationsAMD(uint);"
 2920|    444|            "uvec2 addInvocationsAMD(uvec2);"
 2921|    444|            "uvec3 addInvocationsAMD(uvec3);"
 2922|    444|            "uvec4 addInvocationsAMD(uvec4);"
 2923|       |
 2924|    444|            "double  addInvocationsAMD(double);"
 2925|    444|            "dvec2   addInvocationsAMD(dvec2);"
 2926|    444|            "dvec3   addInvocationsAMD(dvec3);"
 2927|    444|            "dvec4   addInvocationsAMD(dvec4);"
 2928|       |
 2929|    444|            "int64_t addInvocationsAMD(int64_t);"
 2930|    444|            "i64vec2 addInvocationsAMD(i64vec2);"
 2931|    444|            "i64vec3 addInvocationsAMD(i64vec3);"
 2932|    444|            "i64vec4 addInvocationsAMD(i64vec4);"
 2933|       |
 2934|    444|            "uint64_t addInvocationsAMD(uint64_t);"
 2935|    444|            "u64vec2  addInvocationsAMD(u64vec2);"
 2936|    444|            "u64vec3  addInvocationsAMD(u64vec3);"
 2937|    444|            "u64vec4  addInvocationsAMD(u64vec4);"
 2938|       |
 2939|    444|            "float16_t addInvocationsAMD(float16_t);"
 2940|    444|            "f16vec2   addInvocationsAMD(f16vec2);"
 2941|    444|            "f16vec3   addInvocationsAMD(f16vec3);"
 2942|    444|            "f16vec4   addInvocationsAMD(f16vec4);"
 2943|       |
 2944|    444|            "int16_t addInvocationsAMD(int16_t);"
 2945|    444|            "i16vec2 addInvocationsAMD(i16vec2);"
 2946|    444|            "i16vec3 addInvocationsAMD(i16vec3);"
 2947|    444|            "i16vec4 addInvocationsAMD(i16vec4);"
 2948|       |
 2949|    444|            "uint16_t addInvocationsAMD(uint16_t);"
 2950|    444|            "u16vec2  addInvocationsAMD(u16vec2);"
 2951|    444|            "u16vec3  addInvocationsAMD(u16vec3);"
 2952|    444|            "u16vec4  addInvocationsAMD(u16vec4);"
 2953|       |
 2954|    444|            "float addInvocationsInclusiveScanAMD(float);"
 2955|    444|            "vec2  addInvocationsInclusiveScanAMD(vec2);"
 2956|    444|            "vec3  addInvocationsInclusiveScanAMD(vec3);"
 2957|    444|            "vec4  addInvocationsInclusiveScanAMD(vec4);"
 2958|       |
 2959|    444|            "int   addInvocationsInclusiveScanAMD(int);"
 2960|    444|            "ivec2 addInvocationsInclusiveScanAMD(ivec2);"
 2961|    444|            "ivec3 addInvocationsInclusiveScanAMD(ivec3);"
 2962|    444|            "ivec4 addInvocationsInclusiveScanAMD(ivec4);"
 2963|       |
 2964|    444|            "uint  addInvocationsInclusiveScanAMD(uint);"
 2965|    444|            "uvec2 addInvocationsInclusiveScanAMD(uvec2);"
 2966|    444|            "uvec3 addInvocationsInclusiveScanAMD(uvec3);"
 2967|    444|            "uvec4 addInvocationsInclusiveScanAMD(uvec4);"
 2968|       |
 2969|    444|            "double  addInvocationsInclusiveScanAMD(double);"
 2970|    444|            "dvec2   addInvocationsInclusiveScanAMD(dvec2);"
 2971|    444|            "dvec3   addInvocationsInclusiveScanAMD(dvec3);"
 2972|    444|            "dvec4   addInvocationsInclusiveScanAMD(dvec4);"
 2973|       |
 2974|    444|            "int64_t addInvocationsInclusiveScanAMD(int64_t);"
 2975|    444|            "i64vec2 addInvocationsInclusiveScanAMD(i64vec2);"
 2976|    444|            "i64vec3 addInvocationsInclusiveScanAMD(i64vec3);"
 2977|    444|            "i64vec4 addInvocationsInclusiveScanAMD(i64vec4);"
 2978|       |
 2979|    444|            "uint64_t addInvocationsInclusiveScanAMD(uint64_t);"
 2980|    444|            "u64vec2  addInvocationsInclusiveScanAMD(u64vec2);"
 2981|    444|            "u64vec3  addInvocationsInclusiveScanAMD(u64vec3);"
 2982|    444|            "u64vec4  addInvocationsInclusiveScanAMD(u64vec4);"
 2983|       |
 2984|    444|            "float16_t addInvocationsInclusiveScanAMD(float16_t);"
 2985|    444|            "f16vec2   addInvocationsInclusiveScanAMD(f16vec2);"
 2986|    444|            "f16vec3   addInvocationsInclusiveScanAMD(f16vec3);"
 2987|    444|            "f16vec4   addInvocationsInclusiveScanAMD(f16vec4);"
 2988|       |
 2989|    444|            "int16_t addInvocationsInclusiveScanAMD(int16_t);"
 2990|    444|            "i16vec2 addInvocationsInclusiveScanAMD(i16vec2);"
 2991|    444|            "i16vec3 addInvocationsInclusiveScanAMD(i16vec3);"
 2992|    444|            "i16vec4 addInvocationsInclusiveScanAMD(i16vec4);"
 2993|       |
 2994|    444|            "uint16_t addInvocationsInclusiveScanAMD(uint16_t);"
 2995|    444|            "u16vec2  addInvocationsInclusiveScanAMD(u16vec2);"
 2996|    444|            "u16vec3  addInvocationsInclusiveScanAMD(u16vec3);"
 2997|    444|            "u16vec4  addInvocationsInclusiveScanAMD(u16vec4);"
 2998|       |
 2999|    444|            "float addInvocationsExclusiveScanAMD(float);"
 3000|    444|            "vec2  addInvocationsExclusiveScanAMD(vec2);"
 3001|    444|            "vec3  addInvocationsExclusiveScanAMD(vec3);"
 3002|    444|            "vec4  addInvocationsExclusiveScanAMD(vec4);"
 3003|       |
 3004|    444|            "int   addInvocationsExclusiveScanAMD(int);"
 3005|    444|            "ivec2 addInvocationsExclusiveScanAMD(ivec2);"
 3006|    444|            "ivec3 addInvocationsExclusiveScanAMD(ivec3);"
 3007|    444|            "ivec4 addInvocationsExclusiveScanAMD(ivec4);"
 3008|       |
 3009|    444|            "uint  addInvocationsExclusiveScanAMD(uint);"
 3010|    444|            "uvec2 addInvocationsExclusiveScanAMD(uvec2);"
 3011|    444|            "uvec3 addInvocationsExclusiveScanAMD(uvec3);"
 3012|    444|            "uvec4 addInvocationsExclusiveScanAMD(uvec4);"
 3013|       |
 3014|    444|            "double  addInvocationsExclusiveScanAMD(double);"
 3015|    444|            "dvec2   addInvocationsExclusiveScanAMD(dvec2);"
 3016|    444|            "dvec3   addInvocationsExclusiveScanAMD(dvec3);"
 3017|    444|            "dvec4   addInvocationsExclusiveScanAMD(dvec4);"
 3018|       |
 3019|    444|            "int64_t addInvocationsExclusiveScanAMD(int64_t);"
 3020|    444|            "i64vec2 addInvocationsExclusiveScanAMD(i64vec2);"
 3021|    444|            "i64vec3 addInvocationsExclusiveScanAMD(i64vec3);"
 3022|    444|            "i64vec4 addInvocationsExclusiveScanAMD(i64vec4);"
 3023|       |
 3024|    444|            "uint64_t addInvocationsExclusiveScanAMD(uint64_t);"
 3025|    444|            "u64vec2  addInvocationsExclusiveScanAMD(u64vec2);"
 3026|    444|            "u64vec3  addInvocationsExclusiveScanAMD(u64vec3);"
 3027|    444|            "u64vec4  addInvocationsExclusiveScanAMD(u64vec4);"
 3028|       |
 3029|    444|            "float16_t addInvocationsExclusiveScanAMD(float16_t);"
 3030|    444|            "f16vec2   addInvocationsExclusiveScanAMD(f16vec2);"
 3031|    444|            "f16vec3   addInvocationsExclusiveScanAMD(f16vec3);"
 3032|    444|            "f16vec4   addInvocationsExclusiveScanAMD(f16vec4);"
 3033|       |
 3034|    444|            "int16_t addInvocationsExclusiveScanAMD(int16_t);"
 3035|    444|            "i16vec2 addInvocationsExclusiveScanAMD(i16vec2);"
 3036|    444|            "i16vec3 addInvocationsExclusiveScanAMD(i16vec3);"
 3037|    444|            "i16vec4 addInvocationsExclusiveScanAMD(i16vec4);"
 3038|       |
 3039|    444|            "uint16_t addInvocationsExclusiveScanAMD(uint16_t);"
 3040|    444|            "u16vec2  addInvocationsExclusiveScanAMD(u16vec2);"
 3041|    444|            "u16vec3  addInvocationsExclusiveScanAMD(u16vec3);"
 3042|    444|            "u16vec4  addInvocationsExclusiveScanAMD(u16vec4);"
 3043|       |
 3044|    444|            "float minInvocationsNonUniformAMD(float);"
 3045|    444|            "vec2  minInvocationsNonUniformAMD(vec2);"
 3046|    444|            "vec3  minInvocationsNonUniformAMD(vec3);"
 3047|    444|            "vec4  minInvocationsNonUniformAMD(vec4);"
 3048|       |
 3049|    444|            "int   minInvocationsNonUniformAMD(int);"
 3050|    444|            "ivec2 minInvocationsNonUniformAMD(ivec2);"
 3051|    444|            "ivec3 minInvocationsNonUniformAMD(ivec3);"
 3052|    444|            "ivec4 minInvocationsNonUniformAMD(ivec4);"
 3053|       |
 3054|    444|            "uint  minInvocationsNonUniformAMD(uint);"
 3055|    444|            "uvec2 minInvocationsNonUniformAMD(uvec2);"
 3056|    444|            "uvec3 minInvocationsNonUniformAMD(uvec3);"
 3057|    444|            "uvec4 minInvocationsNonUniformAMD(uvec4);"
 3058|       |
 3059|    444|            "double minInvocationsNonUniformAMD(double);"
 3060|    444|            "dvec2  minInvocationsNonUniformAMD(dvec2);"
 3061|    444|            "dvec3  minInvocationsNonUniformAMD(dvec3);"
 3062|    444|            "dvec4  minInvocationsNonUniformAMD(dvec4);"
 3063|       |
 3064|    444|            "int64_t minInvocationsNonUniformAMD(int64_t);"
 3065|    444|            "i64vec2 minInvocationsNonUniformAMD(i64vec2);"
 3066|    444|            "i64vec3 minInvocationsNonUniformAMD(i64vec3);"
 3067|    444|            "i64vec4 minInvocationsNonUniformAMD(i64vec4);"
 3068|       |
 3069|    444|            "uint64_t minInvocationsNonUniformAMD(uint64_t);"
 3070|    444|            "u64vec2  minInvocationsNonUniformAMD(u64vec2);"
 3071|    444|            "u64vec3  minInvocationsNonUniformAMD(u64vec3);"
 3072|    444|            "u64vec4  minInvocationsNonUniformAMD(u64vec4);"
 3073|       |
 3074|    444|            "float16_t minInvocationsNonUniformAMD(float16_t);"
 3075|    444|            "f16vec2   minInvocationsNonUniformAMD(f16vec2);"
 3076|    444|            "f16vec3   minInvocationsNonUniformAMD(f16vec3);"
 3077|    444|            "f16vec4   minInvocationsNonUniformAMD(f16vec4);"
 3078|       |
 3079|    444|            "int16_t minInvocationsNonUniformAMD(int16_t);"
 3080|    444|            "i16vec2 minInvocationsNonUniformAMD(i16vec2);"
 3081|    444|            "i16vec3 minInvocationsNonUniformAMD(i16vec3);"
 3082|    444|            "i16vec4 minInvocationsNonUniformAMD(i16vec4);"
 3083|       |
 3084|    444|            "uint16_t minInvocationsNonUniformAMD(uint16_t);"
 3085|    444|            "u16vec2  minInvocationsNonUniformAMD(u16vec2);"
 3086|    444|            "u16vec3  minInvocationsNonUniformAMD(u16vec3);"
 3087|    444|            "u16vec4  minInvocationsNonUniformAMD(u16vec4);"
 3088|       |
 3089|    444|            "float minInvocationsInclusiveScanNonUniformAMD(float);"
 3090|    444|            "vec2  minInvocationsInclusiveScanNonUniformAMD(vec2);"
 3091|    444|            "vec3  minInvocationsInclusiveScanNonUniformAMD(vec3);"
 3092|    444|            "vec4  minInvocationsInclusiveScanNonUniformAMD(vec4);"
 3093|       |
 3094|    444|            "int   minInvocationsInclusiveScanNonUniformAMD(int);"
 3095|    444|            "ivec2 minInvocationsInclusiveScanNonUniformAMD(ivec2);"
 3096|    444|            "ivec3 minInvocationsInclusiveScanNonUniformAMD(ivec3);"
 3097|    444|            "ivec4 minInvocationsInclusiveScanNonUniformAMD(ivec4);"
 3098|       |
 3099|    444|            "uint  minInvocationsInclusiveScanNonUniformAMD(uint);"
 3100|    444|            "uvec2 minInvocationsInclusiveScanNonUniformAMD(uvec2);"
 3101|    444|            "uvec3 minInvocationsInclusiveScanNonUniformAMD(uvec3);"
 3102|    444|            "uvec4 minInvocationsInclusiveScanNonUniformAMD(uvec4);"
 3103|       |
 3104|    444|            "double minInvocationsInclusiveScanNonUniformAMD(double);"
 3105|    444|            "dvec2  minInvocationsInclusiveScanNonUniformAMD(dvec2);"
 3106|    444|            "dvec3  minInvocationsInclusiveScanNonUniformAMD(dvec3);"
 3107|    444|            "dvec4  minInvocationsInclusiveScanNonUniformAMD(dvec4);"
 3108|       |
 3109|    444|            "int64_t minInvocationsInclusiveScanNonUniformAMD(int64_t);"
 3110|    444|            "i64vec2 minInvocationsInclusiveScanNonUniformAMD(i64vec2);"
 3111|    444|            "i64vec3 minInvocationsInclusiveScanNonUniformAMD(i64vec3);"
 3112|    444|            "i64vec4 minInvocationsInclusiveScanNonUniformAMD(i64vec4);"
 3113|       |
 3114|    444|            "uint64_t minInvocationsInclusiveScanNonUniformAMD(uint64_t);"
 3115|    444|            "u64vec2  minInvocationsInclusiveScanNonUniformAMD(u64vec2);"
 3116|    444|            "u64vec3  minInvocationsInclusiveScanNonUniformAMD(u64vec3);"
 3117|    444|            "u64vec4  minInvocationsInclusiveScanNonUniformAMD(u64vec4);"
 3118|       |
 3119|    444|            "float16_t minInvocationsInclusiveScanNonUniformAMD(float16_t);"
 3120|    444|            "f16vec2   minInvocationsInclusiveScanNonUniformAMD(f16vec2);"
 3121|    444|            "f16vec3   minInvocationsInclusiveScanNonUniformAMD(f16vec3);"
 3122|    444|            "f16vec4   minInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 3123|       |
 3124|    444|            "int16_t minInvocationsInclusiveScanNonUniformAMD(int16_t);"
 3125|    444|            "i16vec2 minInvocationsInclusiveScanNonUniformAMD(i16vec2);"
 3126|    444|            "i16vec3 minInvocationsInclusiveScanNonUniformAMD(i16vec3);"
 3127|    444|            "i16vec4 minInvocationsInclusiveScanNonUniformAMD(i16vec4);"
 3128|       |
 3129|    444|            "uint16_t minInvocationsInclusiveScanNonUniformAMD(uint16_t);"
 3130|    444|            "u16vec2  minInvocationsInclusiveScanNonUniformAMD(u16vec2);"
 3131|    444|            "u16vec3  minInvocationsInclusiveScanNonUniformAMD(u16vec3);"
 3132|    444|            "u16vec4  minInvocationsInclusiveScanNonUniformAMD(u16vec4);"
 3133|       |
 3134|    444|            "float minInvocationsExclusiveScanNonUniformAMD(float);"
 3135|    444|            "vec2  minInvocationsExclusiveScanNonUniformAMD(vec2);"
 3136|    444|            "vec3  minInvocationsExclusiveScanNonUniformAMD(vec3);"
 3137|    444|            "vec4  minInvocationsExclusiveScanNonUniformAMD(vec4);"
 3138|       |
 3139|    444|            "int   minInvocationsExclusiveScanNonUniformAMD(int);"
 3140|    444|            "ivec2 minInvocationsExclusiveScanNonUniformAMD(ivec2);"
 3141|    444|            "ivec3 minInvocationsExclusiveScanNonUniformAMD(ivec3);"
 3142|    444|            "ivec4 minInvocationsExclusiveScanNonUniformAMD(ivec4);"
 3143|       |
 3144|    444|            "uint  minInvocationsExclusiveScanNonUniformAMD(uint);"
 3145|    444|            "uvec2 minInvocationsExclusiveScanNonUniformAMD(uvec2);"
 3146|    444|            "uvec3 minInvocationsExclusiveScanNonUniformAMD(uvec3);"
 3147|    444|            "uvec4 minInvocationsExclusiveScanNonUniformAMD(uvec4);"
 3148|       |
 3149|    444|            "double minInvocationsExclusiveScanNonUniformAMD(double);"
 3150|    444|            "dvec2  minInvocationsExclusiveScanNonUniformAMD(dvec2);"
 3151|    444|            "dvec3  minInvocationsExclusiveScanNonUniformAMD(dvec3);"
 3152|    444|            "dvec4  minInvocationsExclusiveScanNonUniformAMD(dvec4);"
 3153|       |
 3154|    444|            "int64_t minInvocationsExclusiveScanNonUniformAMD(int64_t);"
 3155|    444|            "i64vec2 minInvocationsExclusiveScanNonUniformAMD(i64vec2);"
 3156|    444|            "i64vec3 minInvocationsExclusiveScanNonUniformAMD(i64vec3);"
 3157|    444|            "i64vec4 minInvocationsExclusiveScanNonUniformAMD(i64vec4);"
 3158|       |
 3159|    444|            "uint64_t minInvocationsExclusiveScanNonUniformAMD(uint64_t);"
 3160|    444|            "u64vec2  minInvocationsExclusiveScanNonUniformAMD(u64vec2);"
 3161|    444|            "u64vec3  minInvocationsExclusiveScanNonUniformAMD(u64vec3);"
 3162|    444|            "u64vec4  minInvocationsExclusiveScanNonUniformAMD(u64vec4);"
 3163|       |
 3164|    444|            "float16_t minInvocationsExclusiveScanNonUniformAMD(float16_t);"
 3165|    444|            "f16vec2   minInvocationsExclusiveScanNonUniformAMD(f16vec2);"
 3166|    444|            "f16vec3   minInvocationsExclusiveScanNonUniformAMD(f16vec3);"
 3167|    444|            "f16vec4   minInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 3168|       |
 3169|    444|            "int16_t minInvocationsExclusiveScanNonUniformAMD(int16_t);"
 3170|    444|            "i16vec2 minInvocationsExclusiveScanNonUniformAMD(i16vec2);"
 3171|    444|            "i16vec3 minInvocationsExclusiveScanNonUniformAMD(i16vec3);"
 3172|    444|            "i16vec4 minInvocationsExclusiveScanNonUniformAMD(i16vec4);"
 3173|       |
 3174|    444|            "uint16_t minInvocationsExclusiveScanNonUniformAMD(uint16_t);"
 3175|    444|            "u16vec2  minInvocationsExclusiveScanNonUniformAMD(u16vec2);"
 3176|    444|            "u16vec3  minInvocationsExclusiveScanNonUniformAMD(u16vec3);"
 3177|    444|            "u16vec4  minInvocationsExclusiveScanNonUniformAMD(u16vec4);"
 3178|       |
 3179|    444|            "float maxInvocationsNonUniformAMD(float);"
 3180|    444|            "vec2  maxInvocationsNonUniformAMD(vec2);"
 3181|    444|            "vec3  maxInvocationsNonUniformAMD(vec3);"
 3182|    444|            "vec4  maxInvocationsNonUniformAMD(vec4);"
 3183|       |
 3184|    444|            "int   maxInvocationsNonUniformAMD(int);"
 3185|    444|            "ivec2 maxInvocationsNonUniformAMD(ivec2);"
 3186|    444|            "ivec3 maxInvocationsNonUniformAMD(ivec3);"
 3187|    444|            "ivec4 maxInvocationsNonUniformAMD(ivec4);"
 3188|       |
 3189|    444|            "uint  maxInvocationsNonUniformAMD(uint);"
 3190|    444|            "uvec2 maxInvocationsNonUniformAMD(uvec2);"
 3191|    444|            "uvec3 maxInvocationsNonUniformAMD(uvec3);"
 3192|    444|            "uvec4 maxInvocationsNonUniformAMD(uvec4);"
 3193|       |
 3194|    444|            "double maxInvocationsNonUniformAMD(double);"
 3195|    444|            "dvec2  maxInvocationsNonUniformAMD(dvec2);"
 3196|    444|            "dvec3  maxInvocationsNonUniformAMD(dvec3);"
 3197|    444|            "dvec4  maxInvocationsNonUniformAMD(dvec4);"
 3198|       |
 3199|    444|            "int64_t maxInvocationsNonUniformAMD(int64_t);"
 3200|    444|            "i64vec2 maxInvocationsNonUniformAMD(i64vec2);"
 3201|    444|            "i64vec3 maxInvocationsNonUniformAMD(i64vec3);"
 3202|    444|            "i64vec4 maxInvocationsNonUniformAMD(i64vec4);"
 3203|       |
 3204|    444|            "uint64_t maxInvocationsNonUniformAMD(uint64_t);"
 3205|    444|            "u64vec2  maxInvocationsNonUniformAMD(u64vec2);"
 3206|    444|            "u64vec3  maxInvocationsNonUniformAMD(u64vec3);"
 3207|    444|            "u64vec4  maxInvocationsNonUniformAMD(u64vec4);"
 3208|       |
 3209|    444|            "float16_t maxInvocationsNonUniformAMD(float16_t);"
 3210|    444|            "f16vec2   maxInvocationsNonUniformAMD(f16vec2);"
 3211|    444|            "f16vec3   maxInvocationsNonUniformAMD(f16vec3);"
 3212|    444|            "f16vec4   maxInvocationsNonUniformAMD(f16vec4);"
 3213|       |
 3214|    444|            "int16_t maxInvocationsNonUniformAMD(int16_t);"
 3215|    444|            "i16vec2 maxInvocationsNonUniformAMD(i16vec2);"
 3216|    444|            "i16vec3 maxInvocationsNonUniformAMD(i16vec3);"
 3217|    444|            "i16vec4 maxInvocationsNonUniformAMD(i16vec4);"
 3218|       |
 3219|    444|            "uint16_t maxInvocationsNonUniformAMD(uint16_t);"
 3220|    444|            "u16vec2  maxInvocationsNonUniformAMD(u16vec2);"
 3221|    444|            "u16vec3  maxInvocationsNonUniformAMD(u16vec3);"
 3222|    444|            "u16vec4  maxInvocationsNonUniformAMD(u16vec4);"
 3223|       |
 3224|    444|            "float maxInvocationsInclusiveScanNonUniformAMD(float);"
 3225|    444|            "vec2  maxInvocationsInclusiveScanNonUniformAMD(vec2);"
 3226|    444|            "vec3  maxInvocationsInclusiveScanNonUniformAMD(vec3);"
 3227|    444|            "vec4  maxInvocationsInclusiveScanNonUniformAMD(vec4);"
 3228|       |
 3229|    444|            "int   maxInvocationsInclusiveScanNonUniformAMD(int);"
 3230|    444|            "ivec2 maxInvocationsInclusiveScanNonUniformAMD(ivec2);"
 3231|    444|            "ivec3 maxInvocationsInclusiveScanNonUniformAMD(ivec3);"
 3232|    444|            "ivec4 maxInvocationsInclusiveScanNonUniformAMD(ivec4);"
 3233|       |
 3234|    444|            "uint  maxInvocationsInclusiveScanNonUniformAMD(uint);"
 3235|    444|            "uvec2 maxInvocationsInclusiveScanNonUniformAMD(uvec2);"
 3236|    444|            "uvec3 maxInvocationsInclusiveScanNonUniformAMD(uvec3);"
 3237|    444|            "uvec4 maxInvocationsInclusiveScanNonUniformAMD(uvec4);"
 3238|       |
 3239|    444|            "double maxInvocationsInclusiveScanNonUniformAMD(double);"
 3240|    444|            "dvec2  maxInvocationsInclusiveScanNonUniformAMD(dvec2);"
 3241|    444|            "dvec3  maxInvocationsInclusiveScanNonUniformAMD(dvec3);"
 3242|    444|            "dvec4  maxInvocationsInclusiveScanNonUniformAMD(dvec4);"
 3243|       |
 3244|    444|            "int64_t maxInvocationsInclusiveScanNonUniformAMD(int64_t);"
 3245|    444|            "i64vec2 maxInvocationsInclusiveScanNonUniformAMD(i64vec2);"
 3246|    444|            "i64vec3 maxInvocationsInclusiveScanNonUniformAMD(i64vec3);"
 3247|    444|            "i64vec4 maxInvocationsInclusiveScanNonUniformAMD(i64vec4);"
 3248|       |
 3249|    444|            "uint64_t maxInvocationsInclusiveScanNonUniformAMD(uint64_t);"
 3250|    444|            "u64vec2  maxInvocationsInclusiveScanNonUniformAMD(u64vec2);"
 3251|    444|            "u64vec3  maxInvocationsInclusiveScanNonUniformAMD(u64vec3);"
 3252|    444|            "u64vec4  maxInvocationsInclusiveScanNonUniformAMD(u64vec4);"
 3253|       |
 3254|    444|            "float16_t maxInvocationsInclusiveScanNonUniformAMD(float16_t);"
 3255|    444|            "f16vec2   maxInvocationsInclusiveScanNonUniformAMD(f16vec2);"
 3256|    444|            "f16vec3   maxInvocationsInclusiveScanNonUniformAMD(f16vec3);"
 3257|    444|            "f16vec4   maxInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 3258|       |
 3259|    444|            "int16_t maxInvocationsInclusiveScanNonUniformAMD(int16_t);"
 3260|    444|            "i16vec2 maxInvocationsInclusiveScanNonUniformAMD(i16vec2);"
 3261|    444|            "i16vec3 maxInvocationsInclusiveScanNonUniformAMD(i16vec3);"
 3262|    444|            "i16vec4 maxInvocationsInclusiveScanNonUniformAMD(i16vec4);"
 3263|       |
 3264|    444|            "uint16_t maxInvocationsInclusiveScanNonUniformAMD(uint16_t);"
 3265|    444|            "u16vec2  maxInvocationsInclusiveScanNonUniformAMD(u16vec2);"
 3266|    444|            "u16vec3  maxInvocationsInclusiveScanNonUniformAMD(u16vec3);"
 3267|    444|            "u16vec4  maxInvocationsInclusiveScanNonUniformAMD(u16vec4);"
 3268|       |
 3269|    444|            "float maxInvocationsExclusiveScanNonUniformAMD(float);"
 3270|    444|            "vec2  maxInvocationsExclusiveScanNonUniformAMD(vec2);"
 3271|    444|            "vec3  maxInvocationsExclusiveScanNonUniformAMD(vec3);"
 3272|    444|            "vec4  maxInvocationsExclusiveScanNonUniformAMD(vec4);"
 3273|       |
 3274|    444|            "int   maxInvocationsExclusiveScanNonUniformAMD(int);"
 3275|    444|            "ivec2 maxInvocationsExclusiveScanNonUniformAMD(ivec2);"
 3276|    444|            "ivec3 maxInvocationsExclusiveScanNonUniformAMD(ivec3);"
 3277|    444|            "ivec4 maxInvocationsExclusiveScanNonUniformAMD(ivec4);"
 3278|       |
 3279|    444|            "uint  maxInvocationsExclusiveScanNonUniformAMD(uint);"
 3280|    444|            "uvec2 maxInvocationsExclusiveScanNonUniformAMD(uvec2);"
 3281|    444|            "uvec3 maxInvocationsExclusiveScanNonUniformAMD(uvec3);"
 3282|    444|            "uvec4 maxInvocationsExclusiveScanNonUniformAMD(uvec4);"
 3283|       |
 3284|    444|            "double maxInvocationsExclusiveScanNonUniformAMD(double);"
 3285|    444|            "dvec2  maxInvocationsExclusiveScanNonUniformAMD(dvec2);"
 3286|    444|            "dvec3  maxInvocationsExclusiveScanNonUniformAMD(dvec3);"
 3287|    444|            "dvec4  maxInvocationsExclusiveScanNonUniformAMD(dvec4);"
 3288|       |
 3289|    444|            "int64_t maxInvocationsExclusiveScanNonUniformAMD(int64_t);"
 3290|    444|            "i64vec2 maxInvocationsExclusiveScanNonUniformAMD(i64vec2);"
 3291|    444|            "i64vec3 maxInvocationsExclusiveScanNonUniformAMD(i64vec3);"
 3292|    444|            "i64vec4 maxInvocationsExclusiveScanNonUniformAMD(i64vec4);"
 3293|       |
 3294|    444|            "uint64_t maxInvocationsExclusiveScanNonUniformAMD(uint64_t);"
 3295|    444|            "u64vec2  maxInvocationsExclusiveScanNonUniformAMD(u64vec2);"
 3296|    444|            "u64vec3  maxInvocationsExclusiveScanNonUniformAMD(u64vec3);"
 3297|    444|            "u64vec4  maxInvocationsExclusiveScanNonUniformAMD(u64vec4);"
 3298|       |
 3299|    444|            "float16_t maxInvocationsExclusiveScanNonUniformAMD(float16_t);"
 3300|    444|            "f16vec2   maxInvocationsExclusiveScanNonUniformAMD(f16vec2);"
 3301|    444|            "f16vec3   maxInvocationsExclusiveScanNonUniformAMD(f16vec3);"
 3302|    444|            "f16vec4   maxInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 3303|       |
 3304|    444|            "int16_t maxInvocationsExclusiveScanNonUniformAMD(int16_t);"
 3305|    444|            "i16vec2 maxInvocationsExclusiveScanNonUniformAMD(i16vec2);"
 3306|    444|            "i16vec3 maxInvocationsExclusiveScanNonUniformAMD(i16vec3);"
 3307|    444|            "i16vec4 maxInvocationsExclusiveScanNonUniformAMD(i16vec4);"
 3308|       |
 3309|    444|            "uint16_t maxInvocationsExclusiveScanNonUniformAMD(uint16_t);"
 3310|    444|            "u16vec2  maxInvocationsExclusiveScanNonUniformAMD(u16vec2);"
 3311|    444|            "u16vec3  maxInvocationsExclusiveScanNonUniformAMD(u16vec3);"
 3312|    444|            "u16vec4  maxInvocationsExclusiveScanNonUniformAMD(u16vec4);"
 3313|       |
 3314|    444|            "float addInvocationsNonUniformAMD(float);"
 3315|    444|            "vec2  addInvocationsNonUniformAMD(vec2);"
 3316|    444|            "vec3  addInvocationsNonUniformAMD(vec3);"
 3317|    444|            "vec4  addInvocationsNonUniformAMD(vec4);"
 3318|       |
 3319|    444|            "int   addInvocationsNonUniformAMD(int);"
 3320|    444|            "ivec2 addInvocationsNonUniformAMD(ivec2);"
 3321|    444|            "ivec3 addInvocationsNonUniformAMD(ivec3);"
 3322|    444|            "ivec4 addInvocationsNonUniformAMD(ivec4);"
 3323|       |
 3324|    444|            "uint  addInvocationsNonUniformAMD(uint);"
 3325|    444|            "uvec2 addInvocationsNonUniformAMD(uvec2);"
 3326|    444|            "uvec3 addInvocationsNonUniformAMD(uvec3);"
 3327|    444|            "uvec4 addInvocationsNonUniformAMD(uvec4);"
 3328|       |
 3329|    444|            "double addInvocationsNonUniformAMD(double);"
 3330|    444|            "dvec2  addInvocationsNonUniformAMD(dvec2);"
 3331|    444|            "dvec3  addInvocationsNonUniformAMD(dvec3);"
 3332|    444|            "dvec4  addInvocationsNonUniformAMD(dvec4);"
 3333|       |
 3334|    444|            "int64_t addInvocationsNonUniformAMD(int64_t);"
 3335|    444|            "i64vec2 addInvocationsNonUniformAMD(i64vec2);"
 3336|    444|            "i64vec3 addInvocationsNonUniformAMD(i64vec3);"
 3337|    444|            "i64vec4 addInvocationsNonUniformAMD(i64vec4);"
 3338|       |
 3339|    444|            "uint64_t addInvocationsNonUniformAMD(uint64_t);"
 3340|    444|            "u64vec2  addInvocationsNonUniformAMD(u64vec2);"
 3341|    444|            "u64vec3  addInvocationsNonUniformAMD(u64vec3);"
 3342|    444|            "u64vec4  addInvocationsNonUniformAMD(u64vec4);"
 3343|       |
 3344|    444|            "float16_t addInvocationsNonUniformAMD(float16_t);"
 3345|    444|            "f16vec2   addInvocationsNonUniformAMD(f16vec2);"
 3346|    444|            "f16vec3   addInvocationsNonUniformAMD(f16vec3);"
 3347|    444|            "f16vec4   addInvocationsNonUniformAMD(f16vec4);"
 3348|       |
 3349|    444|            "int16_t addInvocationsNonUniformAMD(int16_t);"
 3350|    444|            "i16vec2 addInvocationsNonUniformAMD(i16vec2);"
 3351|    444|            "i16vec3 addInvocationsNonUniformAMD(i16vec3);"
 3352|    444|            "i16vec4 addInvocationsNonUniformAMD(i16vec4);"
 3353|       |
 3354|    444|            "uint16_t addInvocationsNonUniformAMD(uint16_t);"
 3355|    444|            "u16vec2  addInvocationsNonUniformAMD(u16vec2);"
 3356|    444|            "u16vec3  addInvocationsNonUniformAMD(u16vec3);"
 3357|    444|            "u16vec4  addInvocationsNonUniformAMD(u16vec4);"
 3358|       |
 3359|    444|            "float addInvocationsInclusiveScanNonUniformAMD(float);"
 3360|    444|            "vec2  addInvocationsInclusiveScanNonUniformAMD(vec2);"
 3361|    444|            "vec3  addInvocationsInclusiveScanNonUniformAMD(vec3);"
 3362|    444|            "vec4  addInvocationsInclusiveScanNonUniformAMD(vec4);"
 3363|       |
 3364|    444|            "int   addInvocationsInclusiveScanNonUniformAMD(int);"
 3365|    444|            "ivec2 addInvocationsInclusiveScanNonUniformAMD(ivec2);"
 3366|    444|            "ivec3 addInvocationsInclusiveScanNonUniformAMD(ivec3);"
 3367|    444|            "ivec4 addInvocationsInclusiveScanNonUniformAMD(ivec4);"
 3368|       |
 3369|    444|            "uint  addInvocationsInclusiveScanNonUniformAMD(uint);"
 3370|    444|            "uvec2 addInvocationsInclusiveScanNonUniformAMD(uvec2);"
 3371|    444|            "uvec3 addInvocationsInclusiveScanNonUniformAMD(uvec3);"
 3372|    444|            "uvec4 addInvocationsInclusiveScanNonUniformAMD(uvec4);"
 3373|       |
 3374|    444|            "double addInvocationsInclusiveScanNonUniformAMD(double);"
 3375|    444|            "dvec2  addInvocationsInclusiveScanNonUniformAMD(dvec2);"
 3376|    444|            "dvec3  addInvocationsInclusiveScanNonUniformAMD(dvec3);"
 3377|    444|            "dvec4  addInvocationsInclusiveScanNonUniformAMD(dvec4);"
 3378|       |
 3379|    444|            "int64_t addInvocationsInclusiveScanNonUniformAMD(int64_t);"
 3380|    444|            "i64vec2 addInvocationsInclusiveScanNonUniformAMD(i64vec2);"
 3381|    444|            "i64vec3 addInvocationsInclusiveScanNonUniformAMD(i64vec3);"
 3382|    444|            "i64vec4 addInvocationsInclusiveScanNonUniformAMD(i64vec4);"
 3383|       |
 3384|    444|            "uint64_t addInvocationsInclusiveScanNonUniformAMD(uint64_t);"
 3385|    444|            "u64vec2  addInvocationsInclusiveScanNonUniformAMD(u64vec2);"
 3386|    444|            "u64vec3  addInvocationsInclusiveScanNonUniformAMD(u64vec3);"
 3387|    444|            "u64vec4  addInvocationsInclusiveScanNonUniformAMD(u64vec4);"
 3388|       |
 3389|    444|            "float16_t addInvocationsInclusiveScanNonUniformAMD(float16_t);"
 3390|    444|            "f16vec2   addInvocationsInclusiveScanNonUniformAMD(f16vec2);"
 3391|    444|            "f16vec3   addInvocationsInclusiveScanNonUniformAMD(f16vec3);"
 3392|    444|            "f16vec4   addInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 3393|       |
 3394|    444|            "int16_t addInvocationsInclusiveScanNonUniformAMD(int16_t);"
 3395|    444|            "i16vec2 addInvocationsInclusiveScanNonUniformAMD(i16vec2);"
 3396|    444|            "i16vec3 addInvocationsInclusiveScanNonUniformAMD(i16vec3);"
 3397|    444|            "i16vec4 addInvocationsInclusiveScanNonUniformAMD(i16vec4);"
 3398|       |
 3399|    444|            "uint16_t addInvocationsInclusiveScanNonUniformAMD(uint16_t);"
 3400|    444|            "u16vec2  addInvocationsInclusiveScanNonUniformAMD(u16vec2);"
 3401|    444|            "u16vec3  addInvocationsInclusiveScanNonUniformAMD(u16vec3);"
 3402|    444|            "u16vec4  addInvocationsInclusiveScanNonUniformAMD(u16vec4);"
 3403|       |
 3404|    444|            "float addInvocationsExclusiveScanNonUniformAMD(float);"
 3405|    444|            "vec2  addInvocationsExclusiveScanNonUniformAMD(vec2);"
 3406|    444|            "vec3  addInvocationsExclusiveScanNonUniformAMD(vec3);"
 3407|    444|            "vec4  addInvocationsExclusiveScanNonUniformAMD(vec4);"
 3408|       |
 3409|    444|            "int   addInvocationsExclusiveScanNonUniformAMD(int);"
 3410|    444|            "ivec2 addInvocationsExclusiveScanNonUniformAMD(ivec2);"
 3411|    444|            "ivec3 addInvocationsExclusiveScanNonUniformAMD(ivec3);"
 3412|    444|            "ivec4 addInvocationsExclusiveScanNonUniformAMD(ivec4);"
 3413|       |
 3414|    444|            "uint  addInvocationsExclusiveScanNonUniformAMD(uint);"
 3415|    444|            "uvec2 addInvocationsExclusiveScanNonUniformAMD(uvec2);"
 3416|    444|            "uvec3 addInvocationsExclusiveScanNonUniformAMD(uvec3);"
 3417|    444|            "uvec4 addInvocationsExclusiveScanNonUniformAMD(uvec4);"
 3418|       |
 3419|    444|            "double addInvocationsExclusiveScanNonUniformAMD(double);"
 3420|    444|            "dvec2  addInvocationsExclusiveScanNonUniformAMD(dvec2);"
 3421|    444|            "dvec3  addInvocationsExclusiveScanNonUniformAMD(dvec3);"
 3422|    444|            "dvec4  addInvocationsExclusiveScanNonUniformAMD(dvec4);"
 3423|       |
 3424|    444|            "int64_t addInvocationsExclusiveScanNonUniformAMD(int64_t);"
 3425|    444|            "i64vec2 addInvocationsExclusiveScanNonUniformAMD(i64vec2);"
 3426|    444|            "i64vec3 addInvocationsExclusiveScanNonUniformAMD(i64vec3);"
 3427|    444|            "i64vec4 addInvocationsExclusiveScanNonUniformAMD(i64vec4);"
 3428|       |
 3429|    444|            "uint64_t addInvocationsExclusiveScanNonUniformAMD(uint64_t);"
 3430|    444|            "u64vec2  addInvocationsExclusiveScanNonUniformAMD(u64vec2);"
 3431|    444|            "u64vec3  addInvocationsExclusiveScanNonUniformAMD(u64vec3);"
 3432|    444|            "u64vec4  addInvocationsExclusiveScanNonUniformAMD(u64vec4);"
 3433|       |
 3434|    444|            "float16_t addInvocationsExclusiveScanNonUniformAMD(float16_t);"
 3435|    444|            "f16vec2   addInvocationsExclusiveScanNonUniformAMD(f16vec2);"
 3436|    444|            "f16vec3   addInvocationsExclusiveScanNonUniformAMD(f16vec3);"
 3437|    444|            "f16vec4   addInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 3438|       |
 3439|    444|            "int16_t addInvocationsExclusiveScanNonUniformAMD(int16_t);"
 3440|    444|            "i16vec2 addInvocationsExclusiveScanNonUniformAMD(i16vec2);"
 3441|    444|            "i16vec3 addInvocationsExclusiveScanNonUniformAMD(i16vec3);"
 3442|    444|            "i16vec4 addInvocationsExclusiveScanNonUniformAMD(i16vec4);"
 3443|       |
 3444|    444|            "uint16_t addInvocationsExclusiveScanNonUniformAMD(uint16_t);"
 3445|    444|            "u16vec2  addInvocationsExclusiveScanNonUniformAMD(u16vec2);"
 3446|    444|            "u16vec3  addInvocationsExclusiveScanNonUniformAMD(u16vec3);"
 3447|    444|            "u16vec4  addInvocationsExclusiveScanNonUniformAMD(u16vec4);"
 3448|       |
 3449|    444|            "float swizzleInvocationsAMD(float, uvec4);"
 3450|    444|            "vec2  swizzleInvocationsAMD(vec2,  uvec4);"
 3451|    444|            "vec3  swizzleInvocationsAMD(vec3,  uvec4);"
 3452|    444|            "vec4  swizzleInvocationsAMD(vec4,  uvec4);"
 3453|       |
 3454|    444|            "int   swizzleInvocationsAMD(int,   uvec4);"
 3455|    444|            "ivec2 swizzleInvocationsAMD(ivec2, uvec4);"
 3456|    444|            "ivec3 swizzleInvocationsAMD(ivec3, uvec4);"
 3457|    444|            "ivec4 swizzleInvocationsAMD(ivec4, uvec4);"
 3458|       |
 3459|    444|            "uint  swizzleInvocationsAMD(uint,  uvec4);"
 3460|    444|            "uvec2 swizzleInvocationsAMD(uvec2, uvec4);"
 3461|    444|            "uvec3 swizzleInvocationsAMD(uvec3, uvec4);"
 3462|    444|            "uvec4 swizzleInvocationsAMD(uvec4, uvec4);"
 3463|       |
 3464|    444|            "float swizzleInvocationsMaskedAMD(float, uvec3);"
 3465|    444|            "vec2  swizzleInvocationsMaskedAMD(vec2,  uvec3);"
 3466|    444|            "vec3  swizzleInvocationsMaskedAMD(vec3,  uvec3);"
 3467|    444|            "vec4  swizzleInvocationsMaskedAMD(vec4,  uvec3);"
 3468|       |
 3469|    444|            "int   swizzleInvocationsMaskedAMD(int,   uvec3);"
 3470|    444|            "ivec2 swizzleInvocationsMaskedAMD(ivec2, uvec3);"
 3471|    444|            "ivec3 swizzleInvocationsMaskedAMD(ivec3, uvec3);"
 3472|    444|            "ivec4 swizzleInvocationsMaskedAMD(ivec4, uvec3);"
 3473|       |
 3474|    444|            "uint  swizzleInvocationsMaskedAMD(uint,  uvec3);"
 3475|    444|            "uvec2 swizzleInvocationsMaskedAMD(uvec2, uvec3);"
 3476|    444|            "uvec3 swizzleInvocationsMaskedAMD(uvec3, uvec3);"
 3477|    444|            "uvec4 swizzleInvocationsMaskedAMD(uvec4, uvec3);"
 3478|       |
 3479|    444|            "float writeInvocationAMD(float, float, uint);"
 3480|    444|            "vec2  writeInvocationAMD(vec2,  vec2,  uint);"
 3481|    444|            "vec3  writeInvocationAMD(vec3,  vec3,  uint);"
 3482|    444|            "vec4  writeInvocationAMD(vec4,  vec4,  uint);"
 3483|       |
 3484|    444|            "int   writeInvocationAMD(int,   int,   uint);"
 3485|    444|            "ivec2 writeInvocationAMD(ivec2, ivec2, uint);"
 3486|    444|            "ivec3 writeInvocationAMD(ivec3, ivec3, uint);"
 3487|    444|            "ivec4 writeInvocationAMD(ivec4, ivec4, uint);"
 3488|       |
 3489|    444|            "uint  writeInvocationAMD(uint,  uint,  uint);"
 3490|    444|            "uvec2 writeInvocationAMD(uvec2, uvec2, uint);"
 3491|    444|            "uvec3 writeInvocationAMD(uvec3, uvec3, uint);"
 3492|    444|            "uvec4 writeInvocationAMD(uvec4, uvec4, uint);"
 3493|       |
 3494|    444|            "uint mbcntAMD(uint64_t);"
 3495|       |
 3496|    444|            "\n");
 3497|    444|    }
 3498|       |
 3499|       |    // GL_AMD_gcn_shader
 3500|  1.11k|    if (profile != EEsProfile && version >= 440) {
  ------------------
  |  Branch (3500:9): [True: 459, False: 654]
  |  Branch (3500:34): [True: 446, False: 13]
  ------------------
 3501|    446|        commonBuiltins.append(
 3502|    446|            "float cubeFaceIndexAMD(vec3);"
 3503|    446|            "vec2  cubeFaceCoordAMD(vec3);"
 3504|    446|            "uint64_t timeAMD();"
 3505|       |
 3506|    446|            "in int gl_SIMDGroupSizeAMD;"
 3507|    446|            "\n");
 3508|    446|    }
 3509|       |
 3510|       |    // GL_AMD_shader_fragment_mask
 3511|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (3511:9): [True: 459, False: 654]
  |  Branch (3511:34): [True: 444, False: 15]
  ------------------
 3512|    444|        commonBuiltins.append(
 3513|    444|            "uint fragmentMaskFetchAMD(sampler2DMS,       ivec2);"
 3514|    444|            "uint fragmentMaskFetchAMD(isampler2DMS,      ivec2);"
 3515|    444|            "uint fragmentMaskFetchAMD(usampler2DMS,      ivec2);"
 3516|       |
 3517|    444|            "uint fragmentMaskFetchAMD(sampler2DMSArray,  ivec3);"
 3518|    444|            "uint fragmentMaskFetchAMD(isampler2DMSArray, ivec3);"
 3519|    444|            "uint fragmentMaskFetchAMD(usampler2DMSArray, ivec3);"
 3520|       |
 3521|    444|            "vec4  fragmentFetchAMD(sampler2DMS,       ivec2, uint);"
 3522|    444|            "ivec4 fragmentFetchAMD(isampler2DMS,      ivec2, uint);"
 3523|    444|            "uvec4 fragmentFetchAMD(usampler2DMS,      ivec2, uint);"
 3524|       |
 3525|    444|            "vec4  fragmentFetchAMD(sampler2DMSArray,  ivec3, uint);"
 3526|    444|            "ivec4 fragmentFetchAMD(isampler2DMSArray, ivec3, uint);"
 3527|    444|            "uvec4 fragmentFetchAMD(usampler2DMSArray, ivec3, uint);"
 3528|       |
 3529|    444|            "\n");
 3530|    444|    }
 3531|       |
 3532|  1.11k|    if ((profile != EEsProfile && version >= 130) ||
  ------------------
  |  Branch (3532:10): [True: 459, False: 654]
  |  Branch (3532:35): [True: 459, False: 0]
  ------------------
 3533|    953|        (profile == EEsProfile && version >= 300)) {
  ------------------
  |  Branch (3533:10): [True: 654, False: 0]
  |  Branch (3533:35): [True: 494, False: 160]
  ------------------
 3534|    953|        commonBuiltins.append(
 3535|    953|            "uint countLeadingZeros(uint);"
 3536|    953|            "uvec2 countLeadingZeros(uvec2);"
 3537|    953|            "uvec3 countLeadingZeros(uvec3);"
 3538|    953|            "uvec4 countLeadingZeros(uvec4);"
 3539|       |
 3540|    953|            "uint countTrailingZeros(uint);"
 3541|    953|            "uvec2 countTrailingZeros(uvec2);"
 3542|    953|            "uvec3 countTrailingZeros(uvec3);"
 3543|    953|            "uvec4 countTrailingZeros(uvec4);"
 3544|       |
 3545|    953|            "uint absoluteDifference(int, int);"
 3546|    953|            "uvec2 absoluteDifference(ivec2, ivec2);"
 3547|    953|            "uvec3 absoluteDifference(ivec3, ivec3);"
 3548|    953|            "uvec4 absoluteDifference(ivec4, ivec4);"
 3549|       |
 3550|    953|            "uint16_t absoluteDifference(int16_t, int16_t);"
 3551|    953|            "u16vec2 absoluteDifference(i16vec2, i16vec2);"
 3552|    953|            "u16vec3 absoluteDifference(i16vec3, i16vec3);"
 3553|    953|            "u16vec4 absoluteDifference(i16vec4, i16vec4);"
 3554|       |
 3555|    953|            "uint64_t absoluteDifference(int64_t, int64_t);"
 3556|    953|            "u64vec2 absoluteDifference(i64vec2, i64vec2);"
 3557|    953|            "u64vec3 absoluteDifference(i64vec3, i64vec3);"
 3558|    953|            "u64vec4 absoluteDifference(i64vec4, i64vec4);"
 3559|       |
 3560|    953|            "uint absoluteDifference(uint, uint);"
 3561|    953|            "uvec2 absoluteDifference(uvec2, uvec2);"
 3562|    953|            "uvec3 absoluteDifference(uvec3, uvec3);"
 3563|    953|            "uvec4 absoluteDifference(uvec4, uvec4);"
 3564|       |
 3565|    953|            "uint16_t absoluteDifference(uint16_t, uint16_t);"
 3566|    953|            "u16vec2 absoluteDifference(u16vec2, u16vec2);"
 3567|    953|            "u16vec3 absoluteDifference(u16vec3, u16vec3);"
 3568|    953|            "u16vec4 absoluteDifference(u16vec4, u16vec4);"
 3569|       |
 3570|    953|            "uint64_t absoluteDifference(uint64_t, uint64_t);"
 3571|    953|            "u64vec2 absoluteDifference(u64vec2, u64vec2);"
 3572|    953|            "u64vec3 absoluteDifference(u64vec3, u64vec3);"
 3573|    953|            "u64vec4 absoluteDifference(u64vec4, u64vec4);"
 3574|       |
 3575|    953|            "int addSaturate(int, int);"
 3576|    953|            "ivec2 addSaturate(ivec2, ivec2);"
 3577|    953|            "ivec3 addSaturate(ivec3, ivec3);"
 3578|    953|            "ivec4 addSaturate(ivec4, ivec4);"
 3579|       |
 3580|    953|            "int16_t addSaturate(int16_t, int16_t);"
 3581|    953|            "i16vec2 addSaturate(i16vec2, i16vec2);"
 3582|    953|            "i16vec3 addSaturate(i16vec3, i16vec3);"
 3583|    953|            "i16vec4 addSaturate(i16vec4, i16vec4);"
 3584|       |
 3585|    953|            "int64_t addSaturate(int64_t, int64_t);"
 3586|    953|            "i64vec2 addSaturate(i64vec2, i64vec2);"
 3587|    953|            "i64vec3 addSaturate(i64vec3, i64vec3);"
 3588|    953|            "i64vec4 addSaturate(i64vec4, i64vec4);"
 3589|       |
 3590|    953|            "uint addSaturate(uint, uint);"
 3591|    953|            "uvec2 addSaturate(uvec2, uvec2);"
 3592|    953|            "uvec3 addSaturate(uvec3, uvec3);"
 3593|    953|            "uvec4 addSaturate(uvec4, uvec4);"
 3594|       |
 3595|    953|            "uint16_t addSaturate(uint16_t, uint16_t);"
 3596|    953|            "u16vec2 addSaturate(u16vec2, u16vec2);"
 3597|    953|            "u16vec3 addSaturate(u16vec3, u16vec3);"
 3598|    953|            "u16vec4 addSaturate(u16vec4, u16vec4);"
 3599|       |
 3600|    953|            "uint64_t addSaturate(uint64_t, uint64_t);"
 3601|    953|            "u64vec2 addSaturate(u64vec2, u64vec2);"
 3602|    953|            "u64vec3 addSaturate(u64vec3, u64vec3);"
 3603|    953|            "u64vec4 addSaturate(u64vec4, u64vec4);"
 3604|       |
 3605|    953|            "int subtractSaturate(int, int);"
 3606|    953|            "ivec2 subtractSaturate(ivec2, ivec2);"
 3607|    953|            "ivec3 subtractSaturate(ivec3, ivec3);"
 3608|    953|            "ivec4 subtractSaturate(ivec4, ivec4);"
 3609|       |
 3610|    953|            "int16_t subtractSaturate(int16_t, int16_t);"
 3611|    953|            "i16vec2 subtractSaturate(i16vec2, i16vec2);"
 3612|    953|            "i16vec3 subtractSaturate(i16vec3, i16vec3);"
 3613|    953|            "i16vec4 subtractSaturate(i16vec4, i16vec4);"
 3614|       |
 3615|    953|            "int64_t subtractSaturate(int64_t, int64_t);"
 3616|    953|            "i64vec2 subtractSaturate(i64vec2, i64vec2);"
 3617|    953|            "i64vec3 subtractSaturate(i64vec3, i64vec3);"
 3618|    953|            "i64vec4 subtractSaturate(i64vec4, i64vec4);"
 3619|       |
 3620|    953|            "uint subtractSaturate(uint, uint);"
 3621|    953|            "uvec2 subtractSaturate(uvec2, uvec2);"
 3622|    953|            "uvec3 subtractSaturate(uvec3, uvec3);"
 3623|    953|            "uvec4 subtractSaturate(uvec4, uvec4);"
 3624|       |
 3625|    953|            "uint16_t subtractSaturate(uint16_t, uint16_t);"
 3626|    953|            "u16vec2 subtractSaturate(u16vec2, u16vec2);"
 3627|    953|            "u16vec3 subtractSaturate(u16vec3, u16vec3);"
 3628|    953|            "u16vec4 subtractSaturate(u16vec4, u16vec4);"
 3629|       |
 3630|    953|            "uint64_t subtractSaturate(uint64_t, uint64_t);"
 3631|    953|            "u64vec2 subtractSaturate(u64vec2, u64vec2);"
 3632|    953|            "u64vec3 subtractSaturate(u64vec3, u64vec3);"
 3633|    953|            "u64vec4 subtractSaturate(u64vec4, u64vec4);"
 3634|       |
 3635|    953|            "int average(int, int);"
 3636|    953|            "ivec2 average(ivec2, ivec2);"
 3637|    953|            "ivec3 average(ivec3, ivec3);"
 3638|    953|            "ivec4 average(ivec4, ivec4);"
 3639|       |
 3640|    953|            "int16_t average(int16_t, int16_t);"
 3641|    953|            "i16vec2 average(i16vec2, i16vec2);"
 3642|    953|            "i16vec3 average(i16vec3, i16vec3);"
 3643|    953|            "i16vec4 average(i16vec4, i16vec4);"
 3644|       |
 3645|    953|            "int64_t average(int64_t, int64_t);"
 3646|    953|            "i64vec2 average(i64vec2, i64vec2);"
 3647|    953|            "i64vec3 average(i64vec3, i64vec3);"
 3648|    953|            "i64vec4 average(i64vec4, i64vec4);"
 3649|       |
 3650|    953|            "uint average(uint, uint);"
 3651|    953|            "uvec2 average(uvec2, uvec2);"
 3652|    953|            "uvec3 average(uvec3, uvec3);"
 3653|    953|            "uvec4 average(uvec4, uvec4);"
 3654|       |
 3655|    953|            "uint16_t average(uint16_t, uint16_t);"
 3656|    953|            "u16vec2 average(u16vec2, u16vec2);"
 3657|    953|            "u16vec3 average(u16vec3, u16vec3);"
 3658|    953|            "u16vec4 average(u16vec4, u16vec4);"
 3659|       |
 3660|    953|            "uint64_t average(uint64_t, uint64_t);"
 3661|    953|            "u64vec2 average(u64vec2, u64vec2);"
 3662|    953|            "u64vec3 average(u64vec3, u64vec3);"
 3663|    953|            "u64vec4 average(u64vec4, u64vec4);"
 3664|       |
 3665|    953|            "int averageRounded(int, int);"
 3666|    953|            "ivec2 averageRounded(ivec2, ivec2);"
 3667|    953|            "ivec3 averageRounded(ivec3, ivec3);"
 3668|    953|            "ivec4 averageRounded(ivec4, ivec4);"
 3669|       |
 3670|    953|            "int16_t averageRounded(int16_t, int16_t);"
 3671|    953|            "i16vec2 averageRounded(i16vec2, i16vec2);"
 3672|    953|            "i16vec3 averageRounded(i16vec3, i16vec3);"
 3673|    953|            "i16vec4 averageRounded(i16vec4, i16vec4);"
 3674|       |
 3675|    953|            "int64_t averageRounded(int64_t, int64_t);"
 3676|    953|            "i64vec2 averageRounded(i64vec2, i64vec2);"
 3677|    953|            "i64vec3 averageRounded(i64vec3, i64vec3);"
 3678|    953|            "i64vec4 averageRounded(i64vec4, i64vec4);"
 3679|       |
 3680|    953|            "uint averageRounded(uint, uint);"
 3681|    953|            "uvec2 averageRounded(uvec2, uvec2);"
 3682|    953|            "uvec3 averageRounded(uvec3, uvec3);"
 3683|    953|            "uvec4 averageRounded(uvec4, uvec4);"
 3684|       |
 3685|    953|            "uint16_t averageRounded(uint16_t, uint16_t);"
 3686|    953|            "u16vec2 averageRounded(u16vec2, u16vec2);"
 3687|    953|            "u16vec3 averageRounded(u16vec3, u16vec3);"
 3688|    953|            "u16vec4 averageRounded(u16vec4, u16vec4);"
 3689|       |
 3690|    953|            "uint64_t averageRounded(uint64_t, uint64_t);"
 3691|    953|            "u64vec2 averageRounded(u64vec2, u64vec2);"
 3692|    953|            "u64vec3 averageRounded(u64vec3, u64vec3);"
 3693|    953|            "u64vec4 averageRounded(u64vec4, u64vec4);"
 3694|       |
 3695|    953|            "int multiply32x16(int, int);"
 3696|    953|            "ivec2 multiply32x16(ivec2, ivec2);"
 3697|    953|            "ivec3 multiply32x16(ivec3, ivec3);"
 3698|    953|            "ivec4 multiply32x16(ivec4, ivec4);"
 3699|       |
 3700|    953|            "uint multiply32x16(uint, uint);"
 3701|    953|            "uvec2 multiply32x16(uvec2, uvec2);"
 3702|    953|            "uvec3 multiply32x16(uvec3, uvec3);"
 3703|    953|            "uvec4 multiply32x16(uvec4, uvec4);"
 3704|    953|            "\n");
 3705|    953|    }
 3706|       |
 3707|  1.11k|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (3707:10): [True: 459, False: 654]
  |  Branch (3707:35): [True: 444, False: 15]
  ------------------
 3708|    669|        (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (3708:10): [True: 654, False: 15]
  |  Branch (3708:35): [True: 3, False: 651]
  ------------------
 3709|    447|        commonBuiltins.append(
 3710|    447|            "struct gl_TextureFootprint2DNV {"
 3711|    447|                "uvec2 anchor;"
 3712|    447|                "uvec2 offset;"
 3713|    447|                "uvec2 mask;"
 3714|    447|                "uint lod;"
 3715|    447|                "uint granularity;"
 3716|    447|            "};"
 3717|       |
 3718|    447|            "struct gl_TextureFootprint3DNV {"
 3719|    447|                "uvec3 anchor;"
 3720|    447|                "uvec3 offset;"
 3721|    447|                "uvec2 mask;"
 3722|    447|                "uint lod;"
 3723|    447|                "uint granularity;"
 3724|    447|            "};"
 3725|    447|            "bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV);"
 3726|    447|            "bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV);"
 3727|    447|            "bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV, float);"
 3728|    447|            "bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV, float);"
 3729|    447|            "bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
 3730|    447|            "bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
 3731|    447|            "bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV, float);"
 3732|    447|            "bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV, float);"
 3733|    447|            "bool textureFootprintLodNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
 3734|    447|            "bool textureFootprintLodNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
 3735|    447|            "bool textureFootprintGradNV(sampler2D, vec2, vec2, vec2, int, bool, out gl_TextureFootprint2DNV);"
 3736|    447|            "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
 3737|    447|            "\n");
 3738|    447|    }
 3739|       |
 3740|  1.11k|    if ((profile == EEsProfile && version >= 300 && version < 310) ||
  ------------------
  |  Branch (3740:10): [True: 654, False: 459]
  |  Branch (3740:35): [True: 494, False: 160]
  |  Branch (3740:53): [True: 0, False: 494]
  ------------------
 3741|  1.11k|        (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
  ------------------
  |  Branch (3741:10): [True: 459, False: 654]
  |  Branch (3741:35): [True: 459, False: 0]
  |  Branch (3741:53): [True: 15, False: 444]
  ------------------
 3742|     15|        commonBuiltins.append("int mix(int, int, bool);"
 3743|     15|                              "ivec2 mix(ivec2, ivec2, bvec2);"
 3744|     15|                              "ivec3 mix(ivec3, ivec3, bvec3);"
 3745|     15|                              "ivec4 mix(ivec4, ivec4, bvec4);"
 3746|     15|                              "uint  mix(uint,  uint,  bool );"
 3747|     15|                              "uvec2 mix(uvec2, uvec2, bvec2);"
 3748|     15|                              "uvec3 mix(uvec3, uvec3, bvec3);"
 3749|     15|                              "uvec4 mix(uvec4, uvec4, bvec4);"
 3750|     15|                              "bool  mix(bool,  bool,  bool );"
 3751|     15|                              "bvec2 mix(bvec2, bvec2, bvec2);"
 3752|     15|                              "bvec3 mix(bvec3, bvec3, bvec3);"
 3753|     15|                              "bvec4 mix(bvec4, bvec4, bvec4);"
 3754|       |
 3755|     15|                              "\n");
 3756|     15|    }
 3757|       |
 3758|       |    // GL_AMD_gpu_shader_half_float/Explicit types
 3759|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (3759:10): [True: 459, False: 654]
  |  Branch (3759:35): [True: 444, False: 15]
  |  Branch (3759:55): [True: 654, False: 15]
  |  Branch (3759:80): [True: 494, False: 160]
  ------------------
 3760|    938|        commonBuiltins.append(
 3761|    938|            "float16_t radians(float16_t);"
 3762|    938|            "f16vec2   radians(f16vec2);"
 3763|    938|            "f16vec3   radians(f16vec3);"
 3764|    938|            "f16vec4   radians(f16vec4);"
 3765|       |
 3766|    938|            "float16_t degrees(float16_t);"
 3767|    938|            "f16vec2   degrees(f16vec2);"
 3768|    938|            "f16vec3   degrees(f16vec3);"
 3769|    938|            "f16vec4   degrees(f16vec4);"
 3770|       |
 3771|    938|            "float16_t sin(float16_t);"
 3772|    938|            "f16vec2   sin(f16vec2);"
 3773|    938|            "f16vec3   sin(f16vec3);"
 3774|    938|            "f16vec4   sin(f16vec4);"
 3775|       |
 3776|    938|            "float16_t cos(float16_t);"
 3777|    938|            "f16vec2   cos(f16vec2);"
 3778|    938|            "f16vec3   cos(f16vec3);"
 3779|    938|            "f16vec4   cos(f16vec4);"
 3780|       |
 3781|    938|            "float16_t tan(float16_t);"
 3782|    938|            "f16vec2   tan(f16vec2);"
 3783|    938|            "f16vec3   tan(f16vec3);"
 3784|    938|            "f16vec4   tan(f16vec4);"
 3785|       |
 3786|    938|            "float16_t asin(float16_t);"
 3787|    938|            "f16vec2   asin(f16vec2);"
 3788|    938|            "f16vec3   asin(f16vec3);"
 3789|    938|            "f16vec4   asin(f16vec4);"
 3790|       |
 3791|    938|            "float16_t acos(float16_t);"
 3792|    938|            "f16vec2   acos(f16vec2);"
 3793|    938|            "f16vec3   acos(f16vec3);"
 3794|    938|            "f16vec4   acos(f16vec4);"
 3795|       |
 3796|    938|            "float16_t atan(float16_t, float16_t);"
 3797|    938|            "f16vec2   atan(f16vec2,   f16vec2);"
 3798|    938|            "f16vec3   atan(f16vec3,   f16vec3);"
 3799|    938|            "f16vec4   atan(f16vec4,   f16vec4);"
 3800|       |
 3801|    938|            "float16_t atan(float16_t);"
 3802|    938|            "f16vec2   atan(f16vec2);"
 3803|    938|            "f16vec3   atan(f16vec3);"
 3804|    938|            "f16vec4   atan(f16vec4);"
 3805|       |
 3806|    938|            "float16_t sinh(float16_t);"
 3807|    938|            "f16vec2   sinh(f16vec2);"
 3808|    938|            "f16vec3   sinh(f16vec3);"
 3809|    938|            "f16vec4   sinh(f16vec4);"
 3810|       |
 3811|    938|            "float16_t cosh(float16_t);"
 3812|    938|            "f16vec2   cosh(f16vec2);"
 3813|    938|            "f16vec3   cosh(f16vec3);"
 3814|    938|            "f16vec4   cosh(f16vec4);"
 3815|       |
 3816|    938|            "float16_t tanh(float16_t);"
 3817|    938|            "f16vec2   tanh(f16vec2);"
 3818|    938|            "f16vec3   tanh(f16vec3);"
 3819|    938|            "f16vec4   tanh(f16vec4);"
 3820|       |
 3821|    938|            "float16_t asinh(float16_t);"
 3822|    938|            "f16vec2   asinh(f16vec2);"
 3823|    938|            "f16vec3   asinh(f16vec3);"
 3824|    938|            "f16vec4   asinh(f16vec4);"
 3825|       |
 3826|    938|            "float16_t acosh(float16_t);"
 3827|    938|            "f16vec2   acosh(f16vec2);"
 3828|    938|            "f16vec3   acosh(f16vec3);"
 3829|    938|            "f16vec4   acosh(f16vec4);"
 3830|       |
 3831|    938|            "float16_t atanh(float16_t);"
 3832|    938|            "f16vec2   atanh(f16vec2);"
 3833|    938|            "f16vec3   atanh(f16vec3);"
 3834|    938|            "f16vec4   atanh(f16vec4);"
 3835|       |
 3836|    938|            "float16_t pow(float16_t, float16_t);"
 3837|    938|            "f16vec2   pow(f16vec2,   f16vec2);"
 3838|    938|            "f16vec3   pow(f16vec3,   f16vec3);"
 3839|    938|            "f16vec4   pow(f16vec4,   f16vec4);"
 3840|       |
 3841|    938|            "float16_t exp(float16_t);"
 3842|    938|            "f16vec2   exp(f16vec2);"
 3843|    938|            "f16vec3   exp(f16vec3);"
 3844|    938|            "f16vec4   exp(f16vec4);"
 3845|       |
 3846|    938|            "float16_t log(float16_t);"
 3847|    938|            "f16vec2   log(f16vec2);"
 3848|    938|            "f16vec3   log(f16vec3);"
 3849|    938|            "f16vec4   log(f16vec4);"
 3850|       |
 3851|    938|            "float16_t exp2(float16_t);"
 3852|    938|            "f16vec2   exp2(f16vec2);"
 3853|    938|            "f16vec3   exp2(f16vec3);"
 3854|    938|            "f16vec4   exp2(f16vec4);"
 3855|       |
 3856|    938|            "float16_t log2(float16_t);"
 3857|    938|            "f16vec2   log2(f16vec2);"
 3858|    938|            "f16vec3   log2(f16vec3);"
 3859|    938|            "f16vec4   log2(f16vec4);"
 3860|       |
 3861|    938|            "float16_t sqrt(float16_t);"
 3862|    938|            "f16vec2   sqrt(f16vec2);"
 3863|    938|            "f16vec3   sqrt(f16vec3);"
 3864|    938|            "f16vec4   sqrt(f16vec4);"
 3865|       |
 3866|    938|            "float16_t inversesqrt(float16_t);"
 3867|    938|            "f16vec2   inversesqrt(f16vec2);"
 3868|    938|            "f16vec3   inversesqrt(f16vec3);"
 3869|    938|            "f16vec4   inversesqrt(f16vec4);"
 3870|       |
 3871|    938|            "float16_t abs(float16_t);"
 3872|    938|            "f16vec2   abs(f16vec2);"
 3873|    938|            "f16vec3   abs(f16vec3);"
 3874|    938|            "f16vec4   abs(f16vec4);"
 3875|       |
 3876|    938|            "float16_t sign(float16_t);"
 3877|    938|            "f16vec2   sign(f16vec2);"
 3878|    938|            "f16vec3   sign(f16vec3);"
 3879|    938|            "f16vec4   sign(f16vec4);"
 3880|       |
 3881|    938|            "float16_t floor(float16_t);"
 3882|    938|            "f16vec2   floor(f16vec2);"
 3883|    938|            "f16vec3   floor(f16vec3);"
 3884|    938|            "f16vec4   floor(f16vec4);"
 3885|       |
 3886|    938|            "float16_t trunc(float16_t);"
 3887|    938|            "f16vec2   trunc(f16vec2);"
 3888|    938|            "f16vec3   trunc(f16vec3);"
 3889|    938|            "f16vec4   trunc(f16vec4);"
 3890|       |
 3891|    938|            "float16_t round(float16_t);"
 3892|    938|            "f16vec2   round(f16vec2);"
 3893|    938|            "f16vec3   round(f16vec3);"
 3894|    938|            "f16vec4   round(f16vec4);"
 3895|       |
 3896|    938|            "float16_t roundEven(float16_t);"
 3897|    938|            "f16vec2   roundEven(f16vec2);"
 3898|    938|            "f16vec3   roundEven(f16vec3);"
 3899|    938|            "f16vec4   roundEven(f16vec4);"
 3900|       |
 3901|    938|            "float16_t ceil(float16_t);"
 3902|    938|            "f16vec2   ceil(f16vec2);"
 3903|    938|            "f16vec3   ceil(f16vec3);"
 3904|    938|            "f16vec4   ceil(f16vec4);"
 3905|       |
 3906|    938|            "float16_t fract(float16_t);"
 3907|    938|            "f16vec2   fract(f16vec2);"
 3908|    938|            "f16vec3   fract(f16vec3);"
 3909|    938|            "f16vec4   fract(f16vec4);"
 3910|       |
 3911|    938|            "float16_t mod(float16_t, float16_t);"
 3912|    938|            "f16vec2   mod(f16vec2,   float16_t);"
 3913|    938|            "f16vec3   mod(f16vec3,   float16_t);"
 3914|    938|            "f16vec4   mod(f16vec4,   float16_t);"
 3915|    938|            "f16vec2   mod(f16vec2,   f16vec2);"
 3916|    938|            "f16vec3   mod(f16vec3,   f16vec3);"
 3917|    938|            "f16vec4   mod(f16vec4,   f16vec4);"
 3918|       |
 3919|    938|            "float16_t modf(float16_t, out float16_t);"
 3920|    938|            "f16vec2   modf(f16vec2,   out f16vec2);"
 3921|    938|            "f16vec3   modf(f16vec3,   out f16vec3);"
 3922|    938|            "f16vec4   modf(f16vec4,   out f16vec4);"
 3923|       |
 3924|    938|            "float16_t min(float16_t, float16_t);"
 3925|    938|            "f16vec2   min(f16vec2,   float16_t);"
 3926|    938|            "f16vec3   min(f16vec3,   float16_t);"
 3927|    938|            "f16vec4   min(f16vec4,   float16_t);"
 3928|    938|            "f16vec2   min(f16vec2,   f16vec2);"
 3929|    938|            "f16vec3   min(f16vec3,   f16vec3);"
 3930|    938|            "f16vec4   min(f16vec4,   f16vec4);"
 3931|       |
 3932|    938|            "float16_t max(float16_t, float16_t);"
 3933|    938|            "f16vec2   max(f16vec2,   float16_t);"
 3934|    938|            "f16vec3   max(f16vec3,   float16_t);"
 3935|    938|            "f16vec4   max(f16vec4,   float16_t);"
 3936|    938|            "f16vec2   max(f16vec2,   f16vec2);"
 3937|    938|            "f16vec3   max(f16vec3,   f16vec3);"
 3938|    938|            "f16vec4   max(f16vec4,   f16vec4);"
 3939|       |
 3940|    938|            "float16_t clamp(float16_t, float16_t, float16_t);"
 3941|    938|            "f16vec2   clamp(f16vec2,   float16_t, float16_t);"
 3942|    938|            "f16vec3   clamp(f16vec3,   float16_t, float16_t);"
 3943|    938|            "f16vec4   clamp(f16vec4,   float16_t, float16_t);"
 3944|    938|            "f16vec2   clamp(f16vec2,   f16vec2,   f16vec2);"
 3945|    938|            "f16vec3   clamp(f16vec3,   f16vec3,   f16vec3);"
 3946|    938|            "f16vec4   clamp(f16vec4,   f16vec4,   f16vec4);"
 3947|       |
 3948|    938|            "float16_t mix(float16_t, float16_t, float16_t);"
 3949|    938|            "f16vec2   mix(f16vec2,   f16vec2,   float16_t);"
 3950|    938|            "f16vec3   mix(f16vec3,   f16vec3,   float16_t);"
 3951|    938|            "f16vec4   mix(f16vec4,   f16vec4,   float16_t);"
 3952|    938|            "f16vec2   mix(f16vec2,   f16vec2,   f16vec2);"
 3953|    938|            "f16vec3   mix(f16vec3,   f16vec3,   f16vec3);"
 3954|    938|            "f16vec4   mix(f16vec4,   f16vec4,   f16vec4);"
 3955|    938|            "float16_t mix(float16_t, float16_t, bool);"
 3956|    938|            "f16vec2   mix(f16vec2,   f16vec2,   bvec2);"
 3957|    938|            "f16vec3   mix(f16vec3,   f16vec3,   bvec3);"
 3958|    938|            "f16vec4   mix(f16vec4,   f16vec4,   bvec4);"
 3959|       |
 3960|    938|            "float16_t step(float16_t, float16_t);"
 3961|    938|            "f16vec2   step(f16vec2,   f16vec2);"
 3962|    938|            "f16vec3   step(f16vec3,   f16vec3);"
 3963|    938|            "f16vec4   step(f16vec4,   f16vec4);"
 3964|    938|            "f16vec2   step(float16_t, f16vec2);"
 3965|    938|            "f16vec3   step(float16_t, f16vec3);"
 3966|    938|            "f16vec4   step(float16_t, f16vec4);"
 3967|       |
 3968|    938|            "float16_t smoothstep(float16_t, float16_t, float16_t);"
 3969|    938|            "f16vec2   smoothstep(f16vec2,   f16vec2,   f16vec2);"
 3970|    938|            "f16vec3   smoothstep(f16vec3,   f16vec3,   f16vec3);"
 3971|    938|            "f16vec4   smoothstep(f16vec4,   f16vec4,   f16vec4);"
 3972|    938|            "f16vec2   smoothstep(float16_t, float16_t, f16vec2);"
 3973|    938|            "f16vec3   smoothstep(float16_t, float16_t, f16vec3);"
 3974|    938|            "f16vec4   smoothstep(float16_t, float16_t, f16vec4);"
 3975|       |
 3976|    938|            "bool  isnan(float16_t);"
 3977|    938|            "bvec2 isnan(f16vec2);"
 3978|    938|            "bvec3 isnan(f16vec3);"
 3979|    938|            "bvec4 isnan(f16vec4);"
 3980|       |
 3981|    938|            "bool  isinf(float16_t);"
 3982|    938|            "bvec2 isinf(f16vec2);"
 3983|    938|            "bvec3 isinf(f16vec3);"
 3984|    938|            "bvec4 isinf(f16vec4);"
 3985|       |
 3986|    938|            "float16_t fma(float16_t, float16_t, float16_t);"
 3987|    938|            "f16vec2   fma(f16vec2,   f16vec2,   f16vec2);"
 3988|    938|            "f16vec3   fma(f16vec3,   f16vec3,   f16vec3);"
 3989|    938|            "f16vec4   fma(f16vec4,   f16vec4,   f16vec4);"
 3990|       |
 3991|    938|            "float16_t frexp(float16_t, out int);"
 3992|    938|            "f16vec2   frexp(f16vec2,   out ivec2);"
 3993|    938|            "f16vec3   frexp(f16vec3,   out ivec3);"
 3994|    938|            "f16vec4   frexp(f16vec4,   out ivec4);"
 3995|       |
 3996|    938|            "float16_t ldexp(float16_t, in int);"
 3997|    938|            "f16vec2   ldexp(f16vec2,   in ivec2);"
 3998|    938|            "f16vec3   ldexp(f16vec3,   in ivec3);"
 3999|    938|            "f16vec4   ldexp(f16vec4,   in ivec4);"
 4000|       |
 4001|    938|            "uint    packFloat2x16(f16vec2);"
 4002|    938|            "f16vec2 unpackFloat2x16(uint);"
 4003|       |
 4004|    938|            "float16_t length(float16_t);"
 4005|    938|            "float16_t length(f16vec2);"
 4006|    938|            "float16_t length(f16vec3);"
 4007|    938|            "float16_t length(f16vec4);"
 4008|       |
 4009|    938|            "float16_t distance(float16_t, float16_t);"
 4010|    938|            "float16_t distance(f16vec2,   f16vec2);"
 4011|    938|            "float16_t distance(f16vec3,   f16vec3);"
 4012|    938|            "float16_t distance(f16vec4,   f16vec4);"
 4013|       |
 4014|    938|            "float16_t dot(float16_t, float16_t);"
 4015|    938|            "float16_t dot(f16vec2,   f16vec2);"
 4016|    938|            "float16_t dot(f16vec3,   f16vec3);"
 4017|    938|            "float16_t dot(f16vec4,   f16vec4);"
 4018|       |
 4019|    938|            "f16vec3 cross(f16vec3, f16vec3);"
 4020|       |
 4021|    938|            "float16_t normalize(float16_t);"
 4022|    938|            "f16vec2   normalize(f16vec2);"
 4023|    938|            "f16vec3   normalize(f16vec3);"
 4024|    938|            "f16vec4   normalize(f16vec4);"
 4025|       |
 4026|    938|            "float16_t faceforward(float16_t, float16_t, float16_t);"
 4027|    938|            "f16vec2   faceforward(f16vec2,   f16vec2,   f16vec2);"
 4028|    938|            "f16vec3   faceforward(f16vec3,   f16vec3,   f16vec3);"
 4029|    938|            "f16vec4   faceforward(f16vec4,   f16vec4,   f16vec4);"
 4030|       |
 4031|    938|            "float16_t reflect(float16_t, float16_t);"
 4032|    938|            "f16vec2   reflect(f16vec2,   f16vec2);"
 4033|    938|            "f16vec3   reflect(f16vec3,   f16vec3);"
 4034|    938|            "f16vec4   reflect(f16vec4,   f16vec4);"
 4035|       |
 4036|    938|            "float16_t refract(float16_t, float16_t, float16_t);"
 4037|    938|            "f16vec2   refract(f16vec2,   f16vec2,   float16_t);"
 4038|    938|            "f16vec3   refract(f16vec3,   f16vec3,   float16_t);"
 4039|    938|            "f16vec4   refract(f16vec4,   f16vec4,   float16_t);"
 4040|       |
 4041|    938|            "f16mat2   matrixCompMult(f16mat2,   f16mat2);"
 4042|    938|            "f16mat3   matrixCompMult(f16mat3,   f16mat3);"
 4043|    938|            "f16mat4   matrixCompMult(f16mat4,   f16mat4);"
 4044|    938|            "f16mat2x3 matrixCompMult(f16mat2x3, f16mat2x3);"
 4045|    938|            "f16mat2x4 matrixCompMult(f16mat2x4, f16mat2x4);"
 4046|    938|            "f16mat3x2 matrixCompMult(f16mat3x2, f16mat3x2);"
 4047|    938|            "f16mat3x4 matrixCompMult(f16mat3x4, f16mat3x4);"
 4048|    938|            "f16mat4x2 matrixCompMult(f16mat4x2, f16mat4x2);"
 4049|    938|            "f16mat4x3 matrixCompMult(f16mat4x3, f16mat4x3);"
 4050|       |
 4051|    938|            "f16mat2   outerProduct(f16vec2, f16vec2);"
 4052|    938|            "f16mat3   outerProduct(f16vec3, f16vec3);"
 4053|    938|            "f16mat4   outerProduct(f16vec4, f16vec4);"
 4054|    938|            "f16mat2x3 outerProduct(f16vec3, f16vec2);"
 4055|    938|            "f16mat3x2 outerProduct(f16vec2, f16vec3);"
 4056|    938|            "f16mat2x4 outerProduct(f16vec4, f16vec2);"
 4057|    938|            "f16mat4x2 outerProduct(f16vec2, f16vec4);"
 4058|    938|            "f16mat3x4 outerProduct(f16vec4, f16vec3);"
 4059|    938|            "f16mat4x3 outerProduct(f16vec3, f16vec4);"
 4060|       |
 4061|    938|            "f16mat2   transpose(f16mat2);"
 4062|    938|            "f16mat3   transpose(f16mat3);"
 4063|    938|            "f16mat4   transpose(f16mat4);"
 4064|    938|            "f16mat2x3 transpose(f16mat3x2);"
 4065|    938|            "f16mat3x2 transpose(f16mat2x3);"
 4066|    938|            "f16mat2x4 transpose(f16mat4x2);"
 4067|    938|            "f16mat4x2 transpose(f16mat2x4);"
 4068|    938|            "f16mat3x4 transpose(f16mat4x3);"
 4069|    938|            "f16mat4x3 transpose(f16mat3x4);"
 4070|       |
 4071|    938|            "float16_t determinant(f16mat2);"
 4072|    938|            "float16_t determinant(f16mat3);"
 4073|    938|            "float16_t determinant(f16mat4);"
 4074|       |
 4075|    938|            "f16mat2 inverse(f16mat2);"
 4076|    938|            "f16mat3 inverse(f16mat3);"
 4077|    938|            "f16mat4 inverse(f16mat4);"
 4078|       |
 4079|    938|            "bvec2 lessThan(f16vec2, f16vec2);"
 4080|    938|            "bvec3 lessThan(f16vec3, f16vec3);"
 4081|    938|            "bvec4 lessThan(f16vec4, f16vec4);"
 4082|       |
 4083|    938|            "bvec2 lessThanEqual(f16vec2, f16vec2);"
 4084|    938|            "bvec3 lessThanEqual(f16vec3, f16vec3);"
 4085|    938|            "bvec4 lessThanEqual(f16vec4, f16vec4);"
 4086|       |
 4087|    938|            "bvec2 greaterThan(f16vec2, f16vec2);"
 4088|    938|            "bvec3 greaterThan(f16vec3, f16vec3);"
 4089|    938|            "bvec4 greaterThan(f16vec4, f16vec4);"
 4090|       |
 4091|    938|            "bvec2 greaterThanEqual(f16vec2, f16vec2);"
 4092|    938|            "bvec3 greaterThanEqual(f16vec3, f16vec3);"
 4093|    938|            "bvec4 greaterThanEqual(f16vec4, f16vec4);"
 4094|       |
 4095|    938|            "bvec2 equal(f16vec2, f16vec2);"
 4096|    938|            "bvec3 equal(f16vec3, f16vec3);"
 4097|    938|            "bvec4 equal(f16vec4, f16vec4);"
 4098|       |
 4099|    938|            "bvec2 notEqual(f16vec2, f16vec2);"
 4100|    938|            "bvec3 notEqual(f16vec3, f16vec3);"
 4101|    938|            "bvec4 notEqual(f16vec4, f16vec4);"
 4102|       |
 4103|    938|            "bfloat16_t dot(bfloat16_t, bfloat16_t);"
 4104|    938|            "bfloat16_t dot(bf16vec2,   bf16vec2);"
 4105|    938|            "bfloat16_t dot(bf16vec3,   bf16vec3);"
 4106|    938|            "bfloat16_t dot(bf16vec4,   bf16vec4);"
 4107|       |
 4108|    938|            "int16_t  bfloat16BitsToIntEXT(bfloat16_t value);"
 4109|    938|            "i16vec2  bfloat16BitsToIntEXT(bf16vec2 value);"
 4110|    938|            "i16vec3  bfloat16BitsToIntEXT(bf16vec3 value);"
 4111|    938|            "i16vec4  bfloat16BitsToIntEXT(bf16vec4 value);"
 4112|       |
 4113|    938|            "uint16_t bfloat16BitsToUintEXT(bfloat16_t value);"
 4114|    938|            "u16vec2  bfloat16BitsToUintEXT(bf16vec2 value);"
 4115|    938|            "u16vec3  bfloat16BitsToUintEXT(bf16vec3 value);"
 4116|    938|            "u16vec4  bfloat16BitsToUintEXT(bf16vec4 value);"
 4117|       |
 4118|    938|            "bfloat16_t intBitsToBFloat16EXT(int16_t value);"
 4119|    938|            "bf16vec2   intBitsToBFloat16EXT(i16vec2 value);"
 4120|    938|            "bf16vec3   intBitsToBFloat16EXT(i16vec3 value);"
 4121|    938|            "bf16vec4   intBitsToBFloat16EXT(i16vec4 value);"
 4122|       |
 4123|    938|            "bfloat16_t uintBitsToBFloat16EXT(uint16_t value);"
 4124|    938|            "bf16vec2   uintBitsToBFloat16EXT(u16vec2 value);"
 4125|    938|            "bf16vec3   uintBitsToBFloat16EXT(u16vec3 value);"
 4126|    938|            "bf16vec4   uintBitsToBFloat16EXT(u16vec4 value);"
 4127|       |
 4128|    938|            "int8_t  floate5m2BitsToIntEXT(floate5m2_t value);"
 4129|    938|            "i8vec2  floate5m2BitsToIntEXT(fe5m2vec2 value);"
 4130|    938|            "i8vec3  floate5m2BitsToIntEXT(fe5m2vec3 value);"
 4131|    938|            "i8vec4  floate5m2BitsToIntEXT(fe5m2vec4 value);"
 4132|       |
 4133|    938|            "uint8_t floate5m2BitsToUintEXT(floate5m2_t value);"
 4134|    938|            "u8vec2  floate5m2BitsToUintEXT(fe5m2vec2 value);"
 4135|    938|            "u8vec3  floate5m2BitsToUintEXT(fe5m2vec3 value);"
 4136|    938|            "u8vec4  floate5m2BitsToUintEXT(fe5m2vec4 value);"
 4137|       |
 4138|    938|            "floate5m2_t intBitsToFloate5m2EXT(int8_t value);"
 4139|    938|            "fe5m2vec2   intBitsToFloate5m2EXT(i8vec2 value);"
 4140|    938|            "fe5m2vec3   intBitsToFloate5m2EXT(i8vec3 value);"
 4141|    938|            "fe5m2vec4   intBitsToFloate5m2EXT(i8vec4 value);"
 4142|       |
 4143|    938|            "floate5m2_t uintBitsToFloate5m2EXT(uint8_t value);"
 4144|    938|            "fe5m2vec2   uintBitsToFloate5m2EXT(u8vec2 value);"
 4145|    938|            "fe5m2vec3   uintBitsToFloate5m2EXT(u8vec3 value);"
 4146|    938|            "fe5m2vec4   uintBitsToFloate5m2EXT(u8vec4 value);"
 4147|       |
 4148|    938|            "int8_t  floate4m3BitsToIntEXT(floate4m3_t value);"
 4149|    938|            "i8vec2  floate4m3BitsToIntEXT(fe4m3vec2 value);"
 4150|    938|            "i8vec3  floate4m3BitsToIntEXT(fe4m3vec3 value);"
 4151|    938|            "i8vec4  floate4m3BitsToIntEXT(fe4m3vec4 value);"
 4152|       |
 4153|    938|            "uint8_t floate4m3BitsToUintEXT(floate4m3_t value);"
 4154|    938|            "u8vec2  floate4m3BitsToUintEXT(fe4m3vec2 value);"
 4155|    938|            "u8vec3  floate4m3BitsToUintEXT(fe4m3vec3 value);"
 4156|    938|            "u8vec4  floate4m3BitsToUintEXT(fe4m3vec4 value);"
 4157|       |
 4158|    938|            "floate4m3_t intBitsToFloate4m3EXT(int8_t value);"
 4159|    938|            "fe4m3vec2   intBitsToFloate4m3EXT(i8vec2 value);"
 4160|    938|            "fe4m3vec3   intBitsToFloate4m3EXT(i8vec3 value);"
 4161|    938|            "fe4m3vec4   intBitsToFloate4m3EXT(i8vec4 value);"
 4162|       |
 4163|    938|            "floate4m3_t uintBitsToFloate4m3EXT(uint8_t value);"
 4164|    938|            "fe4m3vec2   uintBitsToFloate4m3EXT(u8vec2 value);"
 4165|    938|            "fe4m3vec3   uintBitsToFloate4m3EXT(u8vec3 value);"
 4166|    938|            "fe4m3vec4   uintBitsToFloate4m3EXT(u8vec4 value);"
 4167|       |
 4168|    938|            "void saturatedConvertEXT();"
 4169|       |
 4170|    938|            "int8_t  floatue8m0BitsToIntEXT(floatue8m0_t value);"
 4171|    938|            "i8vec2  floatue8m0BitsToIntEXT(fue8m0vec2 value);"
 4172|    938|            "i8vec3  floatue8m0BitsToIntEXT(fue8m0vec3 value);"
 4173|    938|            "i8vec4  floatue8m0BitsToIntEXT(fue8m0vec4 value);"
 4174|       |
 4175|    938|            "uint8_t floatue8m0BitsToUintEXT(floatue8m0_t value);"
 4176|    938|            "u8vec2  floatue8m0BitsToUintEXT(fue8m0vec2 value);"
 4177|    938|            "u8vec3  floatue8m0BitsToUintEXT(fue8m0vec3 value);"
 4178|    938|            "u8vec4  floatue8m0BitsToUintEXT(fue8m0vec4 value);"
 4179|       |
 4180|    938|            "floatue8m0_t intBitsToFloatue8m0EXT(int8_t value);"
 4181|    938|            "fue8m0vec2   intBitsToFloatue8m0EXT(i8vec2 value);"
 4182|    938|            "fue8m0vec3   intBitsToFloatue8m0EXT(i8vec3 value);"
 4183|    938|            "fue8m0vec4   intBitsToFloatue8m0EXT(i8vec4 value);"
 4184|       |
 4185|    938|            "floatue8m0_t uintBitsToFloatue8m0EXT(uint8_t value);"
 4186|    938|            "fue8m0vec2   uintBitsToFloatue8m0EXT(u8vec2 value);"
 4187|    938|            "fue8m0vec3   uintBitsToFloatue8m0EXT(u8vec3 value);"
 4188|    938|            "fue8m0vec4   uintBitsToFloatue8m0EXT(u8vec4 value);"
 4189|       |
 4190|    938|            "int8_t  floatmxint8BitsToIntEXT(floatmxint8_t value);"
 4191|    938|            "i8vec2  floatmxint8BitsToIntEXT(fmxint8vec2 value);"
 4192|    938|            "i8vec3  floatmxint8BitsToIntEXT(fmxint8vec3 value);"
 4193|    938|            "i8vec4  floatmxint8BitsToIntEXT(fmxint8vec4 value);"
 4194|       |
 4195|    938|            "uint8_t floatmxint8BitsToUintEXT(floatmxint8_t value);"
 4196|    938|            "u8vec2  floatmxint8BitsToUintEXT(fmxint8vec2 value);"
 4197|    938|            "u8vec3  floatmxint8BitsToUintEXT(fmxint8vec3 value);"
 4198|    938|            "u8vec4  floatmxint8BitsToUintEXT(fmxint8vec4 value);"
 4199|       |
 4200|    938|            "floatmxint8_t intBitsToFloatmxint8EXT(int8_t value);"
 4201|    938|            "fmxint8vec2   intBitsToFloatmxint8EXT(i8vec2 value);"
 4202|    938|            "fmxint8vec3   intBitsToFloatmxint8EXT(i8vec3 value);"
 4203|    938|            "fmxint8vec4   intBitsToFloatmxint8EXT(i8vec4 value);"
 4204|       |
 4205|    938|            "floatmxint8_t uintBitsToFloatmxint8EXT(uint8_t value);"
 4206|    938|            "fmxint8vec2   uintBitsToFloatmxint8EXT(u8vec2 value);"
 4207|    938|            "fmxint8vec3   uintBitsToFloatmxint8EXT(u8vec3 value);"
 4208|    938|            "fmxint8vec4   uintBitsToFloatmxint8EXT(u8vec4 value);"
 4209|       |
 4210|    938|            "fe2m1vec2               unpackFloat2xfe2m1EXT(uint8_t value);"
 4211|    938|            "fe2m1vec4               unpackFloat4xfe2m1EXT(uint16_t value);"
 4212|    938|            "vector<floate2m1_t, 8>  unpackFloat8xfe2m1EXT(uint32_t value);"
 4213|    938|            "vector<floate2m1_t, 16> unpackFloat16xfe2m1EXT(u32vec2 value);"
 4214|       |
 4215|    938|            "uint8_t                 packFloat2xfe2m1EXT(fe2m1vec2 value);"
 4216|    938|            "uint16_t                packFloat4xfe2m1EXT(fe2m1vec4 value);"
 4217|    938|            "uint32_t                packFloat8xfe2m1EXT(vector<floate2m1_t, 8> value);"
 4218|    938|            "u32vec2                 packFloat16xfe2m1EXT(vector<floate2m1_t, 16> value);"
 4219|       |
 4220|    938|            "fe3m2vec4               unpackFloat4xfe3m2EXT(u8vec3 value);"
 4221|    938|            "vector<floate3m2_t, 8>  unpackFloat8xfe3m2EXT(u16vec3 value);"
 4222|    938|            "vector<floate3m2_t, 16> unpackFloat16xfe3m2EXT(u32vec3 value);"
 4223|       |
 4224|    938|            "u8vec3                  packFloat4xfe3m2EXT(fe3m2vec4 value);"
 4225|    938|            "u16vec3                 packFloat8xfe3m2EXT(vector<floate3m2_t, 8> value);"
 4226|    938|            "u32vec3                 packFloat16xfe3m2EXT(vector<floate3m2_t, 16> value);"
 4227|       |
 4228|    938|            "fe2m3vec4               unpackFloat4xfe2m3EXT(u8vec3 value);"
 4229|    938|            "vector<floate2m3_t, 8>  unpackFloat8xfe2m3EXT(u16vec3 value);"
 4230|    938|            "vector<floate2m3_t, 16> unpackFloat16xfe2m3EXT(u32vec3 value);"
 4231|       |
 4232|    938|            "u8vec3                  packFloat4xfe2m3EXT(fe2m3vec4 value);"
 4233|    938|            "u16vec3                 packFloat8xfe2m3EXT(vector<floate2m3_t, 8> value);"
 4234|    938|            "u32vec3                 packFloat16xfe2m3EXT(vector<floate2m3_t, 16> value);"
 4235|       |
 4236|    938|            "floate2m1_t             bitcastExtractfe2m1EXT(uint8_t, uint);"
 4237|    938|            "fe2m1vec2               bitcastExtractfe2m1EXT(u8vec2, uint);"
 4238|    938|            "fe2m1vec3               bitcastExtractfe2m1EXT(u8vec3, uint);"
 4239|    938|            "fe2m1vec4               bitcastExtractfe2m1EXT(u8vec4, uint);"
 4240|       |
 4241|    938|            "floate3m2_t             bitcastExtractfe3m2EXT(uint8_t, uint);"
 4242|    938|            "fe3m2vec2               bitcastExtractfe3m2EXT(u8vec2, uint);"
 4243|    938|            "fe3m2vec3               bitcastExtractfe3m2EXT(u8vec3, uint);"
 4244|    938|            "fe3m2vec4               bitcastExtractfe3m2EXT(u8vec4, uint);"
 4245|       |
 4246|    938|            "floate2m3_t             bitcastExtractfe2m3EXT(uint8_t, uint);"
 4247|    938|            "fe2m3vec2               bitcastExtractfe2m3EXT(u8vec2, uint);"
 4248|    938|            "fe2m3vec3               bitcastExtractfe2m3EXT(u8vec3, uint);"
 4249|    938|            "fe2m3vec4               bitcastExtractfe2m3EXT(u8vec4, uint);"
 4250|       |
 4251|    938|            "\n");
 4252|    938|    }
 4253|       |
 4254|       |    // Explicit types
 4255|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (4255:10): [True: 459, False: 654]
  |  Branch (4255:35): [True: 444, False: 15]
  |  Branch (4255:55): [True: 654, False: 15]
  |  Branch (4255:80): [True: 494, False: 160]
  ------------------
 4256|    938|        commonBuiltins.append(
 4257|    938|            "int8_t abs(int8_t);"
 4258|    938|            "i8vec2 abs(i8vec2);"
 4259|    938|            "i8vec3 abs(i8vec3);"
 4260|    938|            "i8vec4 abs(i8vec4);"
 4261|       |
 4262|    938|            "int8_t sign(int8_t);"
 4263|    938|            "i8vec2 sign(i8vec2);"
 4264|    938|            "i8vec3 sign(i8vec3);"
 4265|    938|            "i8vec4 sign(i8vec4);"
 4266|       |
 4267|    938|            "int8_t min(int8_t x, int8_t y);"
 4268|    938|            "i8vec2 min(i8vec2 x, int8_t y);"
 4269|    938|            "i8vec3 min(i8vec3 x, int8_t y);"
 4270|    938|            "i8vec4 min(i8vec4 x, int8_t y);"
 4271|    938|            "i8vec2 min(i8vec2 x, i8vec2 y);"
 4272|    938|            "i8vec3 min(i8vec3 x, i8vec3 y);"
 4273|    938|            "i8vec4 min(i8vec4 x, i8vec4 y);"
 4274|       |
 4275|    938|            "uint8_t min(uint8_t x, uint8_t y);"
 4276|    938|            "u8vec2 min(u8vec2 x, uint8_t y);"
 4277|    938|            "u8vec3 min(u8vec3 x, uint8_t y);"
 4278|    938|            "u8vec4 min(u8vec4 x, uint8_t y);"
 4279|    938|            "u8vec2 min(u8vec2 x, u8vec2 y);"
 4280|    938|            "u8vec3 min(u8vec3 x, u8vec3 y);"
 4281|    938|            "u8vec4 min(u8vec4 x, u8vec4 y);"
 4282|       |
 4283|    938|            "int8_t max(int8_t x, int8_t y);"
 4284|    938|            "i8vec2 max(i8vec2 x, int8_t y);"
 4285|    938|            "i8vec3 max(i8vec3 x, int8_t y);"
 4286|    938|            "i8vec4 max(i8vec4 x, int8_t y);"
 4287|    938|            "i8vec2 max(i8vec2 x, i8vec2 y);"
 4288|    938|            "i8vec3 max(i8vec3 x, i8vec3 y);"
 4289|    938|            "i8vec4 max(i8vec4 x, i8vec4 y);"
 4290|       |
 4291|    938|            "uint8_t max(uint8_t x, uint8_t y);"
 4292|    938|            "u8vec2 max(u8vec2 x, uint8_t y);"
 4293|    938|            "u8vec3 max(u8vec3 x, uint8_t y);"
 4294|    938|            "u8vec4 max(u8vec4 x, uint8_t y);"
 4295|    938|            "u8vec2 max(u8vec2 x, u8vec2 y);"
 4296|    938|            "u8vec3 max(u8vec3 x, u8vec3 y);"
 4297|    938|            "u8vec4 max(u8vec4 x, u8vec4 y);"
 4298|       |
 4299|    938|            "int8_t    clamp(int8_t x, int8_t minVal, int8_t maxVal);"
 4300|    938|            "i8vec2  clamp(i8vec2  x, int8_t minVal, int8_t maxVal);"
 4301|    938|            "i8vec3  clamp(i8vec3  x, int8_t minVal, int8_t maxVal);"
 4302|    938|            "i8vec4  clamp(i8vec4  x, int8_t minVal, int8_t maxVal);"
 4303|    938|            "i8vec2  clamp(i8vec2  x, i8vec2  minVal, i8vec2  maxVal);"
 4304|    938|            "i8vec3  clamp(i8vec3  x, i8vec3  minVal, i8vec3  maxVal);"
 4305|    938|            "i8vec4  clamp(i8vec4  x, i8vec4  minVal, i8vec4  maxVal);"
 4306|       |
 4307|    938|            "uint8_t   clamp(uint8_t x, uint8_t minVal, uint8_t maxVal);"
 4308|    938|            "u8vec2  clamp(u8vec2  x, uint8_t minVal, uint8_t maxVal);"
 4309|    938|            "u8vec3  clamp(u8vec3  x, uint8_t minVal, uint8_t maxVal);"
 4310|    938|            "u8vec4  clamp(u8vec4  x, uint8_t minVal, uint8_t maxVal);"
 4311|    938|            "u8vec2  clamp(u8vec2  x, u8vec2  minVal, u8vec2  maxVal);"
 4312|    938|            "u8vec3  clamp(u8vec3  x, u8vec3  minVal, u8vec3  maxVal);"
 4313|    938|            "u8vec4  clamp(u8vec4  x, u8vec4  minVal, u8vec4  maxVal);"
 4314|       |
 4315|    938|            "int8_t  mix(int8_t,  int8_t,  bool);"
 4316|    938|            "i8vec2  mix(i8vec2,  i8vec2,  bvec2);"
 4317|    938|            "i8vec3  mix(i8vec3,  i8vec3,  bvec3);"
 4318|    938|            "i8vec4  mix(i8vec4,  i8vec4,  bvec4);"
 4319|    938|            "uint8_t mix(uint8_t, uint8_t, bool);"
 4320|    938|            "u8vec2  mix(u8vec2,  u8vec2,  bvec2);"
 4321|    938|            "u8vec3  mix(u8vec3,  u8vec3,  bvec3);"
 4322|    938|            "u8vec4  mix(u8vec4,  u8vec4,  bvec4);"
 4323|       |
 4324|    938|            "bvec2 lessThan(i8vec2, i8vec2);"
 4325|    938|            "bvec3 lessThan(i8vec3, i8vec3);"
 4326|    938|            "bvec4 lessThan(i8vec4, i8vec4);"
 4327|    938|            "bvec2 lessThan(u8vec2, u8vec2);"
 4328|    938|            "bvec3 lessThan(u8vec3, u8vec3);"
 4329|    938|            "bvec4 lessThan(u8vec4, u8vec4);"
 4330|       |
 4331|    938|            "bvec2 lessThanEqual(i8vec2, i8vec2);"
 4332|    938|            "bvec3 lessThanEqual(i8vec3, i8vec3);"
 4333|    938|            "bvec4 lessThanEqual(i8vec4, i8vec4);"
 4334|    938|            "bvec2 lessThanEqual(u8vec2, u8vec2);"
 4335|    938|            "bvec3 lessThanEqual(u8vec3, u8vec3);"
 4336|    938|            "bvec4 lessThanEqual(u8vec4, u8vec4);"
 4337|       |
 4338|    938|            "bvec2 greaterThan(i8vec2, i8vec2);"
 4339|    938|            "bvec3 greaterThan(i8vec3, i8vec3);"
 4340|    938|            "bvec4 greaterThan(i8vec4, i8vec4);"
 4341|    938|            "bvec2 greaterThan(u8vec2, u8vec2);"
 4342|    938|            "bvec3 greaterThan(u8vec3, u8vec3);"
 4343|    938|            "bvec4 greaterThan(u8vec4, u8vec4);"
 4344|       |
 4345|    938|            "bvec2 greaterThanEqual(i8vec2, i8vec2);"
 4346|    938|            "bvec3 greaterThanEqual(i8vec3, i8vec3);"
 4347|    938|            "bvec4 greaterThanEqual(i8vec4, i8vec4);"
 4348|    938|            "bvec2 greaterThanEqual(u8vec2, u8vec2);"
 4349|    938|            "bvec3 greaterThanEqual(u8vec3, u8vec3);"
 4350|    938|            "bvec4 greaterThanEqual(u8vec4, u8vec4);"
 4351|       |
 4352|    938|            "bvec2 equal(i8vec2, i8vec2);"
 4353|    938|            "bvec3 equal(i8vec3, i8vec3);"
 4354|    938|            "bvec4 equal(i8vec4, i8vec4);"
 4355|    938|            "bvec2 equal(u8vec2, u8vec2);"
 4356|    938|            "bvec3 equal(u8vec3, u8vec3);"
 4357|    938|            "bvec4 equal(u8vec4, u8vec4);"
 4358|       |
 4359|    938|            "bvec2 notEqual(i8vec2, i8vec2);"
 4360|    938|            "bvec3 notEqual(i8vec3, i8vec3);"
 4361|    938|            "bvec4 notEqual(i8vec4, i8vec4);"
 4362|    938|            "bvec2 notEqual(u8vec2, u8vec2);"
 4363|    938|            "bvec3 notEqual(u8vec3, u8vec3);"
 4364|    938|            "bvec4 notEqual(u8vec4, u8vec4);"
 4365|       |
 4366|    938|            "  int8_t bitfieldExtract(  int8_t, int8_t, int8_t);"
 4367|    938|            "i8vec2 bitfieldExtract(i8vec2, int8_t, int8_t);"
 4368|    938|            "i8vec3 bitfieldExtract(i8vec3, int8_t, int8_t);"
 4369|    938|            "i8vec4 bitfieldExtract(i8vec4, int8_t, int8_t);"
 4370|       |
 4371|    938|            " uint8_t bitfieldExtract( uint8_t, int8_t, int8_t);"
 4372|    938|            "u8vec2 bitfieldExtract(u8vec2, int8_t, int8_t);"
 4373|    938|            "u8vec3 bitfieldExtract(u8vec3, int8_t, int8_t);"
 4374|    938|            "u8vec4 bitfieldExtract(u8vec4, int8_t, int8_t);"
 4375|       |
 4376|    938|            "  int8_t bitfieldInsert(  int8_t base,   int8_t, int8_t, int8_t);"
 4377|    938|            "i8vec2 bitfieldInsert(i8vec2 base, i8vec2, int8_t, int8_t);"
 4378|    938|            "i8vec3 bitfieldInsert(i8vec3 base, i8vec3, int8_t, int8_t);"
 4379|    938|            "i8vec4 bitfieldInsert(i8vec4 base, i8vec4, int8_t, int8_t);"
 4380|       |
 4381|    938|            " uint8_t bitfieldInsert( uint8_t base,  uint8_t, int8_t, int8_t);"
 4382|    938|            "u8vec2 bitfieldInsert(u8vec2 base, u8vec2, int8_t, int8_t);"
 4383|    938|            "u8vec3 bitfieldInsert(u8vec3 base, u8vec3, int8_t, int8_t);"
 4384|    938|            "u8vec4 bitfieldInsert(u8vec4 base, u8vec4, int8_t, int8_t);"
 4385|       |
 4386|    938|            "  int8_t bitCount(  int8_t);"
 4387|    938|            "i8vec2 bitCount(i8vec2);"
 4388|    938|            "i8vec3 bitCount(i8vec3);"
 4389|    938|            "i8vec4 bitCount(i8vec4);"
 4390|       |
 4391|    938|            "  int8_t bitCount( uint8_t);"
 4392|    938|            "i8vec2 bitCount(u8vec2);"
 4393|    938|            "i8vec3 bitCount(u8vec3);"
 4394|    938|            "i8vec4 bitCount(u8vec4);"
 4395|       |
 4396|    938|            "int8_t bitfieldReverse(highp int8_t);"
 4397|    938|            "i8vec2 bitfieldReverse(highp i8vec2);"
 4398|    938|            "i8vec3 bitfieldReverse(highp i8vec3);"
 4399|    938|            "i8vec4 bitfieldReverse(highp i8vec4);"
 4400|       |
 4401|    938|            "uint8_t bitfieldReverse(highp uint8_t);"
 4402|    938|            "u8vec2  bitfieldReverse(highp u8vec2);"
 4403|    938|            "u8vec3  bitfieldReverse(highp u8vec3);"
 4404|    938|            "u8vec4  bitfieldReverse(highp u8vec4);"
 4405|       |
 4406|    938|            "  int8_t findLSB(  int8_t);"
 4407|    938|            "i8vec2 findLSB(i8vec2);"
 4408|    938|            "i8vec3 findLSB(i8vec3);"
 4409|    938|            "i8vec4 findLSB(i8vec4);"
 4410|       |
 4411|    938|            "  int8_t findLSB( uint8_t);"
 4412|    938|            "i8vec2 findLSB(u8vec2);"
 4413|    938|            "i8vec3 findLSB(u8vec3);"
 4414|    938|            "i8vec4 findLSB(u8vec4);"
 4415|       |
 4416|    938|            "  int8_t findMSB(  int8_t);"
 4417|    938|            "i8vec2 findMSB(i8vec2);"
 4418|    938|            "i8vec3 findMSB(i8vec3);"
 4419|    938|            "i8vec4 findMSB(i8vec4);"
 4420|       |
 4421|    938|            "  int8_t findMSB( uint8_t);"
 4422|    938|            "i8vec2 findMSB(u8vec2);"
 4423|    938|            "i8vec3 findMSB(u8vec3);"
 4424|    938|            "i8vec4 findMSB(u8vec4);"
 4425|       |
 4426|    938|            "int16_t abs(int16_t);"
 4427|    938|            "i16vec2 abs(i16vec2);"
 4428|    938|            "i16vec3 abs(i16vec3);"
 4429|    938|            "i16vec4 abs(i16vec4);"
 4430|       |
 4431|    938|            "int16_t sign(int16_t);"
 4432|    938|            "i16vec2 sign(i16vec2);"
 4433|    938|            "i16vec3 sign(i16vec3);"
 4434|    938|            "i16vec4 sign(i16vec4);"
 4435|       |
 4436|    938|            "int16_t min(int16_t x, int16_t y);"
 4437|    938|            "i16vec2 min(i16vec2 x, int16_t y);"
 4438|    938|            "i16vec3 min(i16vec3 x, int16_t y);"
 4439|    938|            "i16vec4 min(i16vec4 x, int16_t y);"
 4440|    938|            "i16vec2 min(i16vec2 x, i16vec2 y);"
 4441|    938|            "i16vec3 min(i16vec3 x, i16vec3 y);"
 4442|    938|            "i16vec4 min(i16vec4 x, i16vec4 y);"
 4443|       |
 4444|    938|            "uint16_t min(uint16_t x, uint16_t y);"
 4445|    938|            "u16vec2 min(u16vec2 x, uint16_t y);"
 4446|    938|            "u16vec3 min(u16vec3 x, uint16_t y);"
 4447|    938|            "u16vec4 min(u16vec4 x, uint16_t y);"
 4448|    938|            "u16vec2 min(u16vec2 x, u16vec2 y);"
 4449|    938|            "u16vec3 min(u16vec3 x, u16vec3 y);"
 4450|    938|            "u16vec4 min(u16vec4 x, u16vec4 y);"
 4451|       |
 4452|    938|            "int16_t max(int16_t x, int16_t y);"
 4453|    938|            "i16vec2 max(i16vec2 x, int16_t y);"
 4454|    938|            "i16vec3 max(i16vec3 x, int16_t y);"
 4455|    938|            "i16vec4 max(i16vec4 x, int16_t y);"
 4456|    938|            "i16vec2 max(i16vec2 x, i16vec2 y);"
 4457|    938|            "i16vec3 max(i16vec3 x, i16vec3 y);"
 4458|    938|            "i16vec4 max(i16vec4 x, i16vec4 y);"
 4459|       |
 4460|    938|            "uint16_t max(uint16_t x, uint16_t y);"
 4461|    938|            "u16vec2 max(u16vec2 x, uint16_t y);"
 4462|    938|            "u16vec3 max(u16vec3 x, uint16_t y);"
 4463|    938|            "u16vec4 max(u16vec4 x, uint16_t y);"
 4464|    938|            "u16vec2 max(u16vec2 x, u16vec2 y);"
 4465|    938|            "u16vec3 max(u16vec3 x, u16vec3 y);"
 4466|    938|            "u16vec4 max(u16vec4 x, u16vec4 y);"
 4467|       |
 4468|    938|            "int16_t    clamp(int16_t x, int16_t minVal, int16_t maxVal);"
 4469|    938|            "i16vec2  clamp(i16vec2  x, int16_t minVal, int16_t maxVal);"
 4470|    938|            "i16vec3  clamp(i16vec3  x, int16_t minVal, int16_t maxVal);"
 4471|    938|            "i16vec4  clamp(i16vec4  x, int16_t minVal, int16_t maxVal);"
 4472|    938|            "i16vec2  clamp(i16vec2  x, i16vec2  minVal, i16vec2  maxVal);"
 4473|    938|            "i16vec3  clamp(i16vec3  x, i16vec3  minVal, i16vec3  maxVal);"
 4474|    938|            "i16vec4  clamp(i16vec4  x, i16vec4  minVal, i16vec4  maxVal);"
 4475|       |
 4476|    938|            "uint16_t   clamp(uint16_t x, uint16_t minVal, uint16_t maxVal);"
 4477|    938|            "u16vec2  clamp(u16vec2  x, uint16_t minVal, uint16_t maxVal);"
 4478|    938|            "u16vec3  clamp(u16vec3  x, uint16_t minVal, uint16_t maxVal);"
 4479|    938|            "u16vec4  clamp(u16vec4  x, uint16_t minVal, uint16_t maxVal);"
 4480|    938|            "u16vec2  clamp(u16vec2  x, u16vec2  minVal, u16vec2  maxVal);"
 4481|    938|            "u16vec3  clamp(u16vec3  x, u16vec3  minVal, u16vec3  maxVal);"
 4482|    938|            "u16vec4  clamp(u16vec4  x, u16vec4  minVal, u16vec4  maxVal);"
 4483|       |
 4484|    938|            "int16_t  mix(int16_t,  int16_t,  bool);"
 4485|    938|            "i16vec2  mix(i16vec2,  i16vec2,  bvec2);"
 4486|    938|            "i16vec3  mix(i16vec3,  i16vec3,  bvec3);"
 4487|    938|            "i16vec4  mix(i16vec4,  i16vec4,  bvec4);"
 4488|    938|            "uint16_t mix(uint16_t, uint16_t, bool);"
 4489|    938|            "u16vec2  mix(u16vec2,  u16vec2,  bvec2);"
 4490|    938|            "u16vec3  mix(u16vec3,  u16vec3,  bvec3);"
 4491|    938|            "u16vec4  mix(u16vec4,  u16vec4,  bvec4);"
 4492|       |
 4493|    938|            "float16_t frexp(float16_t, out int16_t);"
 4494|    938|            "f16vec2   frexp(f16vec2,   out i16vec2);"
 4495|    938|            "f16vec3   frexp(f16vec3,   out i16vec3);"
 4496|    938|            "f16vec4   frexp(f16vec4,   out i16vec4);"
 4497|       |
 4498|    938|            "float16_t ldexp(float16_t, int16_t);"
 4499|    938|            "f16vec2   ldexp(f16vec2,   i16vec2);"
 4500|    938|            "f16vec3   ldexp(f16vec3,   i16vec3);"
 4501|    938|            "f16vec4   ldexp(f16vec4,   i16vec4);"
 4502|       |
 4503|    938|            "int16_t halfBitsToInt16(float16_t);"
 4504|    938|            "i16vec2 halfBitsToInt16(f16vec2);"
 4505|    938|            "i16vec3 halhBitsToInt16(f16vec3);"
 4506|    938|            "i16vec4 halfBitsToInt16(f16vec4);"
 4507|       |
 4508|    938|            "uint16_t halfBitsToUint16(float16_t);"
 4509|    938|            "u16vec2  halfBitsToUint16(f16vec2);"
 4510|    938|            "u16vec3  halfBitsToUint16(f16vec3);"
 4511|    938|            "u16vec4  halfBitsToUint16(f16vec4);"
 4512|       |
 4513|    938|            "int16_t float16BitsToInt16(float16_t);"
 4514|    938|            "i16vec2 float16BitsToInt16(f16vec2);"
 4515|    938|            "i16vec3 float16BitsToInt16(f16vec3);"
 4516|    938|            "i16vec4 float16BitsToInt16(f16vec4);"
 4517|       |
 4518|    938|            "uint16_t float16BitsToUint16(float16_t);"
 4519|    938|            "u16vec2  float16BitsToUint16(f16vec2);"
 4520|    938|            "u16vec3  float16BitsToUint16(f16vec3);"
 4521|    938|            "u16vec4  float16BitsToUint16(f16vec4);"
 4522|       |
 4523|    938|            "float16_t int16BitsToFloat16(int16_t);"
 4524|    938|            "f16vec2   int16BitsToFloat16(i16vec2);"
 4525|    938|            "f16vec3   int16BitsToFloat16(i16vec3);"
 4526|    938|            "f16vec4   int16BitsToFloat16(i16vec4);"
 4527|       |
 4528|    938|            "float16_t uint16BitsToFloat16(uint16_t);"
 4529|    938|            "f16vec2   uint16BitsToFloat16(u16vec2);"
 4530|    938|            "f16vec3   uint16BitsToFloat16(u16vec3);"
 4531|    938|            "f16vec4   uint16BitsToFloat16(u16vec4);"
 4532|       |
 4533|    938|            "float16_t int16BitsToHalf(int16_t);"
 4534|    938|            "f16vec2   int16BitsToHalf(i16vec2);"
 4535|    938|            "f16vec3   int16BitsToHalf(i16vec3);"
 4536|    938|            "f16vec4   int16BitsToHalf(i16vec4);"
 4537|       |
 4538|    938|            "float16_t uint16BitsToHalf(uint16_t);"
 4539|    938|            "f16vec2   uint16BitsToHalf(u16vec2);"
 4540|    938|            "f16vec3   uint16BitsToHalf(u16vec3);"
 4541|    938|            "f16vec4   uint16BitsToHalf(u16vec4);"
 4542|       |
 4543|    938|            "int      packInt2x16(i16vec2);"
 4544|    938|            "uint     packUint2x16(u16vec2);"
 4545|    938|            "int64_t  packInt4x16(i16vec4);"
 4546|    938|            "uint64_t packUint4x16(u16vec4);"
 4547|    938|            "i16vec2  unpackInt2x16(int);"
 4548|    938|            "u16vec2  unpackUint2x16(uint);"
 4549|    938|            "i16vec4  unpackInt4x16(int64_t);"
 4550|    938|            "u16vec4  unpackUint4x16(uint64_t);"
 4551|       |
 4552|    938|            "bvec2 lessThan(i16vec2, i16vec2);"
 4553|    938|            "bvec3 lessThan(i16vec3, i16vec3);"
 4554|    938|            "bvec4 lessThan(i16vec4, i16vec4);"
 4555|    938|            "bvec2 lessThan(u16vec2, u16vec2);"
 4556|    938|            "bvec3 lessThan(u16vec3, u16vec3);"
 4557|    938|            "bvec4 lessThan(u16vec4, u16vec4);"
 4558|       |
 4559|    938|            "bvec2 lessThanEqual(i16vec2, i16vec2);"
 4560|    938|            "bvec3 lessThanEqual(i16vec3, i16vec3);"
 4561|    938|            "bvec4 lessThanEqual(i16vec4, i16vec4);"
 4562|    938|            "bvec2 lessThanEqual(u16vec2, u16vec2);"
 4563|    938|            "bvec3 lessThanEqual(u16vec3, u16vec3);"
 4564|    938|            "bvec4 lessThanEqual(u16vec4, u16vec4);"
 4565|       |
 4566|    938|            "bvec2 greaterThan(i16vec2, i16vec2);"
 4567|    938|            "bvec3 greaterThan(i16vec3, i16vec3);"
 4568|    938|            "bvec4 greaterThan(i16vec4, i16vec4);"
 4569|    938|            "bvec2 greaterThan(u16vec2, u16vec2);"
 4570|    938|            "bvec3 greaterThan(u16vec3, u16vec3);"
 4571|    938|            "bvec4 greaterThan(u16vec4, u16vec4);"
 4572|       |
 4573|    938|            "bvec2 greaterThanEqual(i16vec2, i16vec2);"
 4574|    938|            "bvec3 greaterThanEqual(i16vec3, i16vec3);"
 4575|    938|            "bvec4 greaterThanEqual(i16vec4, i16vec4);"
 4576|    938|            "bvec2 greaterThanEqual(u16vec2, u16vec2);"
 4577|    938|            "bvec3 greaterThanEqual(u16vec3, u16vec3);"
 4578|    938|            "bvec4 greaterThanEqual(u16vec4, u16vec4);"
 4579|       |
 4580|    938|            "bvec2 equal(i16vec2, i16vec2);"
 4581|    938|            "bvec3 equal(i16vec3, i16vec3);"
 4582|    938|            "bvec4 equal(i16vec4, i16vec4);"
 4583|    938|            "bvec2 equal(u16vec2, u16vec2);"
 4584|    938|            "bvec3 equal(u16vec3, u16vec3);"
 4585|    938|            "bvec4 equal(u16vec4, u16vec4);"
 4586|       |
 4587|    938|            "bvec2 notEqual(i16vec2, i16vec2);"
 4588|    938|            "bvec3 notEqual(i16vec3, i16vec3);"
 4589|    938|            "bvec4 notEqual(i16vec4, i16vec4);"
 4590|    938|            "bvec2 notEqual(u16vec2, u16vec2);"
 4591|    938|            "bvec3 notEqual(u16vec3, u16vec3);"
 4592|    938|            "bvec4 notEqual(u16vec4, u16vec4);"
 4593|       |
 4594|    938|            "  int16_t bitfieldExtract(  int16_t, int16_t, int16_t);"
 4595|    938|            "i16vec2 bitfieldExtract(i16vec2, int16_t, int16_t);"
 4596|    938|            "i16vec3 bitfieldExtract(i16vec3, int16_t, int16_t);"
 4597|    938|            "i16vec4 bitfieldExtract(i16vec4, int16_t, int16_t);"
 4598|       |
 4599|    938|            " uint16_t bitfieldExtract( uint16_t, int16_t, int16_t);"
 4600|    938|            "u16vec2 bitfieldExtract(u16vec2, int16_t, int16_t);"
 4601|    938|            "u16vec3 bitfieldExtract(u16vec3, int16_t, int16_t);"
 4602|    938|            "u16vec4 bitfieldExtract(u16vec4, int16_t, int16_t);"
 4603|       |
 4604|    938|            "  int16_t bitfieldInsert(  int16_t base,   int16_t, int16_t, int16_t);"
 4605|    938|            "i16vec2 bitfieldInsert(i16vec2 base, i16vec2, int16_t, int16_t);"
 4606|    938|            "i16vec3 bitfieldInsert(i16vec3 base, i16vec3, int16_t, int16_t);"
 4607|    938|            "i16vec4 bitfieldInsert(i16vec4 base, i16vec4, int16_t, int16_t);"
 4608|       |
 4609|    938|            " uint16_t bitfieldInsert( uint16_t base,  uint16_t, int16_t, int16_t);"
 4610|    938|            "u16vec2 bitfieldInsert(u16vec2 base, u16vec2, int16_t, int16_t);"
 4611|    938|            "u16vec3 bitfieldInsert(u16vec3 base, u16vec3, int16_t, int16_t);"
 4612|    938|            "u16vec4 bitfieldInsert(u16vec4 base, u16vec4, int16_t, int16_t);"
 4613|       |
 4614|    938|            "  int16_t bitCount(  int16_t);"
 4615|    938|            "i16vec2 bitCount(i16vec2);"
 4616|    938|            "i16vec3 bitCount(i16vec3);"
 4617|    938|            "i16vec4 bitCount(i16vec4);"
 4618|       |
 4619|    938|            "  int16_t bitCount( uint16_t);"
 4620|    938|            "i16vec2 bitCount(u16vec2);"
 4621|    938|            "i16vec3 bitCount(u16vec3);"
 4622|    938|            "i16vec4 bitCount(u16vec4);"
 4623|       |
 4624|    938|            "int16_t bitfieldReverse(highp int16_t);"
 4625|    938|            "i16vec2 bitfieldReverse(highp i16vec2);"
 4626|    938|            "i16vec3 bitfieldReverse(highp i16vec3);"
 4627|    938|            "i16vec4 bitfieldReverse(highp i16vec4);"
 4628|       |
 4629|    938|            "uint16_t bitfieldReverse(highp uint16_t);"
 4630|    938|            "u16vec2  bitfieldReverse(highp u16vec2);"
 4631|    938|            "u16vec3  bitfieldReverse(highp u16vec3);"
 4632|    938|            "u16vec4  bitfieldReverse(highp u16vec4);"
 4633|       |
 4634|    938|            "  int16_t findLSB(  int16_t);"
 4635|    938|            "i16vec2 findLSB(i16vec2);"
 4636|    938|            "i16vec3 findLSB(i16vec3);"
 4637|    938|            "i16vec4 findLSB(i16vec4);"
 4638|       |
 4639|    938|            "  int16_t findLSB( uint16_t);"
 4640|    938|            "i16vec2 findLSB(u16vec2);"
 4641|    938|            "i16vec3 findLSB(u16vec3);"
 4642|    938|            "i16vec4 findLSB(u16vec4);"
 4643|       |
 4644|    938|            "  int16_t findMSB(  int16_t);"
 4645|    938|            "i16vec2 findMSB(i16vec2);"
 4646|    938|            "i16vec3 findMSB(i16vec3);"
 4647|    938|            "i16vec4 findMSB(i16vec4);"
 4648|       |
 4649|    938|            "  int16_t findMSB( uint16_t);"
 4650|    938|            "i16vec2 findMSB(u16vec2);"
 4651|    938|            "i16vec3 findMSB(u16vec3);"
 4652|    938|            "i16vec4 findMSB(u16vec4);"
 4653|       |
 4654|    938|            "int16_t  pack16(i8vec2);"
 4655|    938|            "uint16_t pack16(u8vec2);"
 4656|    938|            "int32_t  pack32(i8vec4);"
 4657|    938|            "uint32_t pack32(u8vec4);"
 4658|    938|            "int32_t  pack32(i16vec2);"
 4659|    938|            "uint32_t pack32(u16vec2);"
 4660|    938|            "int64_t  pack64(i16vec4);"
 4661|    938|            "uint64_t pack64(u16vec4);"
 4662|    938|            "int64_t  pack64(i32vec2);"
 4663|    938|            "uint64_t pack64(u32vec2);"
 4664|       |
 4665|    938|            "i8vec2   unpack8(int16_t);"
 4666|    938|            "u8vec2   unpack8(uint16_t);"
 4667|    938|            "i8vec4   unpack8(int32_t);"
 4668|    938|            "u8vec4   unpack8(uint32_t);"
 4669|    938|            "i16vec2  unpack16(int32_t);"
 4670|    938|            "u16vec2  unpack16(uint32_t);"
 4671|    938|            "i16vec4  unpack16(int64_t);"
 4672|    938|            "u16vec4  unpack16(uint64_t);"
 4673|    938|            "i32vec2  unpack32(int64_t);"
 4674|    938|            "u32vec2  unpack32(uint64_t);"
 4675|       |
 4676|       |            // GL_EXT_expect_assume
 4677|    938|            "int8_t expectEXT(int8_t, int8_t);"
 4678|    938|            "i8vec2 expectEXT(i8vec2, i8vec2);"
 4679|    938|            "i8vec3 expectEXT(i8vec3, i8vec3);"
 4680|    938|            "i8vec4 expectEXT(i8vec4, i8vec4);"
 4681|       |
 4682|    938|            "uint8_t expectEXT(uint8_t, uint8_t);"
 4683|    938|            "u8vec2 expectEXT(u8vec2, u8vec2);"
 4684|    938|            "u8vec3 expectEXT(u8vec3, u8vec3);"
 4685|    938|            "u8vec4 expectEXT(u8vec4, u8vec4);"
 4686|       |
 4687|    938|            "int16_t expectEXT(int16_t, int16_t);"
 4688|    938|            "i16vec2 expectEXT(i16vec2, i16vec2);"
 4689|    938|            "i16vec3 expectEXT(i16vec3, i16vec3);"
 4690|    938|            "i16vec4 expectEXT(i16vec4, i16vec4);"
 4691|       |
 4692|    938|            "uint16_t expectEXT(uint16_t, uint16_t);"
 4693|    938|            "u16vec2 expectEXT(u16vec2, u16vec2);"
 4694|    938|            "u16vec3 expectEXT(u16vec3, u16vec3);"
 4695|    938|            "u16vec4 expectEXT(u16vec4, u16vec4);"
 4696|       |
 4697|    938|            "int64_t expectEXT(int64_t, int64_t);"
 4698|    938|            "i64vec2 expectEXT(i64vec2, i64vec2);"
 4699|    938|            "i64vec3 expectEXT(i64vec3, i64vec3);"
 4700|    938|            "i64vec4 expectEXT(i64vec4, i64vec4);"
 4701|       |
 4702|    938|            "uint64_t expectEXT(uint64_t, uint64_t);"
 4703|    938|            "u64vec2 expectEXT(u64vec2, u64vec2);"
 4704|    938|            "u64vec3 expectEXT(u64vec3, u64vec3);"
 4705|    938|            "u64vec4 expectEXT(u64vec4, u64vec4);"
 4706|    938|            "\n");
 4707|    938|    }
 4708|       |
 4709|       |    // Builtins for GL_EXT_texture_shadow_lod
 4710|  1.11k|    if ((profile == EEsProfile && version >= 300) || ((profile != EEsProfile && version >= 130))) { 
  ------------------
  |  Branch (4710:10): [True: 654, False: 459]
  |  Branch (4710:35): [True: 494, False: 160]
  |  Branch (4710:56): [True: 459, False: 160]
  |  Branch (4710:81): [True: 459, False: 0]
  ------------------
 4711|    953|        commonBuiltins.append(
 4712|    953|            "float texture(sampler2DArrayShadow, vec4, float);"
 4713|    953|            "float texture(samplerCubeArrayShadow, vec4, float, float);"
 4714|    953|            "float textureLod(sampler2DArrayShadow, vec4, float);"
 4715|    953|            "float textureLod(samplerCubeShadow, vec4, float);"
 4716|    953|            "float textureLod(samplerCubeArrayShadow, vec4, float, float);"
 4717|    953|            "float textureLodOffset(sampler2DArrayShadow, vec4, float, ivec2);"
 4718|    953|            "float textureOffset(sampler2DArrayShadow, vec4 , ivec2, float);"
 4719|    953|            "\n");
 4720|    953|    }
 4721|       |
 4722|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (4722:9): [True: 459, False: 654]
  |  Branch (4722:34): [True: 444, False: 15]
  ------------------
 4723|    444|        stageBuiltins[EShLangFragment].append(derivativesAndControl64bits);
 4724|    444|        stageBuiltins[EShLangFragment].append(
 4725|    444|            "float64_t interpolateAtCentroid(float64_t);"
 4726|    444|            "f64vec2   interpolateAtCentroid(f64vec2);"
 4727|    444|            "f64vec3   interpolateAtCentroid(f64vec3);"
 4728|    444|            "f64vec4   interpolateAtCentroid(f64vec4);"
 4729|       |
 4730|    444|            "float64_t interpolateAtSample(float64_t, int);"
 4731|    444|            "f64vec2   interpolateAtSample(f64vec2,   int);"
 4732|    444|            "f64vec3   interpolateAtSample(f64vec3,   int);"
 4733|    444|            "f64vec4   interpolateAtSample(f64vec4,   int);"
 4734|       |
 4735|    444|            "float64_t interpolateAtOffset(float64_t, f64vec2);"
 4736|    444|            "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
 4737|    444|            "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
 4738|    444|            "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
 4739|       |
 4740|    444|            "\n");
 4741|       |
 4742|    444|    }
 4743|       |
 4744|       |    // GL_EXT_expect_assume
 4745|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (4745:10): [True: 654, False: 459]
  |  Branch (4745:35): [True: 494, False: 160]
  ------------------
 4746|    953|         ((profile != EEsProfile && version >= 140))) {
  ------------------
  |  Branch (4746:12): [True: 459, False: 160]
  |  Branch (4746:37): [True: 459, False: 0]
  ------------------
 4747|    953|        commonBuiltins.append(
 4748|    953|            "void assumeEXT(bool);"
 4749|       |
 4750|    953|            "bool expectEXT(bool, bool);"
 4751|    953|            "bvec2 expectEXT(bvec2, bvec2);"
 4752|    953|            "bvec3 expectEXT(bvec3, bvec3);"
 4753|    953|            "bvec4 expectEXT(bvec4, bvec4);"
 4754|       |
 4755|    953|            "int expectEXT(int, int);"
 4756|    953|            "ivec2 expectEXT(ivec2, ivec2);"
 4757|    953|            "ivec3 expectEXT(ivec3, ivec3);"
 4758|    953|            "ivec4 expectEXT(ivec4, ivec4);"
 4759|       |
 4760|    953|            "uint expectEXT(uint, uint);"
 4761|    953|            "uvec2 expectEXT(uvec2, uvec2);"
 4762|    953|            "uvec3 expectEXT(uvec3, uvec3);"
 4763|    953|            "uvec4 expectEXT(uvec4, uvec4);"
 4764|    953|            "\n");
 4765|    953|    }
 4766|       |
 4767|       |    // QCOM_image_processing
 4768|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (4768:10): [True: 654, False: 459]
  |  Branch (4768:35): [True: 494, False: 160]
  ------------------
 4769|    953|         (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (4769:11): [True: 459, False: 160]
  |  Branch (4769:36): [True: 459, False: 0]
  ------------------
 4770|    953|        commonBuiltins.append(
 4771|    953|           "vec4 textureWeightedQCOM(sampler2D, vec2, sampler2DArray);"
 4772|    953|           "vec4 textureWeightedQCOM(sampler2D, vec2, sampler1DArray);"
 4773|    953|           "vec4 textureBoxFilterQCOM(sampler2D, vec2, vec2);"
 4774|    953|           "vec4 textureBlockMatchSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4775|    953|           "vec4 textureBlockMatchSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4776|       |
 4777|    953|           "vec4 textureBlockMatchWindowSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4778|    953|           "vec4 textureBlockMatchWindowSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4779|    953|           "vec4 textureBlockMatchGatherSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4780|    953|           "vec4 textureBlockMatchGatherSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4781|    953|           "\n");
 4782|    953|    }
 4783|       |
 4784|       |    //============================================================================
 4785|       |    //
 4786|       |    // Prototypes for built-in functions seen by vertex shaders only.
 4787|       |    // (Except legacy lod functions, where it depends which release they are
 4788|       |    // vertex only.)
 4789|       |    //
 4790|       |    //============================================================================
 4791|       |
 4792|       |    //
 4793|       |    // Geometric Functions.
 4794|       |    //
 4795|  1.11k|    if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
  ------------------
  |  Branch (4795:9): [True: 920, False: 193]
  |  Branch (4795:35): [True: 0, False: 920]
  ------------------
 4796|      0|        stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 4797|       |
 4798|       |    //
 4799|       |    // Original-style texture Functions with lod.
 4800|       |    //
 4801|  1.11k|    TString* s;
 4802|  1.11k|    if (version == 100)
  ------------------
  |  Branch (4802:9): [True: 160, False: 953]
  ------------------
 4803|    160|        s = &stageBuiltins[EShLangVertex];
 4804|    953|    else
 4805|    953|        s = &commonBuiltins;
 4806|  1.11k|    if ((profile == EEsProfile && version == 100) ||
  ------------------
  |  Branch (4806:10): [True: 654, False: 459]
  |  Branch (4806:35): [True: 160, False: 494]
  ------------------
 4807|    953|         profile == ECompatibilityProfile ||
  ------------------
  |  Branch (4807:10): [True: 0, False: 953]
  ------------------
 4808|    953|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (4808:10): [True: 452, False: 501]
  |  Branch (4808:37): [True: 4, False: 448]
  ------------------
 4809|    949|         profile == ENoProfile) {
  ------------------
  |  Branch (4809:10): [True: 7, False: 942]
  ------------------
 4810|    171|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (4810:13): [True: 160, False: 11]
  ------------------
 4811|    160|            s->append(
 4812|    160|                "vec4 texture2DLod(sampler2D, vec2, float);"         // GL_ARB_shader_texture_lod
 4813|    160|                "vec4 texture2DProjLod(sampler2D, vec3, float);"     // GL_ARB_shader_texture_lod
 4814|    160|                "vec4 texture2DProjLod(sampler2D, vec4, float);"     // GL_ARB_shader_texture_lod
 4815|    160|                "vec4 texture3DLod(sampler3D, vec3, float);"         // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
 4816|    160|                "vec4 texture3DProjLod(sampler3D, vec4, float);"     // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
 4817|    160|                "vec4 textureCubeLod(samplerCube, vec3, float);"     // GL_ARB_shader_texture_lod
 4818|       |
 4819|    160|                "\n");
 4820|    160|        }
 4821|    171|    }
 4822|  1.11k|    if ( profile == ECompatibilityProfile ||
  ------------------
  |  Branch (4822:10): [True: 0, False: 1.11k]
  ------------------
 4823|  1.11k|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (4823:10): [True: 452, False: 661]
  |  Branch (4823:37): [True: 4, False: 448]
  ------------------
 4824|  1.10k|         profile == ENoProfile) {
  ------------------
  |  Branch (4824:10): [True: 7, False: 1.10k]
  ------------------
 4825|     11|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (4825:13): [True: 0, False: 11]
  ------------------
 4826|      0|            s->append(
 4827|      0|                "vec4 texture1DLod(sampler1D, float, float);"                          // GL_ARB_shader_texture_lod
 4828|      0|                "vec4 texture1DProjLod(sampler1D, vec2, float);"                       // GL_ARB_shader_texture_lod
 4829|      0|                "vec4 texture1DProjLod(sampler1D, vec4, float);"                       // GL_ARB_shader_texture_lod
 4830|      0|                "vec4 shadow1DLod(sampler1DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
 4831|      0|                "vec4 shadow2DLod(sampler2DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
 4832|      0|                "vec4 shadow1DProjLod(sampler1DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
 4833|      0|                "vec4 shadow2DProjLod(sampler2DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
 4834|       |
 4835|      0|                "vec4 texture1DGradARB(sampler1D, float, float, float);"               // GL_ARB_shader_texture_lod
 4836|      0|                "vec4 texture1DProjGradARB(sampler1D, vec2, float, float);"            // GL_ARB_shader_texture_lod
 4837|      0|                "vec4 texture1DProjGradARB(sampler1D, vec4, float, float);"            // GL_ARB_shader_texture_lod
 4838|      0|                "vec4 texture2DGradARB(sampler2D, vec2, vec2, vec2);"                  // GL_ARB_shader_texture_lod
 4839|      0|                "vec4 texture2DProjGradARB(sampler2D, vec3, vec2, vec2);"              // GL_ARB_shader_texture_lod
 4840|      0|                "vec4 texture2DProjGradARB(sampler2D, vec4, vec2, vec2);"              // GL_ARB_shader_texture_lod
 4841|      0|                "vec4 texture3DGradARB(sampler3D, vec3, vec3, vec3);"                  // GL_ARB_shader_texture_lod
 4842|      0|                "vec4 texture3DProjGradARB(sampler3D, vec4, vec3, vec3);"              // GL_ARB_shader_texture_lod
 4843|      0|                "vec4 textureCubeGradARB(samplerCube, vec3, vec3, vec3);"              // GL_ARB_shader_texture_lod
 4844|      0|                "vec4 shadow1DGradARB(sampler1DShadow, vec3, float, float);"           // GL_ARB_shader_texture_lod
 4845|      0|                "vec4 shadow1DProjGradARB( sampler1DShadow, vec4, float, float);"      // GL_ARB_shader_texture_lod
 4846|      0|                "vec4 shadow2DGradARB(sampler2DShadow, vec3, vec2, vec2);"             // GL_ARB_shader_texture_lod
 4847|      0|                "vec4 shadow2DProjGradARB( sampler2DShadow, vec4, vec2, vec2);"        // GL_ARB_shader_texture_lod
 4848|      0|                "vec4 texture2DRectGradARB(sampler2DRect, vec2, vec2, vec2);"          // GL_ARB_shader_texture_lod
 4849|      0|                "vec4 texture2DRectProjGradARB( sampler2DRect, vec3, vec2, vec2);"     // GL_ARB_shader_texture_lod
 4850|      0|                "vec4 texture2DRectProjGradARB( sampler2DRect, vec4, vec2, vec2);"     // GL_ARB_shader_texture_lod
 4851|      0|                "vec4 shadow2DRectGradARB( sampler2DRectShadow, vec3, vec2, vec2);"    // GL_ARB_shader_texture_lod
 4852|      0|                "vec4 shadow2DRectProjGradARB(sampler2DRectShadow, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod
 4853|       |
 4854|      0|                "\n");
 4855|      0|        }
 4856|     11|    }
 4857|       |
 4858|  1.11k|    if ((profile != EEsProfile && version >= 150) ||
  ------------------
  |  Branch (4858:10): [True: 459, False: 654]
  |  Branch (4858:35): [True: 459, False: 0]
  ------------------
 4859|    953|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (4859:10): [True: 654, False: 0]
  |  Branch (4859:35): [True: 494, False: 160]
  ------------------
 4860|       |        //============================================================================
 4861|       |        //
 4862|       |        // Prototypes for built-in functions seen by geometry shaders only.
 4863|       |        //
 4864|       |        //============================================================================
 4865|    953|        if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (4865:13): [True: 459, False: 494]
  |  Branch (4865:38): [True: 459, False: 0]
  ------------------
 4866|    459|            stageBuiltins[EShLangGeometry].append(
 4867|    459|                "void EmitStreamVertex(int);"
 4868|    459|                "void EndStreamPrimitive(int);"
 4869|    459|                );
 4870|    459|        }
 4871|    953|        stageBuiltins[EShLangGeometry].append(
 4872|    953|            "void EmitVertex();"
 4873|    953|            "void EndPrimitive();"
 4874|    953|            "\n");
 4875|    953|    }
 4876|       |
 4877|       |    //============================================================================
 4878|       |    //
 4879|       |    // Prototypes for all control functions.
 4880|       |    //
 4881|       |    //============================================================================
 4882|  1.11k|    bool esBarrier = (profile == EEsProfile && version >= 310);
  ------------------
  |  Branch (4882:23): [True: 654, False: 459]
  |  Branch (4882:48): [True: 494, False: 160]
  ------------------
 4883|  1.11k|    if ((profile != EEsProfile && version >= 150) || esBarrier)
  ------------------
  |  Branch (4883:10): [True: 459, False: 654]
  |  Branch (4883:35): [True: 459, False: 0]
  |  Branch (4883:54): [True: 494, False: 160]
  ------------------
 4884|    953|        stageBuiltins[EShLangTessControl].append(
 4885|    953|            "void barrier();"
 4886|    953|            );
 4887|  1.11k|    if ((profile != EEsProfile && version >= 420) || esBarrier)
  ------------------
  |  Branch (4887:10): [True: 459, False: 654]
  |  Branch (4887:35): [True: 448, False: 11]
  |  Branch (4887:54): [True: 494, False: 171]
  ------------------
 4888|    942|        stageBuiltins[EShLangCompute].append(
 4889|    942|            "void barrier();"
 4890|    942|            );
 4891|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (4891:10): [True: 459, False: 654]
  |  Branch (4891:35): [True: 444, False: 15]
  |  Branch (4891:55): [True: 654, False: 15]
  |  Branch (4891:80): [True: 3, False: 651]
  ------------------
 4892|    447|        stageBuiltins[EShLangMesh].append(
 4893|    447|            "void barrier();"
 4894|    447|            );
 4895|    447|        stageBuiltins[EShLangTask].append(
 4896|    447|            "void barrier();"
 4897|    447|            );
 4898|    447|    }
 4899|  1.11k|    if ((profile != EEsProfile && version >= 420) || esBarrier)
  ------------------
  |  Branch (4899:10): [True: 459, False: 654]
  |  Branch (4899:35): [True: 448, False: 11]
  |  Branch (4899:54): [True: 494, False: 171]
  ------------------
 4900|    942|        stageBuiltins[EShLangCompute].append(
 4901|    942|            "void controlBarrierArrive();"
 4902|    942|            "void controlBarrierWait();"
 4903|    942|            );
 4904|  1.11k|    if ((profile != EEsProfile && version >= 130) || esBarrier)
  ------------------
  |  Branch (4904:10): [True: 459, False: 654]
  |  Branch (4904:35): [True: 459, False: 0]
  |  Branch (4904:54): [True: 494, False: 160]
  ------------------
 4905|    953|        commonBuiltins.append(
 4906|    953|            "void memoryBarrier();"
 4907|    953|            );
 4908|  1.11k|    if ((profile != EEsProfile && version >= 420) || esBarrier) {
  ------------------
  |  Branch (4908:10): [True: 459, False: 654]
  |  Branch (4908:35): [True: 448, False: 11]
  |  Branch (4908:54): [True: 494, False: 171]
  ------------------
 4909|    942|        commonBuiltins.append(
 4910|    942|            "void memoryBarrierBuffer();"
 4911|    942|            );
 4912|    942|        stageBuiltins[EShLangCompute].append(
 4913|    942|            "void memoryBarrierShared();"
 4914|    942|            "void groupMemoryBarrier();"
 4915|    942|            );
 4916|    942|    }
 4917|  1.11k|    if ((profile != EEsProfile && version >= 420) || esBarrier) {
  ------------------
  |  Branch (4917:10): [True: 459, False: 654]
  |  Branch (4917:35): [True: 448, False: 11]
  |  Branch (4917:54): [True: 494, False: 171]
  ------------------
 4918|    942|        if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (4918:13): [True: 889, False: 53]
  |  Branch (4918:39): [True: 0, False: 53]
  ------------------
 4919|    889|            commonBuiltins.append("void memoryBarrierAtomicCounter();");
 4920|    889|        }
 4921|    942|        commonBuiltins.append("void memoryBarrierImage();");
 4922|    942|    }
 4923|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (4923:10): [True: 459, False: 654]
  |  Branch (4923:35): [True: 444, False: 15]
  |  Branch (4923:55): [True: 654, False: 15]
  |  Branch (4923:80): [True: 3, False: 651]
  ------------------
 4924|    447|        stageBuiltins[EShLangMesh].append(
 4925|    447|            "void memoryBarrierShared();"
 4926|    447|            "void groupMemoryBarrier();"
 4927|    447|        );
 4928|    447|        stageBuiltins[EShLangTask].append(
 4929|    447|            "void memoryBarrierShared();"
 4930|    447|            "void groupMemoryBarrier();"
 4931|    447|        );
 4932|    447|    }
 4933|       |
 4934|  1.11k|    commonBuiltins.append("void controlBarrier(int, int, int, int);\n"
 4935|  1.11k|                          "void memoryBarrier(int, int, int);\n");
 4936|       |
 4937|  1.11k|    commonBuiltins.append("void controlBarrierArrive(int, int, int, int);\n"
 4938|  1.11k|                          "void controlBarrierWait(int, int, int, int);\n");
 4939|       |
 4940|  1.11k|    commonBuiltins.append("void debugPrintfEXT();\n");
 4941|       |
 4942|  1.11k|    commonBuiltins.append("void abortEXT();\n");
 4943|       |
 4944|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (4944:9): [True: 459, False: 654]
  |  Branch (4944:34): [True: 444, False: 15]
  ------------------
 4945|       |        // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
 4946|       |        // adding it introduces undesirable tempArgs on the stack. What we want
 4947|       |        // is more like "buf" thought of as a pointer value being an in parameter.
 4948|    444|        stageBuiltins[EShLangCompute].append(
 4949|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal float16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4950|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal float[] buf, uint element, uint stride, bool colMajor);\n"
 4951|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4952|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4953|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4954|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4955|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4956|    444|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4957|       |
 4958|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4959|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float[] buf, uint element, uint stride, bool colMajor);\n"
 4960|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4961|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4962|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4963|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4964|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4965|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4966|    444|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4967|       |
 4968|    444|            "fcoopmatNV coopMatMulAddNV(fcoopmatNV A, fcoopmatNV B, fcoopmatNV C);\n"
 4969|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4970|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4971|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 4972|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4973|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 4974|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 4975|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4976|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4977|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4978|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4979|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4980|    444|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4981|       |
 4982|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4983|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4984|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 4985|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4986|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 4987|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 4988|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4989|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4990|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4991|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4992|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4993|    444|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4994|       |
 4995|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4996|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4997|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 4998|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4999|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 5000|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 5001|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 5002|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 5003|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 5004|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 5005|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 5006|    444|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 5007|       |
 5008|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 5009|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 5010|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 5011|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 5012|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 5013|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 5014|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 5015|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 5016|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 5017|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 5018|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 5019|    444|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 5020|       |
 5021|    444|            "icoopmatNV coopMatMulAddNV(icoopmatNV A, icoopmatNV B, icoopmatNV C);\n"
 5022|    444|            "ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n"
 5023|    444|            );
 5024|       |
 5025|    444|        std::stringstream cooperativeMatrixFuncs;
 5026|       |
 5027|    444|        {
 5028|    444|            static const char *allTypes[] =
 5029|    444|            {
 5030|    444|                "float", "vec2", "vec4",
 5031|    444|                "float16_t", "f16vec2", "f16vec4",
 5032|    444|                "bfloat16_t", "bf16vec2", "bf16vec4",
 5033|    444|                "floate5m2_t", "fe5m2vec2", "fe5m2vec4",
 5034|    444|                "floate4m3_t", "fe4m3vec2", "fe4m3vec4",
 5035|    444|                "double", "dvec2", "dvec4",
 5036|    444|                "int8_t", "i8vec2", "i8vec4",
 5037|    444|                "int16_t", "i16vec2", "i16vec4",
 5038|    444|                "int", "ivec2", "ivec4",
 5039|    444|                "int64_t", "i64vec2", "i64vec4",
 5040|    444|                "uint8_t", "u8vec2", "u8vec4",
 5041|    444|                "uint16_t", "u16vec2", "u16vec4",
 5042|    444|                "uint", "uvec2", "uvec4",
 5043|    444|                "uint64_t", "u64vec2", "u64vec4",
 5044|    444|            };
 5045|    888|            for (auto elemTy : {"uint", "uint64_t"}) {
  ------------------
  |  Branch (5045:30): [True: 888, False: 444]
  ------------------
 5046|  37.2k|                for (auto t : allTypes) {
  ------------------
  |  Branch (5046:29): [True: 37.2k, False: 888]
  ------------------
 5047|  37.2k|                    cooperativeMatrixFuncs << "void coopMatLoad(out coopmat m, volatile coherent nontemporal " << t << "[] buf, " << elemTy << " element, uint stride, int matrixLayout);\n";
 5048|  37.2k|                    cooperativeMatrixFuncs << "void coopMatStore(coopmat m, volatile coherent nontemporal " << t << "[] buf, " << elemTy << " element, uint stride, int matrixLayout);\n";
 5049|  37.2k|                }
 5050|       |                // Just use uint8_t for buffer type, we have special matching rules to allow any conversion
 5051|    888|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t);\n";
 5052|    888|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v);\n";
 5053|    888|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, __function f);\n";
 5054|    888|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v, __function f);\n";
 5055|    888|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, __function f, __function g);\n";
 5056|    888|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v, __function f, __function g);\n";
 5057|    888|                cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t);\n";
 5058|    888|                cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v);\n";
 5059|    888|            }
 5060|    444|        }
 5061|       |
 5062|    444|        cooperativeMatrixFuncs <<
 5063|    444|            "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C);\n"
 5064|    444|            "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C, int matrixOperands);\n";
 5065|       |
 5066|    444|        commonBuiltins.append(cooperativeMatrixFuncs.str().c_str());
 5067|       |
 5068|    444|        commonBuiltins.append(
 5069|    444|            "const int gl_MatrixUseA = 0;\n"
 5070|    444|            "const int gl_MatrixUseB = 1;\n"
 5071|    444|            "const int gl_MatrixUseAccumulator = 2;\n"
 5072|    444|            "const int gl_MatrixOperandsSaturatingAccumulation = 0x10;\n"
 5073|    444|            "const int gl_CooperativeMatrixLayoutRowMajor = 0;\n"
 5074|    444|            "const int gl_CooperativeMatrixLayoutColumnMajor = 1;\n"
 5075|    444|            "const int gl_CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202;\n"
 5076|    444|            "const int gl_CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203;\n"
 5077|    444|            "\n"
 5078|    444|            );
 5079|       |
 5080|    444|        commonBuiltins.append(
 5081|    444|            "void coopMatTransposeNV(out coopmat, coopmat);"
 5082|    444|            "void coopMatReduceNV(out coopmat, coopmat, int, __function);"
 5083|    444|            "void coopMatPerElementNV();"
 5084|    444|        );
 5085|       |
 5086|    444|        commonBuiltins.append(
 5087|    444|            "void coopMatTransposeEXT(out coopmat, coopmat);"
 5088|    444|            "void coopMatReduceEXT(out coopmat, coopmat, int, __function);"
 5089|    444|            "void coopMatPerElementEXT();"
 5090|    444|            "uvec2 coopMatGetCoordinateEXT(coopmat, uint index);"
 5091|    444|        );
 5092|       |
 5093|    444|        commonBuiltins.append(
 5094|    444|            "const int gl_CooperativeMatrixReduceRowNV = 0x1;\n"
 5095|    444|            "const int gl_CooperativeMatrixReduceColumnNV = 0x2;\n"
 5096|    444|            "const int gl_CooperativeMatrixReduceRowAndColumnNV = 0x3;\n"
 5097|    444|            "const int gl_CooperativeMatrixReduce2x2NV = 0x4;\n"
 5098|       |
 5099|    444|            "const int gl_CooperativeMatrixReduceRowEXT = 0x1;\n"
 5100|    444|            "const int gl_CooperativeMatrixReduceColumnEXT = 0x2;\n"
 5101|    444|            "const int gl_CooperativeMatrixReduceRowAndColumnEXT = 0x3;\n"
 5102|    444|            "const int gl_CooperativeMatrixReduce2x2EXT = 0x4;\n"
 5103|    444|            "\n"
 5104|    444|            );
 5105|       |
 5106|    444|        commonBuiltins.append(
 5107|    444|            "const int gl_CooperativeMatrixClampModeUndefinedNV = 0x0;\n"
 5108|    444|            "const int gl_CooperativeMatrixClampModeConstantNV = 0x1;\n"
 5109|    444|            "const int gl_CooperativeMatrixClampModeClampToEdgeNV = 0x2;\n"
 5110|    444|            "const int gl_CooperativeMatrixClampModeRepeatNV = 0x3;\n"
 5111|    444|            "const int gl_CooperativeMatrixClampModeMirrorRepeatNV = 0x4;\n"
 5112|    444|            "\n"
 5113|    444|            );
 5114|       |
 5115|    444|        {
 5116|    444|          std::stringstream coopMatConvFuncs;
 5117|       |
 5118|    444|          const std::string eltTypes[] = {"uint32_t", "uint", "int32_t", "int", "float32_t", "float", "float16_t"};
 5119|       |
 5120|  3.10k|          for (auto srcEltTy : eltTypes) {
  ------------------
  |  Branch (5120:30): [True: 3.10k, False: 444]
  ------------------
 5121|  21.7k|            for (auto dstEltTy : eltTypes) {
  ------------------
  |  Branch (5121:32): [True: 21.7k, False: 3.10k]
  ------------------
 5122|  21.7k|              coopMatConvFuncs << "void bitcastQCOM(" << srcEltTy.c_str() << " SrcArr[], " << dstEltTy.c_str()
 5123|  21.7k|                << " DstArr[]);\n";
 5124|  21.7k|            }
 5125|  3.10k|          }
 5126|    444|          coopMatConvFuncs << "\n";
 5127|       |
 5128|  3.55k|          for (auto eltTy : {"float32_t", "float16_t", "int8_t", "uint8_t", "uint32_t", "uint", "int32_t", "int"}) {
  ------------------
  |  Branch (5128:27): [True: 3.55k, False: 444]
  ------------------
 5129|  3.55k|            coopMatConvFuncs << "void vectorToCoopmatQCOM(" << eltTy << " SrcVec[], coopmat CM);\n";
 5130|  3.55k|            coopMatConvFuncs << "void coopmatToVectorQCOM(coopmat CM, " << eltTy << " Dstvec[]);\n";
 5131|  3.55k|          }
 5132|       |
 5133|  3.10k|          for (auto eltTy : {"uint32_t", "uint", "int32_t", "int", "float32_t", "float", "float16_t"}) {
  ------------------
  |  Branch (5133:27): [True: 3.10k, False: 444]
  ------------------
 5134|  3.10k|            coopMatConvFuncs << "void extractSubArrayQCOM(" << eltTy << " arr[], uint index, " << eltTy << " subarr[]);\n";
 5135|  3.10k|          }
 5136|       |
 5137|    444|          commonBuiltins.append(coopMatConvFuncs.str().c_str());
 5138|    444|        }
 5139|       |
 5140|    444|        commonBuiltins.append(
 5141|    444|            "tensorLayoutNV createTensorLayoutNV(uint Dim);\n"
 5142|    444|            "tensorLayoutNV createTensorLayoutNV(uint Dim, uint Mode);\n"
 5143|       |
 5144|    444|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0);\n"
 5145|    444|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1);\n"
 5146|    444|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2);\n"
 5147|    444|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2, uint blockSize3);\n"
 5148|    444|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2, uint blockSize3, uint blockSize4);\n"
 5149|       |
 5150|    444|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0);\n"
 5151|    444|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1);\n"
 5152|    444|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2);\n"
 5153|    444|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2, uint dim3);\n"
 5154|    444|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2, uint dim3, uint dim4);\n"
 5155|       |
 5156|    444|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0);\n"
 5157|    444|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1);\n"
 5158|    444|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2);\n"
 5159|    444|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2, uint stride3);\n"
 5160|    444|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2, uint stride3, uint stride4);\n"
 5161|       |
 5162|    444|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0);\n"
 5163|    444|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1);\n"
 5164|    444|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2);\n"
 5165|    444|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2, uint offset3, uint span3);\n"
 5166|    444|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2, uint offset3, uint span3, uint offset4, uint span4);\n"
 5167|       |
 5168|    444|            "tensorLayoutNV setTensorLayoutClampValueNV(tensorLayoutNV t, uint value);\n"
 5169|       |
 5170|    444|            "tensorViewNV createTensorViewNV(uint Dim);\n"
 5171|    444|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions);\n"
 5172|    444|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0);\n"
 5173|    444|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1);\n"
 5174|    444|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2);\n"
 5175|    444|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2, uint p3);\n"
 5176|    444|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2, uint p3, uint p4);\n"
 5177|       |
 5178|    444|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0);\n"
 5179|    444|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1);\n"
 5180|    444|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2);\n"
 5181|    444|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2, uint dim3);\n"
 5182|    444|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2, uint dim3, uint dim4);\n"
 5183|       |
 5184|    444|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0);\n"
 5185|    444|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1);\n"
 5186|    444|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2);\n"
 5187|    444|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2, uint stride3);\n"
 5188|    444|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2, uint stride3, uint stride4);\n"
 5189|       |
 5190|    444|            "tensorViewNV setTensorViewClipNV(tensorViewNV v, uint clipRowOffset, uint clipRowSpan, uint clipColOffset, uint clipColSpan);\n"
 5191|    444|            "\n"
 5192|    444|        );
 5193|       |
 5194|       |        // GL_ARM_tensors builtins.
 5195|    444|        static const char *tensorDataTypesARM[] = {
 5196|    444|            "bool",
 5197|    444|            "int8_t", "int16_t", "int32_t", "int64_t",
 5198|    444|            "uint8_t", "uint16_t", "uint32_t", "uint64_t",
 5199|    444|            "float16_t", "float32_t", "float64_t",
 5200|    444|            "bfloat16_t", "floate5m2_t", "floate4m3_t",
 5201|    444|        };
 5202|    444|        std::ostringstream ostream;
 5203|  6.66k|        for (auto t : tensorDataTypesARM) {
  ------------------
  |  Branch (5203:21): [True: 6.66k, False: 444]
  ------------------
 5204|       |            // Scalar
 5205|  6.66k|            ostream << "void tensorReadARM(readonly tensorARM t, uint coords[], out "
 5206|  6.66k|                    << t << " data, uint tensorOperands = 0U, ...);\n";
 5207|  6.66k|            ostream << "void tensorWriteARM(writeonly tensorARM t, uint coords[], "
 5208|  6.66k|                    << t << " data, uint tensorOperands = 0U, ...);\n";
 5209|       |            // Array
 5210|  6.66k|            ostream << "void tensorReadARM(readonly tensorARM t, uint coords[], "
 5211|  6.66k|                    << t << " data[], uint tensorOperands = 0U, ...);\n";
 5212|  6.66k|            ostream << "void tensorWriteARM(writeonly tensorARM t, uint coords[], "
 5213|  6.66k|                    << t << " data[], uint tensorOperands = 0U, ...);\n";
 5214|  6.66k|        }
 5215|    444|        ostream << "uint tensorSizeARM(readonly writeonly tensorARM t, uint dim);\n";
 5216|    444|        commonBuiltins.append(ostream.str());
 5217|    444|    }
 5218|       |
 5219|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5219:9): [True: 459, False: 654]
  |  Branch (5219:34): [True: 444, False: 15]
  ------------------
 5220|    444|        const char *basicTypes[] = {
 5221|    444|            "int8_t",
 5222|    444|            "int16_t",
 5223|    444|            "int32_t",
 5224|    444|            "int64_t",
 5225|    444|            "uint8_t",
 5226|    444|            "uint16_t",
 5227|    444|            "uint32_t",
 5228|    444|            "uint64_t",
 5229|    444|            "float16_t",
 5230|    444|            "float32_t",
 5231|    444|            "float64_t",
 5232|    444|        };
 5233|    444|        std::string coopVecOffsetTypes[] = {
 5234|    444|            "uint",
 5235|    444|            "uint64_t",
 5236|    444|        };
 5237|    888|        for (auto offsetTy : coopVecOffsetTypes) {
  ------------------
  |  Branch (5237:28): [True: 888, False: 444]
  ------------------
 5238|  10.6k|            for (uint32_t i = 0; i < sizeof(basicTypes)/sizeof(basicTypes[0]); ++i) {
  ------------------
  |  Branch (5238:34): [True: 9.76k, False: 888]
  ------------------
 5239|  9.76k|                std::string func = std::string("void coopVecMatMulNV(out coopvecNV result, ") +
 5240|  9.76k|                                   std::string("coopvecNV v, ") +
 5241|  9.76k|                                   std::string("int inputInterpretation, ") +
 5242|  9.76k|                                   std::string(basicTypes[i]) + std::string("[] matrix, ") +
 5243|  9.76k|                                   offsetTy + std::string(" matrixOffset, ") +
 5244|  9.76k|                                   std::string("int matrixInterpretation, ") +
 5245|  9.76k|                                   std::string("uint M, ") +
 5246|  9.76k|                                   std::string("uint K, ") +
 5247|  9.76k|                                   std::string("int matrixLayout, ") +
 5248|  9.76k|                                   std::string("bool transpose, ") +
 5249|  9.76k|                                   std::string("uint matrixStride);\n");
 5250|  9.76k|                commonBuiltins.append(func.c_str());
 5251|       |
 5252|   117k|                for (uint32_t j = 0; j < sizeof(basicTypes)/sizeof(basicTypes[0]); ++j) {
  ------------------
  |  Branch (5252:38): [True: 107k, False: 9.76k]
  ------------------
 5253|   107k|                    func = std::string("void coopVecMatMulAddNV(out coopvecNV result, ") +
 5254|   107k|                           std::string("coopvecNV v, ") +
 5255|   107k|                           std::string("int inputInterpretation, ") +
 5256|   107k|                           std::string(basicTypes[i]) + std::string("[] matrix, ") +
 5257|   107k|                           offsetTy + std::string(" matrixOffset, ") +
 5258|   107k|                           std::string("int matrixInterpretation, ") +
 5259|   107k|                           std::string(basicTypes[j]) + std::string("[] bias, ") +
 5260|   107k|                           offsetTy + std::string(" biasOffset, ") +
 5261|   107k|                           std::string("int biasInterpretation, ") +
 5262|   107k|                           std::string("uint M, ") +
 5263|   107k|                           std::string("uint K, ") +
 5264|   107k|                           std::string("int matrixLayout, ") +
 5265|   107k|                           std::string("bool transpose, ") +
 5266|   107k|                           std::string("uint matrixStride);\n");
 5267|   107k|                    commonBuiltins.append(func.c_str());
 5268|   107k|                }
 5269|       |
 5270|  9.76k|                func = std::string("void coopVecOuterProductAccumulateNV(coopvecNV v1, coopvecNV v2, ") +
 5271|  9.76k|                       std::string(basicTypes[i]) +
 5272|  9.76k|                       std::string("[] buf, ") + offsetTy + std::string(" offset, uint stride, int matrixLayout, int matrixInterpretation);\n");
 5273|  9.76k|                commonBuiltins.append(func.c_str());
 5274|       |            
 5275|  9.76k|                func = std::string("void coopVecReduceSumAccumulateNV(coopvecNV v, ") +
 5276|  9.76k|                       std::string(basicTypes[i]) +
 5277|  9.76k|                       std::string("[] buf, ") + offsetTy + std::string(" offset);\n");
 5278|  9.76k|                commonBuiltins.append(func.c_str());
 5279|  9.76k|            }
 5280|    888|        }
 5281|    444|        std::string cooperativeVectorFuncs =
 5282|    444|            "coopvecNV fma(coopvecNV, coopvecNV, coopvecNV);\n"
 5283|    444|            "coopvecNV min(coopvecNV, coopvecNV);\n"
 5284|    444|            "coopvecNV max(coopvecNV, coopvecNV);\n"
 5285|    444|            "coopvecNV step(coopvecNV, coopvecNV);\n"
 5286|    444|            "coopvecNV exp(coopvecNV);\n"            
 5287|    444|            "coopvecNV log(coopvecNV);\n"            
 5288|    444|            "coopvecNV tanh(coopvecNV);\n"            
 5289|    444|            "coopvecNV atan(coopvecNV);\n"            
 5290|    444|            "coopvecNV clamp(coopvecNV, coopvecNV, coopvecNV);\n";
 5291|       |
 5292|    444|        commonBuiltins.append(cooperativeVectorFuncs.c_str());
 5293|       |
 5294|    444|        if (profile != EEsProfile) {
  ------------------
  |  Branch (5294:13): [True: 444, False: 0]
  ------------------
 5295|    444|            std::string longVectorFuncs =
 5296|       |
 5297|       |                // manually add long vector prototypes for functions not in BaseFunctions/etc
 5298|    444|                "vector frexp(vector, vector);\n"
 5299|    444|                "vector ldexp(vector, vector);\n"
 5300|    444|                "vector fma(vector, vector, vector);\n"
 5301|       |
 5302|    444|                "vector floatBitsToInt(vector);\n"
 5303|    444|                "vector floatBitsToUint(vector);\n"
 5304|    444|                "vector intBitsToFloat(vector);\n"
 5305|    444|                "vector uintBitsToFloat(vector);\n"
 5306|    444|                "vector doubleBitsToInt64(vector);"
 5307|    444|                "vector doubleBitsToUint64(vector);"
 5308|    444|                "vector int64BitsToDouble(vector);"
 5309|    444|                "vector uint64BitsToDouble(vector);"
 5310|    444|                "vector bfloat16BitsToIntEXT(vector);"
 5311|    444|                "vector bfloat16BitsToUintEXT(vector);"
 5312|    444|                "vector intBitsToBFloat16EXT(vector);"
 5313|    444|                "vector uintBitsToBFloat16EXT(vector);"
 5314|    444|                "vector halfBitsToInt16(vector);"
 5315|    444|                "vector halfBitsToUint16(vector);"
 5316|    444|                "vector float16BitsToInt16(vector);"
 5317|    444|                "vector float16BitsToUint16(vector);"
 5318|    444|                "vector int16BitsToFloat16(vector);"
 5319|    444|                "vector uint16BitsToFloat16(vector);"
 5320|    444|                "vector int16BitsToHalf(vector);"
 5321|    444|                "vector uint16BitsToHalf(vector);"
 5322|    444|                "vector floate5m2BitsToIntEXT(vector);"
 5323|    444|                "vector floate5m2BitsToUintEXT(vector);"
 5324|    444|                "vector intBitsToFloate5m2EXT(vector);"
 5325|    444|                "vector uintBitsToFloate5m2EXT(vector);"
 5326|    444|                "vector floate4m3BitsToIntEXT(vector);"
 5327|    444|                "vector floate4m3BitsToUintEXT(vector);"
 5328|    444|                "vector intBitsToFloate4m3EXT(vector);"
 5329|    444|                "vector uintBitsToFloate4m3EXT(vector);"
 5330|       |
 5331|    444|                "vector floatue8m0BitsToIntEXT(vector);"
 5332|    444|                "vector floatue8m0BitsToUintEXT(vector);"
 5333|    444|                "vector intBitsToFloatue8m0EXT(vector);"
 5334|    444|                "vector uintBitsToFloatue8m0EXT(vector);"
 5335|    444|                "vector floatmxint8BitsToIntEXT(vector);"
 5336|    444|                "vector floatmxint8BitsToUintEXT(vector);"
 5337|    444|                "vector intBitsToFloatmxint8EXT(vector);"
 5338|    444|                "vector uintBitsToFloatmxint8EXT(vector);"
 5339|       |
 5340|    444|                "vector uaddCarry(highp vector, highp vector, out lowp vector carry);"
 5341|    444|                "vector usubBorrow(highp vector, highp vector, out lowp vector borrow);"
 5342|    444|                "void umulExtended(highp vector, highp vector, out highp vector, out highp vector);"
 5343|    444|                "void imulExtended(highp vector, highp vector, out highp vector, out highp vector);"
 5344|    444|                "vector bitfieldExtract(vector, int, int);"
 5345|    444|                "vector bitfieldInsert(vector, vector, int, int);"
 5346|    444|                "vector bitfieldReverse(highp vector);"
 5347|    444|                "vector bitCount(vector);"
 5348|    444|                "vector findLSB(vector);"
 5349|    444|                "vector findMSB(vector);"
 5350|       |
 5351|       |                // BaseFunctions overloads with a scalar parameter don't get generated in AddLongVectorBuiltin
 5352|    444|                "vector mod(vector, double);\n"
 5353|    444|                "vector min(vector, double);\n"
 5354|    444|                "vector max(vector, double);\n"
 5355|    444|                "vector clamp(vector, double, double);"
 5356|    444|                "vector mix(vector, vector,  double);"
 5357|    444|                "vector step(double, vector);"
 5358|    444|                "vector smoothstep(double, double, vector);"
 5359|    444|                "vector refract(vector, vector, double);"
 5360|       |
 5361|    444|                "vector mod(vector, float16_t);\n"
 5362|    444|                "vector min(vector, float16_t);\n"
 5363|    444|                "vector max(vector, float16_t);\n"
 5364|    444|                "vector clamp(vector, float16_t, float16_t);"
 5365|    444|                "vector mix(vector, vector,  float16_t);"
 5366|    444|                "vector step(float16_t, vector);"
 5367|    444|                "vector smoothstep(float16_t, float16_t, vector);"
 5368|    444|                "vector refract(vector, vector, float16_t);"
 5369|       |
 5370|    444|                "vector min(vector, uint64_t);\n"
 5371|    444|                "vector max(vector, uint64_t);\n"
 5372|    444|                "vector clamp(vector, uint64_t, uint64_t);"
 5373|    444|                "vector mix(vector, vector,  uint64_t);"
 5374|       |
 5375|    444|                "vector min(vector, int64_t);\n"
 5376|    444|                "vector max(vector, int64_t);\n"
 5377|    444|                "vector clamp(vector, int64_t, int64_t);"
 5378|    444|                "vector mix(vector, vector,  int64_t);"
 5379|       |
 5380|    444|                "vector min(vector, uint16_t);\n"
 5381|    444|                "vector max(vector, uint16_t);\n"
 5382|    444|                "vector clamp(vector, uint16_t, uint16_t);"
 5383|    444|                "vector mix(vector, vector,  uint16_t);"
 5384|       |
 5385|    444|                "vector min(vector, int16_t);\n"
 5386|    444|                "vector max(vector, int16_t);\n"
 5387|    444|                "vector clamp(vector, int16_t, int16_t);"
 5388|    444|                "vector mix(vector, vector,  int16_t);"
 5389|       |
 5390|    444|                "vector min(vector, uint8_t);\n"
 5391|    444|                "vector max(vector, uint8_t);\n"
 5392|    444|                "vector clamp(vector, uint8_t, uint8_t);"
 5393|    444|                "vector mix(vector, vector,  uint8_t);"
 5394|       |
 5395|    444|                "vector min(vector, int8_t);\n"
 5396|    444|                "vector max(vector, int8_t);\n"
 5397|    444|                "vector clamp(vector, int8_t, int8_t);"
 5398|    444|                "vector mix(vector, vector,  int8_t);"
 5399|       |
 5400|    444|                "vector expectEXT(vector, vector);"
 5401|       |
 5402|    444|                "vector bitcastExtractfe2m1EXT(vector, uint);"
 5403|    444|                "vector bitcastExtractfe3m2EXT(vector, uint);"
 5404|    444|                "vector bitcastExtractfe2m3EXT(vector, uint);"
 5405|    444|                ;
 5406|       |
 5407|    444|            std::string longVectorDerivativeFuncs =
 5408|    444|                "vector dFdxFine(vector);"
 5409|    444|                "vector dFdyFine(vector);"
 5410|    444|                "vector fwidthFine(vector);"
 5411|    444|                "vector dFdxCoarse(vector);"
 5412|    444|                "vector dFdyCoarse(vector);"
 5413|    444|                "vector fwidthCoarse(vector);"
 5414|       |
 5415|    444|                ;
 5416|    444|            commonBuiltins.append(longVectorFuncs.c_str());
 5417|    444|            stageBuiltins[EShLangFragment].append(longVectorDerivativeFuncs.c_str());
 5418|    444|            stageBuiltins[EShLangCompute].append(longVectorDerivativeFuncs.c_str());
 5419|    444|        }
 5420|       |
 5421|    444|        const char *scalarAndVectorTypes[] = {
 5422|    444|            "int8_t",
 5423|    444|            "int16_t",
 5424|    444|            "int32_t",
 5425|    444|            "int64_t",
 5426|    444|            "uint8_t",
 5427|    444|            "uint16_t",
 5428|    444|            "uint32_t",
 5429|    444|            "uint64_t",
 5430|    444|            "float16_t",
 5431|    444|            "float32_t",
 5432|    444|            "float64_t",
 5433|    444|            "i8vec2",
 5434|    444|            "i16vec2",
 5435|    444|            "i32vec2",
 5436|    444|            "i64vec2",
 5437|    444|            "u8vec2",
 5438|    444|            "u16vec2",
 5439|    444|            "u32vec2",
 5440|    444|            "u64vec2",
 5441|    444|            "f16vec2",
 5442|    444|            "f32vec2",
 5443|    444|            "f64vec2",
 5444|    444|            "i8vec3",
 5445|    444|            "i16vec3",
 5446|    444|            "i32vec3",
 5447|    444|            "i64vec3",
 5448|    444|            "u8vec3",
 5449|    444|            "u16vec3",
 5450|    444|            "u32vec3",
 5451|    444|            "u64vec3",
 5452|    444|            "f16vec3",
 5453|    444|            "f32vec3",
 5454|    444|            "f64vec3",
 5455|    444|            "i8vec4",
 5456|    444|            "i16vec4",
 5457|    444|            "i32vec4",
 5458|    444|            "i64vec4",
 5459|    444|            "u8vec4",
 5460|    444|            "u16vec4",
 5461|    444|            "u32vec4",
 5462|    444|            "u64vec4",
 5463|    444|            "f16vec4",
 5464|    444|            "f32vec4",
 5465|    444|            "f64vec4",
 5466|    444|        };
 5467|       |
 5468|    888|        for (auto offsetTy : coopVecOffsetTypes) {
  ------------------
  |  Branch (5468:28): [True: 888, False: 444]
  ------------------
 5469|  39.9k|            for (uint32_t i = 0; i < sizeof(scalarAndVectorTypes)/sizeof(scalarAndVectorTypes[0]); ++i) {
  ------------------
  |  Branch (5469:34): [True: 39.0k, False: 888]
  ------------------
 5470|  39.0k|                std::string load = std::string("void coopVecLoadNV(out coopvecNV v, volatile coherent ") +
 5471|  39.0k|                                   std::string(scalarAndVectorTypes[i]) + std::string("[] buf, ") + offsetTy + std::string(" offset);");
 5472|  39.0k|                std::string store = std::string("void coopVecStoreNV(coopvecNV v, volatile coherent ") +
 5473|  39.0k|                                   std::string(scalarAndVectorTypes[i]) + std::string("[] buf, ") + offsetTy + std::string(" offset);");
 5474|  39.0k|                commonBuiltins.append(load.c_str());
 5475|  39.0k|                commonBuiltins.append(store.c_str());
 5476|  39.0k|            }
 5477|    888|        }
 5478|       |
 5479|    444|        commonBuiltins.append(
 5480|    444|            "const int gl_CooperativeVectorMatrixLayoutRowMajorNV = 0;\n"
 5481|    444|            "const int gl_CooperativeVectorMatrixLayoutColumnMajorNV = 1;\n"
 5482|    444|            "const int gl_CooperativeVectorMatrixLayoutInferencingOptimalNV = 2;\n"
 5483|    444|            "const int gl_CooperativeVectorMatrixLayoutTrainingOptimalNV = 3;\n"
 5484|    444|            "\n"
 5485|    444|            );
 5486|       |
 5487|    444|        commonBuiltins.append(
 5488|    444|            "const int gl_ComponentTypeFloat16NV                = 0;\n"
 5489|    444|            "const int gl_ComponentTypeFloat32NV                = 1;\n"
 5490|    444|            "const int gl_ComponentTypeFloat64NV                = 2;\n"
 5491|    444|            "const int gl_ComponentTypeSignedInt8NV             = 3;\n"
 5492|    444|            "const int gl_ComponentTypeSignedInt16NV            = 4;\n"
 5493|    444|            "const int gl_ComponentTypeSignedInt32NV            = 5;\n"
 5494|    444|            "const int gl_ComponentTypeSignedInt64NV            = 6;\n"
 5495|    444|            "const int gl_ComponentTypeUnsignedInt8NV           = 7;\n"
 5496|    444|            "const int gl_ComponentTypeUnsignedInt16NV          = 8;\n"
 5497|    444|            "const int gl_ComponentTypeUnsignedInt32NV          = 9;\n"
 5498|    444|            "const int gl_ComponentTypeUnsignedInt64NV          = 10;\n"
 5499|    444|            "const int gl_ComponentTypeSignedInt8PackedNV       = 1000491000;\n"
 5500|    444|            "const int gl_ComponentTypeUnsignedInt8PackedNV     = 1000491001;\n"
 5501|    444|            "const int gl_ComponentTypeFloatE4M3NV              = 1000491002;\n"
 5502|    444|            "const int gl_ComponentTypeFloatE5M2NV              = 1000491003;\n"
 5503|    444|            "\n"
 5504|    444|            );
 5505|    444|    }
 5506|       |
 5507|       |    //============================================================================
 5508|       |    //
 5509|       |    // Prototypes for built-in functions seen by fragment shaders only.
 5510|       |    //
 5511|       |    //============================================================================
 5512|       |
 5513|       |    //
 5514|       |    // Original-style texture Functions with bias.
 5515|       |    //
 5516|  1.11k|    if (spvVersion.spv == 0 && (profile != EEsProfile || version == 100)) {
  ------------------
  |  Branch (5516:9): [True: 215, False: 898]
  |  Branch (5516:33): [True: 55, False: 160]
  |  Branch (5516:58): [True: 160, False: 0]
  ------------------
 5517|    215|        stageBuiltins[EShLangFragment].append(
 5518|    215|            "vec4 texture2D(sampler2D, vec2, float);"
 5519|    215|            "vec4 texture2DProj(sampler2D, vec3, float);"
 5520|    215|            "vec4 texture2DProj(sampler2D, vec4, float);"
 5521|    215|            "vec4 texture3D(sampler3D, vec3, float);"        // OES_texture_3D
 5522|    215|            "vec4 texture3DProj(sampler3D, vec4, float);"    // OES_texture_3D
 5523|    215|            "vec4 textureCube(samplerCube, vec3, float);"
 5524|       |
 5525|    215|            "\n");
 5526|    215|    }
 5527|  1.11k|    if (spvVersion.spv == 0 && (profile != EEsProfile && version > 100)) {
  ------------------
  |  Branch (5527:9): [True: 215, False: 898]
  |  Branch (5527:33): [True: 55, False: 160]
  |  Branch (5527:58): [True: 55, False: 0]
  ------------------
 5528|     55|        stageBuiltins[EShLangFragment].append(
 5529|     55|            "vec4 texture1D(sampler1D, float, float);"
 5530|     55|            "vec4 texture1DProj(sampler1D, vec2, float);"
 5531|     55|            "vec4 texture1DProj(sampler1D, vec4, float);"
 5532|     55|            "vec4 shadow1D(sampler1DShadow, vec3, float);"
 5533|     55|            "vec4 shadow2D(sampler2DShadow, vec3, float);"
 5534|     55|            "vec4 shadow1DProj(sampler1DShadow, vec4, float);"
 5535|     55|            "vec4 shadow2DProj(sampler2DShadow, vec4, float);"
 5536|       |
 5537|     55|            "\n");
 5538|     55|    }
 5539|  1.11k|    if (spvVersion.spv == 0 && profile == EEsProfile) {
  ------------------
  |  Branch (5539:9): [True: 215, False: 898]
  |  Branch (5539:32): [True: 160, False: 55]
  ------------------
 5540|    160|        stageBuiltins[EShLangFragment].append(
 5541|    160|            "vec4 texture2DLodEXT(sampler2D, vec2, float);"      // GL_EXT_shader_texture_lod
 5542|    160|            "vec4 texture2DProjLodEXT(sampler2D, vec3, float);"  // GL_EXT_shader_texture_lod
 5543|    160|            "vec4 texture2DProjLodEXT(sampler2D, vec4, float);"  // GL_EXT_shader_texture_lod
 5544|    160|            "vec4 textureCubeLodEXT(samplerCube, vec3, float);"  // GL_EXT_shader_texture_lod
 5545|       |
 5546|    160|            "\n");
 5547|    160|    }
 5548|       |
 5549|       |    // GL_EXT_shader_tile_image
 5550|  1.11k|    if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (5550:9): [True: 193, False: 920]
  ------------------
 5551|    193|        stageBuiltins[EShLangFragment].append(
 5552|    193|            "lowp uint stencilAttachmentReadEXT();"
 5553|    193|            "lowp uint stencilAttachmentReadEXT(int);"
 5554|    193|            "highp float depthAttachmentReadEXT();"
 5555|    193|            "highp float depthAttachmentReadEXT(int);"
 5556|    193|            "\n");
 5557|    193|        stageBuiltins[EShLangFragment].append(
 5558|    193|            "vec4 colorAttachmentReadEXT(attachmentEXT);"
 5559|    193|            "vec4 colorAttachmentReadEXT(attachmentEXT, int);"
 5560|    193|            "ivec4 colorAttachmentReadEXT(iattachmentEXT);"
 5561|    193|            "ivec4 colorAttachmentReadEXT(iattachmentEXT, int);"
 5562|    193|            "uvec4 colorAttachmentReadEXT(uattachmentEXT);"
 5563|    193|            "uvec4 colorAttachmentReadEXT(uattachmentEXT, int);"
 5564|    193|            "\n");
 5565|    193|    }
 5566|       |
 5567|       |    // GL_ARB_derivative_control
 5568|  1.11k|    if (profile != EEsProfile && version >= 400) {
  ------------------
  |  Branch (5568:9): [True: 459, False: 654]
  |  Branch (5568:34): [True: 450, False: 9]
  ------------------
 5569|    450|        stageBuiltins[EShLangFragment].append(derivativeControls);
 5570|    450|        stageBuiltins[EShLangFragment].append("\n");
 5571|    450|    }
 5572|       |
 5573|       |    // GL_OES_shader_multisample_interpolation
 5574|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (5574:10): [True: 654, False: 459]
  |  Branch (5574:35): [True: 494, False: 160]
  ------------------
 5575|    953|        (profile != EEsProfile && version >= 150)) { // NV_gpu_shader5
  ------------------
  |  Branch (5575:10): [True: 459, False: 160]
  |  Branch (5575:35): [True: 459, False: 0]
  ------------------
 5576|    953|        stageBuiltins[EShLangFragment].append(
 5577|    953|            "float interpolateAtCentroid(float);"
 5578|    953|            "vec2  interpolateAtCentroid(vec2);"
 5579|    953|            "vec3  interpolateAtCentroid(vec3);"
 5580|    953|            "vec4  interpolateAtCentroid(vec4);"
 5581|       |
 5582|    953|            "float interpolateAtSample(float, int);"
 5583|    953|            "vec2  interpolateAtSample(vec2,  int);"
 5584|    953|            "vec3  interpolateAtSample(vec3,  int);"
 5585|    953|            "vec4  interpolateAtSample(vec4,  int);"
 5586|       |
 5587|    953|            "float interpolateAtOffset(float, vec2);"
 5588|    953|            "vec2  interpolateAtOffset(vec2,  vec2);"
 5589|    953|            "vec3  interpolateAtOffset(vec3,  vec2);"
 5590|    953|            "vec4  interpolateAtOffset(vec4,  vec2);"
 5591|       |
 5592|    953|            "\n");
 5593|    953|    }
 5594|       |
 5595|  1.11k|    stageBuiltins[EShLangFragment].append(
 5596|  1.11k|        "void beginInvocationInterlockARB(void);"
 5597|  1.11k|        "void endInvocationInterlockARB(void);");
 5598|       |
 5599|  1.11k|    stageBuiltins[EShLangFragment].append(
 5600|  1.11k|        "bool helperInvocationEXT();"
 5601|  1.11k|        "\n");
 5602|       |
 5603|       |    // GL_AMD_shader_explicit_vertex_parameter
 5604|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5604:9): [True: 459, False: 654]
  |  Branch (5604:34): [True: 444, False: 15]
  ------------------
 5605|    444|        stageBuiltins[EShLangFragment].append(
 5606|    444|            "float interpolateAtVertexAMD(float, uint);"
 5607|    444|            "vec2  interpolateAtVertexAMD(vec2,  uint);"
 5608|    444|            "vec3  interpolateAtVertexAMD(vec3,  uint);"
 5609|    444|            "vec4  interpolateAtVertexAMD(vec4,  uint);"
 5610|       |
 5611|    444|            "int   interpolateAtVertexAMD(int,   uint);"
 5612|    444|            "ivec2 interpolateAtVertexAMD(ivec2, uint);"
 5613|    444|            "ivec3 interpolateAtVertexAMD(ivec3, uint);"
 5614|    444|            "ivec4 interpolateAtVertexAMD(ivec4, uint);"
 5615|       |
 5616|    444|            "uint  interpolateAtVertexAMD(uint,  uint);"
 5617|    444|            "uvec2 interpolateAtVertexAMD(uvec2, uint);"
 5618|    444|            "uvec3 interpolateAtVertexAMD(uvec3, uint);"
 5619|    444|            "uvec4 interpolateAtVertexAMD(uvec4, uint);"
 5620|       |
 5621|    444|            "float16_t interpolateAtVertexAMD(float16_t, uint);"
 5622|    444|            "f16vec2   interpolateAtVertexAMD(f16vec2,   uint);"
 5623|    444|            "f16vec3   interpolateAtVertexAMD(f16vec3,   uint);"
 5624|    444|            "f16vec4   interpolateAtVertexAMD(f16vec4,   uint);"
 5625|       |
 5626|    444|            "\n");
 5627|    444|    }
 5628|       |
 5629|       |    // GL_AMD_gpu_shader_half_float
 5630|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5630:9): [True: 459, False: 654]
  |  Branch (5630:34): [True: 444, False: 15]
  ------------------
 5631|    444|        stageBuiltins[EShLangFragment].append(derivativesAndControl16bits);
 5632|    444|        stageBuiltins[EShLangFragment].append("\n");
 5633|       |
 5634|    444|        stageBuiltins[EShLangFragment].append(
 5635|    444|            "float16_t interpolateAtCentroid(float16_t);"
 5636|    444|            "f16vec2   interpolateAtCentroid(f16vec2);"
 5637|    444|            "f16vec3   interpolateAtCentroid(f16vec3);"
 5638|    444|            "f16vec4   interpolateAtCentroid(f16vec4);"
 5639|       |
 5640|    444|            "float16_t interpolateAtSample(float16_t, int);"
 5641|    444|            "f16vec2   interpolateAtSample(f16vec2,   int);"
 5642|    444|            "f16vec3   interpolateAtSample(f16vec3,   int);"
 5643|    444|            "f16vec4   interpolateAtSample(f16vec4,   int);"
 5644|       |
 5645|    444|            "float16_t interpolateAtOffset(float16_t, f16vec2);"
 5646|    444|            "f16vec2   interpolateAtOffset(f16vec2,   f16vec2);"
 5647|    444|            "f16vec3   interpolateAtOffset(f16vec3,   f16vec2);"
 5648|    444|            "f16vec4   interpolateAtOffset(f16vec4,   f16vec2);"
 5649|       |
 5650|    444|            "\n");
 5651|    444|    }
 5652|       |
 5653|       |    // GL_ARB_shader_clock& GL_EXT_shader_realtime_clock
 5654|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5654:9): [True: 459, False: 654]
  |  Branch (5654:34): [True: 444, False: 15]
  ------------------
 5655|    444|        commonBuiltins.append(
 5656|    444|            "uvec2 clock2x32ARB();"
 5657|    444|            "uint64_t clockARB();"
 5658|    444|            "uvec2 clockRealtime2x32EXT();"
 5659|    444|            "uint64_t clockRealtimeEXT();"
 5660|    444|            "\n");
 5661|    444|    }
 5662|       |
 5663|       |    // GL_AMD_shader_fragment_mask
 5664|  1.11k|    if (profile != EEsProfile && version >= 450 && spvVersion.vulkan > 0) {
  ------------------
  |  Branch (5664:9): [True: 459, False: 654]
  |  Branch (5664:34): [True: 444, False: 15]
  |  Branch (5664:52): [True: 53, False: 391]
  ------------------
 5665|     53|        stageBuiltins[EShLangFragment].append(
 5666|     53|            "uint fragmentMaskFetchAMD(subpassInputMS);"
 5667|     53|            "uint fragmentMaskFetchAMD(isubpassInputMS);"
 5668|     53|            "uint fragmentMaskFetchAMD(usubpassInputMS);"
 5669|       |
 5670|     53|            "vec4  fragmentFetchAMD(subpassInputMS,  uint);"
 5671|     53|            "ivec4 fragmentFetchAMD(isubpassInputMS, uint);"
 5672|     53|            "uvec4 fragmentFetchAMD(usubpassInputMS, uint);"
 5673|       |
 5674|     53|            "\n");
 5675|     53|    }
 5676|       |
 5677|       |    // Builtins for GL_NV_ray_tracing/GL_NV_ray_tracing_motion_blur/GL_EXT_ray_tracing/GL_EXT_ray_query/
 5678|       |    // GL_NV_shader_invocation_reorder/GL_KHR_ray_tracing_position_Fetch
 5679|  1.11k|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (5679:9): [True: 459, False: 654]
  |  Branch (5679:34): [True: 1, False: 458]
  ------------------
 5680|      1|         commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);"
 5681|      1|            "void rayQueryTerminateEXT(rayQueryEXT);"
 5682|      1|            "void rayQueryGenerateIntersectionEXT(rayQueryEXT, float);"
 5683|      1|            "void rayQueryConfirmIntersectionEXT(rayQueryEXT);"
 5684|      1|            "bool rayQueryProceedEXT(rayQueryEXT);"
 5685|      1|            "uint rayQueryGetIntersectionTypeEXT(rayQueryEXT, bool);"
 5686|      1|            "float rayQueryGetRayTMinEXT(rayQueryEXT);"
 5687|      1|            "uint rayQueryGetRayFlagsEXT(rayQueryEXT);"
 5688|      1|            "vec3 rayQueryGetWorldRayOriginEXT(rayQueryEXT);"
 5689|      1|            "vec3 rayQueryGetWorldRayDirectionEXT(rayQueryEXT);"
 5690|      1|            "float rayQueryGetIntersectionTEXT(rayQueryEXT, bool);"
 5691|      1|            "int rayQueryGetIntersectionInstanceCustomIndexEXT(rayQueryEXT, bool);"
 5692|      1|            "int rayQueryGetIntersectionInstanceIdEXT(rayQueryEXT, bool);"
 5693|      1|            "uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQueryEXT, bool);"
 5694|      1|            "int rayQueryGetIntersectionGeometryIndexEXT(rayQueryEXT, bool);"
 5695|      1|            "int rayQueryGetIntersectionPrimitiveIndexEXT(rayQueryEXT, bool);"
 5696|      1|            "vec2 rayQueryGetIntersectionBarycentricsEXT(rayQueryEXT, bool);"
 5697|      1|            "bool rayQueryGetIntersectionFrontFaceEXT(rayQueryEXT, bool);"
 5698|      1|            "bool rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQueryEXT);"
 5699|      1|            "vec3 rayQueryGetIntersectionObjectRayDirectionEXT(rayQueryEXT, bool);"
 5700|      1|            "vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT, bool);"
 5701|      1|            "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);"
 5702|      1|            "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);"
 5703|      1|            "void rayQueryGetIntersectionTriangleVertexPositionsEXT(rayQueryEXT, bool, out vec3[3]);"
 5704|      1|            "int rayQueryGetIntersectionClusterIdNV(rayQueryEXT, bool);"
 5705|      1|            "vec3 rayQueryGetIntersectionSpherePositionNV(rayQueryEXT, bool);"
 5706|      1|            "float rayQueryGetIntersectionSphereRadiusNV(rayQueryEXT, bool);"
 5707|      1|            "float rayQueryGetIntersectionLSSHitValueNV(rayQueryEXT, bool);"
 5708|      1|            "void rayQueryGetIntersectionLSSPositionsNV(rayQueryEXT, bool, out vec3[2]);"
 5709|      1|            "void rayQueryGetIntersectionLSSRadiiNV(rayQueryEXT, bool, out float[2]);"
 5710|      1|            "bool rayQueryIsSphereHitNV(rayQueryEXT, bool);"
 5711|      1|            "bool rayQueryIsLSSHitNV(rayQueryEXT, bool);"
 5712|      1|            "\n");
 5713|       |
 5714|      1|        stageBuiltins[EShLangRayGen].append(
 5715|      1|            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5716|      1|            "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5717|      1|            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5718|      1|            "void executeCallableNV(uint, int);"
 5719|      1|            "void executeCallableEXT(uint, int);"
 5720|      1|            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5721|      1|            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5722|      1|            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
 5723|      1|            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5724|      1|            "void hitObjectRecordHitWithIndexNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
 5725|      1|            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
 5726|      1|            "void hitObjectRecordMissNV(hitObjectNV,uint,vec3,float,vec3,float);"
 5727|      1|            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
 5728|      1|            "void hitObjectRecordEmptyNV(hitObjectNV);"
 5729|      1|            "void hitObjectExecuteShaderNV(hitObjectNV,int);"
 5730|      1|            "bool hitObjectIsEmptyNV(hitObjectNV);"
 5731|      1|            "bool hitObjectIsMissNV(hitObjectNV);"
 5732|      1|            "bool hitObjectIsHitNV(hitObjectNV);"
 5733|      1|            "float hitObjectGetRayTMinNV(hitObjectNV);"
 5734|      1|            "float hitObjectGetRayTMaxNV(hitObjectNV);"
 5735|      1|            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
 5736|      1|            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
 5737|      1|            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
 5738|      1|            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
 5739|      1|            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
 5740|      1|            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
 5741|      1|            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
 5742|      1|            "int hitObjectGetInstanceIdNV(hitObjectNV);"
 5743|      1|            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
 5744|      1|            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
 5745|      1|            "uint hitObjectGetHitKindNV(hitObjectNV);"
 5746|      1|            "void hitObjectGetAttributesNV(hitObjectNV,int);"
 5747|      1|            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
 5748|      1|            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
 5749|      1|            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
 5750|      1|            "int hitObjectGetClusterIdNV(hitObjectNV);"
 5751|      1|            "void reorderThreadNV(uint, uint);"
 5752|      1|            "void reorderThreadNV(hitObjectNV);"
 5753|      1|            "void reorderThreadNV(hitObjectNV, uint, uint);"
 5754|      1|            "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);"
 5755|      1|            "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);"
 5756|      1|            "vec3 hitObjectGetSpherePositionNV(hitObjectNV);"
 5757|      1|            "float hitObjectGetSphereRadiusNV(hitObjectNV);"
 5758|      1|            "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);"
 5759|      1|            "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);"
 5760|      1|            "bool hitObjectIsSphereHitNV(hitObjectNV);"
 5761|      1|            "bool hitObjectIsLSSHitNV(hitObjectNV);"
 5762|      1|            "void hitObjectTraceRayEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5763|      1|            "void hitObjectTraceRayMotionEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5764|      1|            "void hitObjectRecordMissEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float);"
 5765|      1|            "void hitObjectRecordMissMotionEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float,float);"
 5766|      1|            "void hitObjectRecordEmptyEXT(hitObjectEXT);"
 5767|      1|            "void hitObjectExecuteShaderEXT(hitObjectEXT,int);"
 5768|      1|            "bool hitObjectIsEmptyEXT(hitObjectEXT);"
 5769|      1|            "bool hitObjectIsMissEXT(hitObjectEXT);"
 5770|      1|            "bool hitObjectIsHitEXT(hitObjectEXT);"
 5771|      1|            "float hitObjectGetRayTMinEXT(hitObjectEXT);"
 5772|      1|            "float hitObjectGetRayTMaxEXT(hitObjectEXT);"
 5773|      1|            "uint hitObjectGetRayFlagsEXT(hitObjectEXT);"
 5774|      1|            "vec3 hitObjectGetWorldRayOriginEXT(hitObjectEXT);"
 5775|      1|            "vec3 hitObjectGetWorldRayDirectionEXT(hitObjectEXT);"
 5776|      1|            "vec3 hitObjectGetObjectRayOriginEXT(hitObjectEXT);"
 5777|      1|            "vec3 hitObjectGetObjectRayDirectionEXT(hitObjectEXT);"
 5778|      1|            "mat4x3 hitObjectGetWorldToObjectEXT(hitObjectEXT);"
 5779|      1|            "mat4x3 hitObjectGetObjectToWorldEXT(hitObjectEXT);"
 5780|      1|            "int hitObjectGetInstanceCustomIndexEXT(hitObjectEXT);"
 5781|      1|            "int hitObjectGetInstanceIdEXT(hitObjectEXT);"
 5782|      1|            "int hitObjectGetGeometryIndexEXT(hitObjectEXT);"
 5783|      1|            "int hitObjectGetPrimitiveIndexEXT(hitObjectEXT);"
 5784|      1|            "uint hitObjectGetHitKindEXT(hitObjectEXT);"
 5785|      1|            "void hitObjectGetAttributesEXT(hitObjectEXT,int);"
 5786|      1|            "float hitObjectGetCurrentTimeEXT(hitObjectEXT);"
 5787|      1|            "uint hitObjectGetShaderBindingTableRecordIndexEXT(hitObjectEXT);"
 5788|      1|            "uvec2 hitObjectGetShaderRecordBufferHandleEXT(hitObjectEXT);"
 5789|      1|            "void hitObjectSetShaderBindingTableRecordIndexEXT(hitObjectEXT, uint);"
 5790|      1|            "void hitObjectReorderExecuteEXT(hitObjectEXT,int);"
 5791|      1|            "void hitObjectReorderExecuteEXT(hitObjectEXT,uint,uint,int);"
 5792|      1|            "void hitObjectTraceReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5793|      1|            "void hitObjectTraceReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,uint,uint,int);"
 5794|      1|            "void hitObjectTraceMotionReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5795|      1|            "void hitObjectTraceMotionReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,uint,uint,int);"
 5796|      1|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int);"
 5797|      1|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int, uint);"
 5798|      1|            "void hitObjectGetIntersectionTriangleVertexPositionsEXT(hitObjectEXT, out vec3[3]);"
 5799|      1|            "void reorderThreadEXT(uint, uint);"
 5800|      1|            "void reorderThreadEXT(hitObjectEXT);"
 5801|      1|            "void reorderThreadEXT(hitObjectEXT, uint, uint);"
 5802|      1|            "\n");
 5803|      1|        stageBuiltins[EShLangIntersect].append(
 5804|      1|            "bool reportIntersectionNV(float, uint);"
 5805|      1|            "bool reportIntersectionEXT(float, uint);"
 5806|      1|            "\n");
 5807|      1|        stageBuiltins[EShLangAnyHit].append(
 5808|      1|            "void ignoreIntersectionNV();"
 5809|      1|            "void terminateRayNV();"
 5810|      1|            "\n");
 5811|      1|        stageBuiltins[EShLangClosestHit].append(
 5812|      1|            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5813|      1|            "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5814|      1|            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5815|      1|            "void executeCallableNV(uint, int);"
 5816|      1|            "void executeCallableEXT(uint, int);"
 5817|      1|            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5818|      1|            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5819|      1|            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
 5820|      1|            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5821|      1|            "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
 5822|      1|            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
 5823|      1|            "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);"
 5824|      1|            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
 5825|      1|            "void hitObjectRecordEmptyNV(hitObjectNV);"
 5826|      1|            "void hitObjectExecuteShaderNV(hitObjectNV, int);"
 5827|      1|            "bool hitObjectIsEmptyNV(hitObjectNV);"
 5828|      1|            "bool hitObjectIsMissNV(hitObjectNV);"
 5829|      1|            "bool hitObjectIsHitNV(hitObjectNV);"
 5830|      1|            "float hitObjectGetRayTMinNV(hitObjectNV);"
 5831|      1|            "float hitObjectGetRayTMaxNV(hitObjectNV);"
 5832|      1|            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
 5833|      1|            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
 5834|      1|            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
 5835|      1|            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
 5836|      1|            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
 5837|      1|            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
 5838|      1|            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
 5839|      1|            "int hitObjectGetInstanceIdNV(hitObjectNV);"
 5840|      1|            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
 5841|      1|            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
 5842|      1|            "uint hitObjectGetHitKindNV(hitObjectNV);"
 5843|      1|            "void hitObjectGetAttributesNV(hitObjectNV,int);"
 5844|      1|            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
 5845|      1|            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
 5846|      1|            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
 5847|      1|            "int hitObjectGetClusterIdNV(hitObjectNV);"
 5848|      1|            "vec3 hitObjectGetSpherePositionNV(hitObjectNV);"
 5849|      1|            "float hitObjectGetSphereRadiusNV(hitObjectNV);"
 5850|      1|            "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);"
 5851|      1|            "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);"
 5852|      1|            "bool hitObjectIsSphereHitNV(hitObjectNV);"
 5853|      1|            "bool hitObjectIsLSSHitNV(hitObjectNV);"
 5854|      1|            "void hitObjectTraceRayEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5855|      1|            "void hitObjectTraceRayMotionEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5856|      1|            "void hitObjectRecordMissEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float);"
 5857|      1|            "void hitObjectRecordMissMotionEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float,float);"
 5858|      1|            "void hitObjectRecordEmptyEXT(hitObjectEXT);"
 5859|      1|            "void hitObjectExecuteShaderEXT(hitObjectEXT,int);"
 5860|      1|            "bool hitObjectIsEmptyEXT(hitObjectEXT);"
 5861|      1|            "bool hitObjectIsMissEXT(hitObjectEXT);"
 5862|      1|            "bool hitObjectIsHitEXT(hitObjectEXT);"
 5863|      1|            "float hitObjectGetRayTMinEXT(hitObjectEXT);"
 5864|      1|            "float hitObjectGetRayTMaxEXT(hitObjectEXT);"
 5865|      1|            "uint hitObjectGetRayFlagsEXT(hitObjectEXT);"
 5866|      1|            "vec3 hitObjectGetWorldRayOriginEXT(hitObjectEXT);"
 5867|      1|            "vec3 hitObjectGetWorldRayDirectionEXT(hitObjectEXT);"
 5868|      1|            "vec3 hitObjectGetObjectRayOriginEXT(hitObjectEXT);"
 5869|      1|            "vec3 hitObjectGetObjectRayDirectionEXT(hitObjectEXT);"
 5870|      1|            "mat4x3 hitObjectGetWorldToObjectEXT(hitObjectEXT);"
 5871|      1|            "mat4x3 hitObjectGetObjectToWorldEXT(hitObjectEXT);"
 5872|      1|            "int hitObjectGetInstanceCustomIndexEXT(hitObjectEXT);"
 5873|      1|            "int hitObjectGetInstanceIdEXT(hitObjectEXT);"
 5874|      1|            "int hitObjectGetGeometryIndexEXT(hitObjectEXT);"
 5875|      1|            "int hitObjectGetPrimitiveIndexEXT(hitObjectEXT);"
 5876|      1|            "uint hitObjectGetHitKindEXT(hitObjectEXT);"
 5877|      1|            "void hitObjectGetAttributesEXT(hitObjectEXT,int);"
 5878|      1|            "float hitObjectGetCurrentTimeEXT(hitObjectEXT);"
 5879|      1|            "uint hitObjectGetShaderBindingTableRecordIndexEXT(hitObjectEXT);"
 5880|      1|            "uvec2 hitObjectGetShaderRecordBufferHandleEXT(hitObjectEXT);"
 5881|      1|            "void hitObjectSetShaderBindingTableRecordIndexEXT(hitObjectEXT, uint);"
 5882|      1|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT,uint, int);"
 5883|      1|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT,uint, int, uint);"
 5884|      1|            "void hitObjectGetIntersectionTriangleVertexPositionsEXT(hitObjectEXT, out vec3[3]);"
 5885|      1|            "\n");
 5886|      1|        stageBuiltins[EShLangMiss].append(
 5887|      1|            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5888|      1|            "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5889|      1|            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5890|      1|            "void executeCallableNV(uint, int);"
 5891|      1|            "void executeCallableEXT(uint, int);"
 5892|      1|            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5893|      1|            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5894|      1|            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
 5895|      1|            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5896|      1|            "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
 5897|      1|            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
 5898|      1|            "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);"
 5899|      1|            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
 5900|      1|            "void hitObjectRecordEmptyNV(hitObjectNV);"
 5901|      1|            "void hitObjectExecuteShaderNV(hitObjectNV, int);"
 5902|      1|            "bool hitObjectIsEmptyNV(hitObjectNV);"
 5903|      1|            "bool hitObjectIsMissNV(hitObjectNV);"
 5904|      1|            "bool hitObjectIsHitNV(hitObjectNV);"
 5905|      1|            "float hitObjectGetRayTMinNV(hitObjectNV);"
 5906|      1|            "float hitObjectGetRayTMaxNV(hitObjectNV);"
 5907|      1|            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
 5908|      1|            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
 5909|      1|            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
 5910|      1|            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
 5911|      1|            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
 5912|      1|            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
 5913|      1|            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
 5914|      1|            "int hitObjectGetInstanceIdNV(hitObjectNV);"
 5915|      1|            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
 5916|      1|            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
 5917|      1|            "uint hitObjectGetHitKindNV(hitObjectNV);"
 5918|      1|            "void hitObjectGetAttributesNV(hitObjectNV,int);"
 5919|      1|            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
 5920|      1|            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
 5921|      1|            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
 5922|      1|            "int hitObjectGetClusterIdNV(hitObjectNV);"
 5923|      1|            "vec3 hitObjectGetSpherePositionNV(hitObjectNV);"
 5924|      1|            "float hitObjectGetSphereRadiusNV(hitObjectNV);"
 5925|      1|            "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);"
 5926|      1|            "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);"
 5927|      1|            "bool hitObjectIsSphereHitNV(hitObjectNV);"
 5928|      1|            "bool hitObjectIsLSSHitNV(hitObjectNV);"
 5929|      1|            "void hitObjectTraceRayEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5930|      1|            "void hitObjectTraceRayMotionEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5931|      1|            "void hitObjectRecordMissEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float);"
 5932|      1|            "void hitObjectRecordMissMotionEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float,float);"
 5933|      1|            "void hitObjectRecordEmptyEXT(hitObjectEXT);"
 5934|      1|            "void hitObjectExecuteShaderEXT(hitObjectEXT,int);"
 5935|      1|            "bool hitObjectIsEmptyEXT(hitObjectEXT);"
 5936|      1|            "bool hitObjectIsMissEXT(hitObjectEXT);"
 5937|      1|            "bool hitObjectIsHitEXT(hitObjectEXT);"
 5938|      1|            "float hitObjectGetRayTMinEXT(hitObjectEXT);"
 5939|      1|            "float hitObjectGetRayTMaxEXT(hitObjectEXT);"
 5940|      1|            "uint hitObjectGetRayFlagsEXT(hitObjectEXT);"
 5941|      1|            "vec3 hitObjectGetWorldRayOriginEXT(hitObjectEXT);"
 5942|      1|            "vec3 hitObjectGetWorldRayDirectionEXT(hitObjectEXT);"
 5943|      1|            "vec3 hitObjectGetObjectRayOriginEXT(hitObjectEXT);"
 5944|      1|            "vec3 hitObjectGetObjectRayDirectionEXT(hitObjectEXT);"
 5945|      1|            "mat4x3 hitObjectGetWorldToObjectEXT(hitObjectEXT);"
 5946|      1|            "mat4x3 hitObjectGetObjectToWorldEXT(hitObjectEXT);"
 5947|      1|            "int hitObjectGetInstanceCustomIndexEXT(hitObjectEXT);"
 5948|      1|            "int hitObjectGetInstanceIdEXT(hitObjectEXT);"
 5949|      1|            "int hitObjectGetGeometryIndexEXT(hitObjectEXT);"
 5950|      1|            "int hitObjectGetPrimitiveIndexEXT(hitObjectEXT);"
 5951|      1|            "uint hitObjectGetHitKindEXT(hitObjectEXT);"
 5952|      1|            "void hitObjectGetAttributesEXT(hitObjectEXT,int);"
 5953|      1|            "float hitObjectGetCurrentTimeEXT(hitObjectEXT);"
 5954|      1|            "uint hitObjectGetShaderBindingTableRecordIndexEXT(hitObjectEXT);"
 5955|      1|            "uvec2 hitObjectGetShaderRecordBufferHandleEXT(hitObjectEXT);"
 5956|      1|            "void hitObjectSetShaderBindingTableRecordIndexEXT(hitObjectEXT, uint);"
 5957|      1|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int);"
 5958|      1|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int, uint);"
 5959|      1|            "void hitObjectGetIntersectionTriangleVertexPositionsEXT(hitObjectEXT, out vec3[3]);"
 5960|      1|            "\n");
 5961|      1|        stageBuiltins[EShLangCallable].append(
 5962|      1|            "void executeCallableNV(uint, int);"
 5963|      1|            "void executeCallableEXT(uint, int);"
 5964|      1|            "\n");
 5965|      1|    }
 5966|       |
 5967|       |    // GL_KHR_compute_shader_derivatives / SPV_NV_compute_shader_derivatives
 5968|  1.11k|    if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (5968:10): [True: 654, False: 459]
  |  Branch (5968:35): [True: 3, False: 651]
  |  Branch (5968:55): [True: 459, False: 651]
  |  Branch (5968:80): [True: 444, False: 15]
  ------------------
 5969|    447|        if (profile != EEsProfile) {
  ------------------
  |  Branch (5969:13): [True: 444, False: 3]
  ------------------
 5970|    444|            stageBuiltins[EShLangCompute].append(derivatives);
 5971|    444|            stageBuiltins[EShLangTask].append(derivatives);
 5972|    444|            stageBuiltins[EShLangMesh].append(derivatives);
 5973|    444|        }
 5974|       |
 5975|    447|        stageBuiltins[EShLangCompute].append(derivativeControls);
 5976|    447|        stageBuiltins[EShLangCompute].append("\n");
 5977|       |
 5978|    447|        if (profile != EEsProfile) {
  ------------------
  |  Branch (5978:13): [True: 444, False: 3]
  ------------------
 5979|    444|            stageBuiltins[EShLangTask].append(derivativeControls);
 5980|    444|            stageBuiltins[EShLangTask].append("\n");
 5981|    444|            stageBuiltins[EShLangMesh].append(derivativeControls);
 5982|    444|            stageBuiltins[EShLangMesh].append("\n");
 5983|    444|        }
 5984|    447|    }
 5985|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5985:9): [True: 459, False: 654]
  |  Branch (5985:34): [True: 444, False: 15]
  ------------------
 5986|    444|        stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
 5987|    444|        stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
 5988|    444|        stageBuiltins[EShLangCompute].append("\n");
 5989|    444|        stageBuiltins[EShLangTask].append(derivativesAndControl16bits);
 5990|    444|        stageBuiltins[EShLangTask].append(derivativesAndControl64bits);
 5991|    444|        stageBuiltins[EShLangTask].append("\n");
 5992|    444|        stageBuiltins[EShLangMesh].append(derivativesAndControl16bits);
 5993|    444|        stageBuiltins[EShLangMesh].append(derivativesAndControl64bits);
 5994|    444|        stageBuiltins[EShLangMesh].append("\n");
 5995|    444|    }
 5996|       |
 5997|       |    // Builtins for GL_NV_mesh_shader
 5998|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (5998:10): [True: 459, False: 654]
  |  Branch (5998:35): [True: 444, False: 15]
  |  Branch (5998:55): [True: 654, False: 15]
  |  Branch (5998:80): [True: 3, False: 651]
  ------------------
 5999|    447|        stageBuiltins[EShLangMesh].append(
 6000|    447|            "void writePackedPrimitiveIndices4x8NV(uint, uint);"
 6001|    447|            "\n");
 6002|    447|    }
 6003|       |    // Builtins for GL_EXT_mesh_shader
 6004|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (6004:10): [True: 459, False: 654]
  |  Branch (6004:35): [True: 444, False: 15]
  |  Branch (6004:55): [True: 654, False: 15]
  |  Branch (6004:80): [True: 3, False: 651]
  ------------------
 6005|       |        // Builtins for GL_EXT_mesh_shader
 6006|    447|        stageBuiltins[EShLangTask].append(
 6007|    447|            "void EmitMeshTasksEXT(uint, uint, uint);"
 6008|    447|            "\n");
 6009|       |
 6010|    447|        stageBuiltins[EShLangMesh].append(
 6011|    447|            "void SetMeshOutputsEXT(uint, uint);"
 6012|    447|            "\n");
 6013|    447|    }
 6014|       |    // Builtins for GL_NV_displacement_micromap
 6015|  1.11k|    if ((profile != EEsProfile && version >= 460) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (6015:10): [True: 459, False: 654]
  |  Branch (6015:35): [True: 1, False: 458]
  |  Branch (6015:55): [True: 654, False: 458]
  |  Branch (6015:80): [True: 3, False: 651]
  ------------------
 6016|      4|        stageBuiltins[EShLangMesh].append(
 6017|      4|            "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);"
 6018|      4|            "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);"
 6019|      4|            "\n");
 6020|       |
 6021|      4|        stageBuiltins[EShLangCompute].append(
 6022|      4|            "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);"
 6023|      4|            "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);"
 6024|      4|            "\n");
 6025|       |
 6026|      4|    }
 6027|       |
 6028|       |
 6029|       |    //============================================================================
 6030|       |    //
 6031|       |    // Standard Uniforms
 6032|       |    //
 6033|       |    //============================================================================
 6034|       |
 6035|       |    //
 6036|       |    // Depth range in window coordinates, p. 33
 6037|       |    //
 6038|  1.11k|    if (spvVersion.spv == 0) {
  ------------------
  |  Branch (6038:9): [True: 215, False: 898]
  ------------------
 6039|    215|        commonBuiltins.append(
 6040|    215|            "struct gl_DepthRangeParameters {"
 6041|    215|            );
 6042|    215|        if (profile == EEsProfile) {
  ------------------
  |  Branch (6042:13): [True: 160, False: 55]
  ------------------
 6043|    160|            commonBuiltins.append(
 6044|    160|                "highp float near;"   // n
 6045|    160|                "highp float far;"    // f
 6046|    160|                "highp float diff;"   // f - n
 6047|    160|                );
 6048|    160|        } else {
 6049|     55|            commonBuiltins.append(
 6050|     55|                "float near;"  // n
 6051|     55|                "float far;"   // f
 6052|     55|                "float diff;"  // f - n
 6053|     55|                );
 6054|     55|        }
 6055|       |
 6056|    215|        commonBuiltins.append(
 6057|    215|            "};"
 6058|    215|            "uniform gl_DepthRangeParameters gl_DepthRange;"
 6059|    215|            "\n");
 6060|    215|    }
 6061|       |
 6062|  1.11k|    if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (6062:9): [True: 215, False: 898]
  |  Branch (6062:32): [True: 0, False: 215]
  ------------------
 6063|       |        //
 6064|       |        // Matrix state. p. 31, 32, 37, 39, 40.
 6065|       |        //
 6066|      0|        commonBuiltins.append(
 6067|      0|            "uniform mat4  gl_ModelViewMatrix;"
 6068|      0|            "uniform mat4  gl_ProjectionMatrix;"
 6069|      0|            "uniform mat4  gl_ModelViewProjectionMatrix;"
 6070|       |
 6071|       |            //
 6072|       |            // Derived matrix state that provides inverse and transposed versions
 6073|       |            // of the matrices above.
 6074|       |            //
 6075|      0|            "uniform mat3  gl_NormalMatrix;"
 6076|       |
 6077|      0|            "uniform mat4  gl_ModelViewMatrixInverse;"
 6078|      0|            "uniform mat4  gl_ProjectionMatrixInverse;"
 6079|      0|            "uniform mat4  gl_ModelViewProjectionMatrixInverse;"
 6080|       |
 6081|      0|            "uniform mat4  gl_ModelViewMatrixTranspose;"
 6082|      0|            "uniform mat4  gl_ProjectionMatrixTranspose;"
 6083|      0|            "uniform mat4  gl_ModelViewProjectionMatrixTranspose;"
 6084|       |
 6085|      0|            "uniform mat4  gl_ModelViewMatrixInverseTranspose;"
 6086|      0|            "uniform mat4  gl_ProjectionMatrixInverseTranspose;"
 6087|      0|            "uniform mat4  gl_ModelViewProjectionMatrixInverseTranspose;"
 6088|       |
 6089|       |            //
 6090|       |            // Normal scaling p. 39.
 6091|       |            //
 6092|      0|            "uniform float gl_NormalScale;"
 6093|       |
 6094|       |            //
 6095|       |            // Point Size, p. 66, 67.
 6096|       |            //
 6097|      0|            "struct gl_PointParameters {"
 6098|      0|                "float size;"
 6099|      0|                "float sizeMin;"
 6100|      0|                "float sizeMax;"
 6101|      0|                "float fadeThresholdSize;"
 6102|      0|                "float distanceConstantAttenuation;"
 6103|      0|                "float distanceLinearAttenuation;"
 6104|      0|                "float distanceQuadraticAttenuation;"
 6105|      0|            "};"
 6106|       |
 6107|      0|            "uniform gl_PointParameters gl_Point;"
 6108|       |
 6109|       |            //
 6110|       |            // Material State p. 50, 55.
 6111|       |            //
 6112|      0|            "struct gl_MaterialParameters {"
 6113|      0|                "vec4  emission;"    // Ecm
 6114|      0|                "vec4  ambient;"     // Acm
 6115|      0|                "vec4  diffuse;"     // Dcm
 6116|      0|                "vec4  specular;"    // Scm
 6117|      0|                "float shininess;"   // Srm
 6118|      0|            "};"
 6119|      0|            "uniform gl_MaterialParameters  gl_FrontMaterial;"
 6120|      0|            "uniform gl_MaterialParameters  gl_BackMaterial;"
 6121|       |
 6122|       |            //
 6123|       |            // Light State p 50, 53, 55.
 6124|       |            //
 6125|      0|            "struct gl_LightSourceParameters {"
 6126|      0|                "vec4  ambient;"             // Acli
 6127|      0|                "vec4  diffuse;"             // Dcli
 6128|      0|                "vec4  specular;"            // Scli
 6129|      0|                "vec4  position;"            // Ppli
 6130|      0|                "vec4  halfVector;"          // Derived: Hi
 6131|      0|                "vec3  spotDirection;"       // Sdli
 6132|      0|                "float spotExponent;"        // Srli
 6133|      0|                "float spotCutoff;"          // Crli
 6134|       |                                                        // (range: [0.0,90.0], 180.0)
 6135|      0|                "float spotCosCutoff;"       // Derived: cos(Crli)
 6136|       |                                                        // (range: [1.0,0.0],-1.0)
 6137|      0|                "float constantAttenuation;" // K0
 6138|      0|                "float linearAttenuation;"   // K1
 6139|      0|                "float quadraticAttenuation;"// K2
 6140|      0|            "};"
 6141|       |
 6142|      0|            "struct gl_LightModelParameters {"
 6143|      0|                "vec4  ambient;"       // Acs
 6144|      0|            "};"
 6145|       |
 6146|      0|            "uniform gl_LightModelParameters  gl_LightModel;"
 6147|       |
 6148|       |            //
 6149|       |            // Derived state from products of light and material.
 6150|       |            //
 6151|      0|            "struct gl_LightModelProducts {"
 6152|      0|                "vec4  sceneColor;"     // Derived. Ecm + Acm * Acs
 6153|      0|            "};"
 6154|       |
 6155|      0|            "uniform gl_LightModelProducts gl_FrontLightModelProduct;"
 6156|      0|            "uniform gl_LightModelProducts gl_BackLightModelProduct;"
 6157|       |
 6158|      0|            "struct gl_LightProducts {"
 6159|      0|                "vec4  ambient;"        // Acm * Acli
 6160|      0|                "vec4  diffuse;"        // Dcm * Dcli
 6161|      0|                "vec4  specular;"       // Scm * Scli
 6162|      0|            "};"
 6163|       |
 6164|       |            //
 6165|       |            // Fog p. 161
 6166|       |            //
 6167|      0|            "struct gl_FogParameters {"
 6168|      0|                "vec4  color;"
 6169|      0|                "float density;"
 6170|      0|                "float start;"
 6171|      0|                "float end;"
 6172|      0|                "float scale;"   //  1 / (gl_FogEnd - gl_FogStart)
 6173|      0|            "};"
 6174|       |
 6175|      0|            "uniform gl_FogParameters gl_Fog;"
 6176|       |
 6177|      0|            "\n");
 6178|      0|    }
 6179|       |
 6180|       |    //============================================================================
 6181|       |    //
 6182|       |    // Define the interface to the compute shader.
 6183|       |    //
 6184|       |    //============================================================================
 6185|       |
 6186|  1.11k|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (6186:10): [True: 459, False: 654]
  |  Branch (6186:35): [True: 448, False: 11]
  ------------------
 6187|    942|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6187:10): [True: 654, False: 11]
  |  Branch (6187:35): [True: 494, False: 160]
  ------------------
 6188|    942|        stageBuiltins[EShLangCompute].append(
 6189|    942|            "in    highp uvec3 gl_NumWorkGroups;"
 6190|    942|            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
 6191|       |
 6192|    942|            "in highp uvec3 gl_WorkGroupID;"
 6193|    942|            "in highp uvec3 gl_LocalInvocationID;"
 6194|       |
 6195|    942|            "in highp uvec3 gl_GlobalInvocationID;"
 6196|    942|            "in highp uint gl_LocalInvocationIndex;"
 6197|       |
 6198|    942|            "\n");
 6199|    942|    }
 6200|       |
 6201|  1.11k|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6201:10): [True: 459, False: 654]
  |  Branch (6201:35): [True: 459, False: 0]
  ------------------
 6202|    953|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6202:10): [True: 654, False: 0]
  |  Branch (6202:35): [True: 494, False: 160]
  ------------------
 6203|    953|        stageBuiltins[EShLangCompute].append(
 6204|    953|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6205|    953|            "\n");
 6206|    953|    }
 6207|       |
 6208|       |    // GL_QCOM_tile_shading
 6209|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (6209:10): [True: 654, False: 459]
  |  Branch (6209:35): [True: 494, False: 160]
  ------------------
 6210|    619|        (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (6210:10): [True: 459, False: 160]
  |  Branch (6210:35): [True: 1, False: 458]
  ------------------
 6211|    495|        stageBuiltins[EShLangCompute].append(
 6212|    495|            "in highp uvec2 gl_TileOffsetQCOM;"     // GL_QCOM_tile_shading
 6213|    495|            "in highp uvec3 gl_TileDimensionQCOM;"  // GL_QCOM_tile_shading
 6214|    495|            "in highp uvec2 gl_TileApronSizeQCOM;"  // GL_QCOM_tile_shading
 6215|    495|            "\n");
 6216|    495|    }
 6217|       |
 6218|       |    //============================================================================
 6219|       |    //
 6220|       |    // Define the interface to the mesh/task shader.
 6221|       |    //
 6222|       |    //============================================================================
 6223|       |
 6224|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (6224:10): [True: 459, False: 654]
  |  Branch (6224:35): [True: 444, False: 15]
  |  Branch (6224:55): [True: 654, False: 15]
  |  Branch (6224:80): [True: 3, False: 651]
  ------------------
 6225|       |        // per-vertex attributes
 6226|    447|        stageBuiltins[EShLangMesh].append(
 6227|    447|            "out gl_MeshPerVertexNV {"
 6228|    447|                "vec4 gl_Position;"
 6229|    447|                "float gl_PointSize;"
 6230|    447|                "float gl_ClipDistance[];"
 6231|    447|                "float gl_CullDistance[];"
 6232|    447|                "perviewNV vec4 gl_PositionPerViewNV[];"
 6233|    447|                "perviewNV float gl_ClipDistancePerViewNV[][];"
 6234|    447|                "perviewNV float gl_CullDistancePerViewNV[][];"
 6235|    447|            "} gl_MeshVerticesNV[];"
 6236|    447|        );
 6237|       |
 6238|       |        // per-primitive attributes
 6239|    447|        stageBuiltins[EShLangMesh].append(
 6240|    447|            "perprimitiveNV out gl_MeshPerPrimitiveNV {"
 6241|    447|                "int gl_PrimitiveID;"
 6242|    447|                "int gl_Layer;"
 6243|    447|                "int gl_ViewportIndex;"
 6244|    447|                "int gl_ViewportMask[];"
 6245|    447|                "perviewNV int gl_LayerPerViewNV[];"
 6246|    447|                "perviewNV int gl_ViewportMaskPerViewNV[][];"
 6247|    447|            "} gl_MeshPrimitivesNV[];"
 6248|    447|        );
 6249|       |
 6250|    447|        stageBuiltins[EShLangMesh].append(
 6251|    447|            "out uint gl_PrimitiveCountNV;"
 6252|    447|            "out uint gl_PrimitiveIndicesNV[];"
 6253|       |
 6254|    447|            "in uint gl_MeshViewCountNV;"
 6255|    447|            "in uint gl_MeshViewIndicesNV[4];"
 6256|       |
 6257|    447|            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
 6258|       |
 6259|    447|            "in highp uvec3 gl_WorkGroupID;"
 6260|    447|            "in highp uvec3 gl_LocalInvocationID;"
 6261|       |
 6262|    447|            "in highp uvec3 gl_GlobalInvocationID;"
 6263|    447|            "in highp uint gl_LocalInvocationIndex;"
 6264|    447|            "\n");
 6265|       |
 6266|       |        // GL_EXT_mesh_shader
 6267|    447|        stageBuiltins[EShLangMesh].append(
 6268|    447|            "out uint gl_PrimitivePointIndicesEXT[];"
 6269|    447|            "out uvec2 gl_PrimitiveLineIndicesEXT[];"
 6270|    447|            "out uvec3 gl_PrimitiveTriangleIndicesEXT[];"
 6271|    447|            "in    highp uvec3 gl_NumWorkGroups;"
 6272|    447|            "\n");
 6273|       |
 6274|       |        // per-vertex attributes
 6275|    447|        stageBuiltins[EShLangMesh].append(
 6276|    447|            "out gl_MeshPerVertexEXT {"
 6277|    447|                "vec4 gl_Position;"
 6278|    447|                "float gl_PointSize;"
 6279|    447|                "float gl_ClipDistance[];"
 6280|    447|                "float gl_CullDistance[];"
 6281|    447|            "} gl_MeshVerticesEXT[];"
 6282|    447|        );
 6283|       |
 6284|       |        // per-primitive attributes
 6285|    447|        stageBuiltins[EShLangMesh].append(
 6286|    447|            "perprimitiveEXT out gl_MeshPerPrimitiveEXT {"
 6287|    447|                "int gl_PrimitiveID;"
 6288|    447|                "int gl_Layer;"
 6289|    447|                "int gl_ViewportIndex;"
 6290|    447|                "bool gl_CullPrimitiveEXT;"
 6291|    447|                "int  gl_PrimitiveShadingRateEXT;"
 6292|    447|            "} gl_MeshPrimitivesEXT[];"
 6293|    447|        );
 6294|       |
 6295|    447|        stageBuiltins[EShLangTask].append(
 6296|    447|            "out uint gl_TaskCountNV;"
 6297|       |
 6298|    447|            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
 6299|       |
 6300|    447|            "in highp uvec3 gl_WorkGroupID;"
 6301|    447|            "in highp uvec3 gl_LocalInvocationID;"
 6302|       |
 6303|    447|            "in highp uvec3 gl_GlobalInvocationID;"
 6304|    447|            "in highp uint gl_LocalInvocationIndex;"
 6305|       |
 6306|    447|            "in uint gl_MeshViewCountNV;"
 6307|    447|            "in uint gl_MeshViewIndicesNV[4];"
 6308|    447|            "in    highp uvec3 gl_NumWorkGroups;"
 6309|    447|            "\n");
 6310|    447|    }
 6311|       |
 6312|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (6312:9): [True: 459, False: 654]
  |  Branch (6312:34): [True: 444, False: 15]
  ------------------
 6313|    444|        stageBuiltins[EShLangMesh].append(
 6314|    444|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6315|    444|            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
 6316|    444|            "in int gl_ViewIndex;"             // GL_EXT_multiview
 6317|    444|            "\n");
 6318|       |
 6319|    444|        stageBuiltins[EShLangTask].append(
 6320|    444|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6321|    444|            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
 6322|    444|            "\n");
 6323|       |
 6324|    444|        if (version >= 460) {
  ------------------
  |  Branch (6324:13): [True: 1, False: 443]
  ------------------
 6325|      1|            stageBuiltins[EShLangMesh].append(
 6326|      1|                "in int gl_DrawID;"
 6327|      1|                "\n");
 6328|       |
 6329|      1|            stageBuiltins[EShLangTask].append(
 6330|      1|                "in int gl_DrawID;"
 6331|      1|                "\n");
 6332|      1|        }
 6333|    444|    }
 6334|       |
 6335|       |    //============================================================================
 6336|       |    //
 6337|       |    // Define the interface to the vertex shader.
 6338|       |    //
 6339|       |    //============================================================================
 6340|       |
 6341|  1.11k|    if (profile != EEsProfile) {
  ------------------
  |  Branch (6341:9): [True: 459, False: 654]
  ------------------
 6342|    459|        if (version < 130) {
  ------------------
  |  Branch (6342:13): [True: 0, False: 459]
  ------------------
 6343|      0|            stageBuiltins[EShLangVertex].append(
 6344|      0|                "attribute vec4  gl_Color;"
 6345|      0|                "attribute vec4  gl_SecondaryColor;"
 6346|      0|                "attribute vec3  gl_Normal;"
 6347|      0|                "attribute vec4  gl_Vertex;"
 6348|      0|                "attribute vec4  gl_MultiTexCoord0;"
 6349|      0|                "attribute vec4  gl_MultiTexCoord1;"
 6350|      0|                "attribute vec4  gl_MultiTexCoord2;"
 6351|      0|                "attribute vec4  gl_MultiTexCoord3;"
 6352|      0|                "attribute vec4  gl_MultiTexCoord4;"
 6353|      0|                "attribute vec4  gl_MultiTexCoord5;"
 6354|      0|                "attribute vec4  gl_MultiTexCoord6;"
 6355|      0|                "attribute vec4  gl_MultiTexCoord7;"
 6356|      0|                "attribute float gl_FogCoord;"
 6357|      0|                "\n");
 6358|    459|        } else if (IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (6358:20): [True: 0, False: 459]
  ------------------
 6359|      0|            stageBuiltins[EShLangVertex].append(
 6360|      0|                "in vec4  gl_Color;"
 6361|      0|                "in vec4  gl_SecondaryColor;"
 6362|      0|                "in vec3  gl_Normal;"
 6363|      0|                "in vec4  gl_Vertex;"
 6364|      0|                "in vec4  gl_MultiTexCoord0;"
 6365|      0|                "in vec4  gl_MultiTexCoord1;"
 6366|      0|                "in vec4  gl_MultiTexCoord2;"
 6367|      0|                "in vec4  gl_MultiTexCoord3;"
 6368|      0|                "in vec4  gl_MultiTexCoord4;"
 6369|      0|                "in vec4  gl_MultiTexCoord5;"
 6370|      0|                "in vec4  gl_MultiTexCoord6;"
 6371|      0|                "in vec4  gl_MultiTexCoord7;"
 6372|      0|                "in float gl_FogCoord;"
 6373|      0|                "\n");
 6374|      0|        }
 6375|       |
 6376|    459|        if (version < 150) {
  ------------------
  |  Branch (6376:13): [True: 0, False: 459]
  ------------------
 6377|      0|            if (version < 130) {
  ------------------
  |  Branch (6377:17): [True: 0, False: 0]
  ------------------
 6378|      0|                stageBuiltins[EShLangVertex].append(
 6379|      0|                    "        vec4  gl_ClipVertex;"       // needs qualifier fixed later
 6380|      0|                    "varying vec4  gl_FrontColor;"
 6381|      0|                    "varying vec4  gl_BackColor;"
 6382|      0|                    "varying vec4  gl_FrontSecondaryColor;"
 6383|      0|                    "varying vec4  gl_BackSecondaryColor;"
 6384|      0|                    "varying vec4  gl_TexCoord[];"
 6385|      0|                    "varying float gl_FogFragCoord;"
 6386|      0|                    "\n");
 6387|      0|            } else if (IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (6387:24): [True: 0, False: 0]
  ------------------
 6388|      0|                stageBuiltins[EShLangVertex].append(
 6389|      0|                    "    vec4  gl_ClipVertex;"       // needs qualifier fixed later
 6390|      0|                    "out vec4  gl_FrontColor;"
 6391|      0|                    "out vec4  gl_BackColor;"
 6392|      0|                    "out vec4  gl_FrontSecondaryColor;"
 6393|      0|                    "out vec4  gl_BackSecondaryColor;"
 6394|      0|                    "out vec4  gl_TexCoord[];"
 6395|      0|                    "out float gl_FogFragCoord;"
 6396|      0|                    "\n");
 6397|      0|            }
 6398|      0|            stageBuiltins[EShLangVertex].append(
 6399|      0|                "vec4 gl_Position;"   // needs qualifier fixed later
 6400|      0|                "float gl_PointSize;" // needs qualifier fixed later
 6401|      0|                );
 6402|       |
 6403|      0|            if (version == 130 || version == 140)
  ------------------
  |  Branch (6403:17): [True: 0, False: 0]
  |  Branch (6403:35): [True: 0, False: 0]
  ------------------
 6404|      0|                stageBuiltins[EShLangVertex].append(
 6405|      0|                    "out float gl_ClipDistance[];"
 6406|      0|                    );
 6407|    459|        } else {
 6408|       |            // version >= 150
 6409|    459|            stageBuiltins[EShLangVertex].append(
 6410|    459|                "out gl_PerVertex {"
 6411|    459|                    "vec4 gl_Position;"     // needs qualifier fixed later
 6412|    459|                    "float gl_PointSize;"   // needs qualifier fixed later
 6413|    459|                    "float gl_ClipDistance[];"
 6414|    459|                    );
 6415|    459|            if (IncludeLegacy(version, profile, spvVersion))
  ------------------
  |  Branch (6415:17): [True: 0, False: 459]
  ------------------
 6416|      0|                stageBuiltins[EShLangVertex].append(
 6417|      0|                    "vec4 gl_ClipVertex;"   // needs qualifier fixed later
 6418|      0|                    "vec4 gl_FrontColor;"
 6419|      0|                    "vec4 gl_BackColor;"
 6420|      0|                    "vec4 gl_FrontSecondaryColor;"
 6421|      0|                    "vec4 gl_BackSecondaryColor;"
 6422|      0|                    "vec4 gl_TexCoord[];"
 6423|      0|                    "float gl_FogFragCoord;"
 6424|      0|                    );
 6425|    459|            if (version >= 450)
  ------------------
  |  Branch (6425:17): [True: 444, False: 15]
  ------------------
 6426|    444|                stageBuiltins[EShLangVertex].append(
 6427|    444|                    "float gl_CullDistance[];"
 6428|    444|                    );
 6429|    459|            stageBuiltins[EShLangVertex].append(
 6430|    459|                "};"
 6431|    459|                "\n");
 6432|    459|        }
 6433|    459|        if (version >= 130 && spvVersion.vulkan == 0)
  ------------------
  |  Branch (6433:13): [True: 459, False: 0]
  |  Branch (6433:31): [True: 406, False: 53]
  ------------------
 6434|    406|            stageBuiltins[EShLangVertex].append(
 6435|    406|                "int gl_VertexID;"            // needs qualifier fixed later
 6436|    406|                );
 6437|    459|        if (spvVersion.vulkan == 0)
  ------------------
  |  Branch (6437:13): [True: 406, False: 53]
  ------------------
 6438|    406|            stageBuiltins[EShLangVertex].append(
 6439|    406|                "int gl_InstanceID;"          // needs qualifier fixed later
 6440|    406|                );
 6441|    459|        if (spvVersion.vulkan > 0 && version >= 140)
  ------------------
  |  Branch (6441:13): [True: 53, False: 406]
  |  Branch (6441:38): [True: 53, False: 0]
  ------------------
 6442|     53|            stageBuiltins[EShLangVertex].append(
 6443|     53|                "in int gl_VertexIndex;"
 6444|     53|                "in int gl_InstanceIndex;"
 6445|     53|                );
 6446|       |
 6447|    459|        if (spvVersion.vulkan > 0 && version >= 140 && spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (6447:13): [True: 53, False: 406]
  |  Branch (6447:38): [True: 53, False: 0]
  |  Branch (6447:56): [True: 0, False: 53]
  ------------------
 6448|      0|            stageBuiltins[EShLangVertex].append(
 6449|      0|                "in int gl_VertexID;"         // declare with 'in' qualifier
 6450|      0|                "in int gl_InstanceID;"
 6451|      0|                );
 6452|       |
 6453|    459|        if (version >= 440) {
  ------------------
  |  Branch (6453:13): [True: 446, False: 13]
  ------------------
 6454|    446|            stageBuiltins[EShLangVertex].append(
 6455|    446|                "in int gl_BaseVertexARB;"
 6456|    446|                "in int gl_BaseInstanceARB;"
 6457|    446|                "in int gl_DrawIDARB;"
 6458|    446|                );
 6459|    446|        }
 6460|    459|        if (version >= 410) {
  ------------------
  |  Branch (6460:13): [True: 449, False: 10]
  ------------------
 6461|    449|            stageBuiltins[EShLangVertex].append(
 6462|    449|                "out int gl_ViewportIndex;"
 6463|    449|                "out int gl_Layer;"
 6464|    449|                );
 6465|    449|        }
 6466|    459|        if (version >= 460) {
  ------------------
  |  Branch (6466:13): [True: 1, False: 458]
  ------------------
 6467|      1|            stageBuiltins[EShLangVertex].append(
 6468|      1|                "in int gl_BaseVertex;"
 6469|      1|                "in int gl_BaseInstance;"
 6470|      1|                "in int gl_DrawID;"
 6471|      1|                );
 6472|      1|        }
 6473|       |
 6474|    459|        if (version >= 430)
  ------------------
  |  Branch (6474:13): [True: 447, False: 12]
  ------------------
 6475|    447|            stageBuiltins[EShLangVertex].append(
 6476|    447|                "out int gl_ViewportMask[];"             // GL_NV_viewport_array2
 6477|    447|                );
 6478|       |
 6479|    459|        if (version >= 450)
  ------------------
  |  Branch (6479:13): [True: 444, False: 15]
  ------------------
 6480|    444|            stageBuiltins[EShLangVertex].append(
 6481|    444|                "out int gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
 6482|    444|                "out vec4 gl_SecondaryPositionNV;"       // GL_NV_stereo_view_rendering
 6483|    444|                "out vec4 gl_PositionPerViewNV[];"       // GL_NVX_multiview_per_view_attributes
 6484|    444|                "out int  gl_ViewportMaskPerViewNV[];"   // GL_NVX_multiview_per_view_attributes
 6485|    444|                );
 6486|    654|    } else {
 6487|       |        // ES profile
 6488|    654|        if (version == 100) {
  ------------------
  |  Branch (6488:13): [True: 160, False: 494]
  ------------------
 6489|    160|            stageBuiltins[EShLangVertex].append(
 6490|    160|                "highp   vec4  gl_Position;"  // needs qualifier fixed later
 6491|    160|                "mediump float gl_PointSize;" // needs qualifier fixed later
 6492|    160|                "highp int gl_InstanceID;" // needs qualifier fixed later
 6493|    160|                );
 6494|    494|        } else {
 6495|    494|            if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (6495:17): [True: 494, False: 0]
  |  Branch (6495:43): [True: 0, False: 0]
  ------------------
 6496|    494|                stageBuiltins[EShLangVertex].append(
 6497|    494|                    "in highp int gl_VertexID;"      // needs qualifier fixed later
 6498|    494|                    "in highp int gl_InstanceID;"    // needs qualifier fixed later
 6499|    494|                    );
 6500|    494|            if (spvVersion.vulkan > 0)
  ------------------
  |  Branch (6500:17): [True: 0, False: 494]
  ------------------
 6501|      0|                stageBuiltins[EShLangVertex].append(
 6502|      0|                    "in highp int gl_VertexIndex;"
 6503|      0|                    "in highp int gl_InstanceIndex;"
 6504|      0|                    );
 6505|    494|            if (version < 310)
  ------------------
  |  Branch (6505:17): [True: 0, False: 494]
  ------------------
 6506|      0|                stageBuiltins[EShLangVertex].append(
 6507|      0|                    "highp vec4  gl_Position;"    // needs qualifier fixed later
 6508|      0|                    "highp float gl_PointSize;"   // needs qualifier fixed later
 6509|      0|                    );
 6510|    494|            else
 6511|    494|                stageBuiltins[EShLangVertex].append(
 6512|    494|                    "out gl_PerVertex {"
 6513|    494|                        "highp vec4  gl_Position;"    // needs qualifier fixed later
 6514|    494|                        "highp float gl_PointSize;"   // needs qualifier fixed later
 6515|    494|                    "};"
 6516|    494|                    );
 6517|    494|        }
 6518|    654|    }
 6519|       |
 6520|  1.11k|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6520:10): [True: 459, False: 654]
  |  Branch (6520:35): [True: 459, False: 0]
  ------------------
 6521|    953|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6521:10): [True: 654, False: 0]
  |  Branch (6521:35): [True: 494, False: 160]
  ------------------
 6522|    953|        stageBuiltins[EShLangVertex].append(
 6523|    953|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6524|    953|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6525|    953|            "\n");
 6526|    953|    }
 6527|       |
 6528|  1.11k|    if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (6528:9): [True: 953, False: 160]
  ------------------
 6529|    953|        stageBuiltins[EShLangVertex].append(
 6530|    953|            "in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
 6531|    953|            "\n");
 6532|    953|    }
 6533|       |
 6534|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6534:10): [True: 459, False: 654]
  |  Branch (6534:35): [True: 444, False: 15]
  |  Branch (6534:55): [True: 654, False: 15]
  |  Branch (6534:80): [True: 494, False: 160]
  ------------------
 6535|    938|        stageBuiltins[EShLangVertex].append(
 6536|    938|            "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
 6537|    938|            "\n");
 6538|    938|    }
 6539|       |
 6540|       |    //============================================================================
 6541|       |    //
 6542|       |    // Define the interface to the geometry shader.
 6543|       |    //
 6544|       |    //============================================================================
 6545|       |
 6546|  1.11k|    if (profile == ECoreProfile || profile == ECompatibilityProfile) {
  ------------------
  |  Branch (6546:9): [True: 452, False: 661]
  |  Branch (6546:36): [True: 0, False: 661]
  ------------------
 6547|    452|        stageBuiltins[EShLangGeometry].append(
 6548|    452|            "in gl_PerVertex {"
 6549|    452|                "vec4 gl_Position;"
 6550|    452|                "float gl_PointSize;"
 6551|    452|                "float gl_ClipDistance[];"
 6552|    452|                );
 6553|    452|        if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (6553:13): [True: 0, False: 452]
  ------------------
 6554|      0|            stageBuiltins[EShLangGeometry].append(
 6555|      0|                "vec4 gl_ClipVertex;"
 6556|      0|                "vec4 gl_FrontColor;"
 6557|      0|                "vec4 gl_BackColor;"
 6558|      0|                "vec4 gl_FrontSecondaryColor;"
 6559|      0|                "vec4 gl_BackSecondaryColor;"
 6560|      0|                "vec4 gl_TexCoord[];"
 6561|      0|                "float gl_FogFragCoord;"
 6562|      0|                );
 6563|    452|        if (version >= 450)
  ------------------
  |  Branch (6563:13): [True: 444, False: 8]
  ------------------
 6564|    444|            stageBuiltins[EShLangGeometry].append(
 6565|    444|                "float gl_CullDistance[];"
 6566|    444|                "vec4 gl_SecondaryPositionNV;"   // GL_NV_stereo_view_rendering
 6567|    444|                "vec4 gl_PositionPerViewNV[];"   // GL_NVX_multiview_per_view_attributes
 6568|    444|                );
 6569|    452|        stageBuiltins[EShLangGeometry].append(
 6570|    452|            "} gl_in[];"
 6571|       |
 6572|    452|            "in int gl_PrimitiveIDIn;"
 6573|    452|            "out gl_PerVertex {"
 6574|    452|                "vec4 gl_Position;"
 6575|    452|                "float gl_PointSize;"
 6576|    452|                "float gl_ClipDistance[];"
 6577|    452|                "\n");
 6578|    452|        if (profile == ECompatibilityProfile && version >= 400)
  ------------------
  |  Branch (6578:13): [True: 0, False: 452]
  |  Branch (6578:49): [True: 0, False: 0]
  ------------------
 6579|      0|            stageBuiltins[EShLangGeometry].append(
 6580|      0|                "vec4 gl_ClipVertex;"
 6581|      0|                "vec4 gl_FrontColor;"
 6582|      0|                "vec4 gl_BackColor;"
 6583|      0|                "vec4 gl_FrontSecondaryColor;"
 6584|      0|                "vec4 gl_BackSecondaryColor;"
 6585|      0|                "vec4 gl_TexCoord[];"
 6586|      0|                "float gl_FogFragCoord;"
 6587|      0|                );
 6588|    452|        if (version >= 450)
  ------------------
  |  Branch (6588:13): [True: 444, False: 8]
  ------------------
 6589|    444|            stageBuiltins[EShLangGeometry].append(
 6590|    444|                "float gl_CullDistance[];"
 6591|    444|                );
 6592|    452|        stageBuiltins[EShLangGeometry].append(
 6593|    452|            "};"
 6594|       |
 6595|    452|            "out int gl_PrimitiveID;"
 6596|    452|            "out int gl_Layer;");
 6597|       |
 6598|    452|        if (version >= 150)
  ------------------
  |  Branch (6598:13): [True: 452, False: 0]
  ------------------
 6599|    452|            stageBuiltins[EShLangGeometry].append(
 6600|    452|            "out int gl_ViewportIndex;"
 6601|    452|            );
 6602|       |
 6603|    452|        if (profile == ECompatibilityProfile && version < 400)
  ------------------
  |  Branch (6603:13): [True: 0, False: 452]
  |  Branch (6603:49): [True: 0, False: 0]
  ------------------
 6604|      0|            stageBuiltins[EShLangGeometry].append(
 6605|      0|            "out vec4 gl_ClipVertex;"
 6606|      0|            );
 6607|       |
 6608|    452|        if (version >= 150)
  ------------------
  |  Branch (6608:13): [True: 452, False: 0]
  ------------------
 6609|    452|            stageBuiltins[EShLangGeometry].append(
 6610|    452|            "in int gl_InvocationID;"
 6611|    452|            );
 6612|       |
 6613|    452|        if (version >= 430)
  ------------------
  |  Branch (6613:13): [True: 447, False: 5]
  ------------------
 6614|    447|            stageBuiltins[EShLangGeometry].append(
 6615|    447|                "out int gl_ViewportMask[];"               // GL_NV_viewport_array2
 6616|    447|            );
 6617|       |
 6618|    452|        if (version >= 450)
  ------------------
  |  Branch (6618:13): [True: 444, False: 8]
  ------------------
 6619|    444|            stageBuiltins[EShLangGeometry].append(
 6620|    444|                "out int gl_SecondaryViewportMaskNV[];"    // GL_NV_stereo_view_rendering
 6621|    444|                "out vec4 gl_SecondaryPositionNV;"         // GL_NV_stereo_view_rendering
 6622|    444|                "out vec4 gl_PositionPerViewNV[];"         // GL_NVX_multiview_per_view_attributes
 6623|    444|                "out int  gl_ViewportMaskPerViewNV[];"     // GL_NVX_multiview_per_view_attributes
 6624|    444|            );
 6625|       |
 6626|    452|        stageBuiltins[EShLangGeometry].append("\n");
 6627|    661|    } else if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (6627:16): [True: 654, False: 7]
  |  Branch (6627:41): [True: 494, False: 160]
  ------------------
 6628|    494|        stageBuiltins[EShLangGeometry].append(
 6629|    494|            "in gl_PerVertex {"
 6630|    494|                "highp vec4 gl_Position;"
 6631|    494|                "highp float gl_PointSize;"
 6632|    494|            "} gl_in[];"
 6633|    494|            "\n"
 6634|    494|            "in highp int gl_PrimitiveIDIn;"
 6635|    494|            "in highp int gl_InvocationID;"
 6636|    494|            "\n"
 6637|    494|            "out gl_PerVertex {"
 6638|    494|                "highp vec4 gl_Position;"
 6639|    494|                "highp float gl_PointSize;"
 6640|    494|            "};"
 6641|    494|            "\n"
 6642|    494|            "out highp int gl_PrimitiveID;"
 6643|    494|            "out highp int gl_Layer;"
 6644|    494|            "\n"
 6645|    494|            );
 6646|    494|    }
 6647|       |
 6648|  1.11k|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6648:10): [True: 459, False: 654]
  |  Branch (6648:35): [True: 459, False: 0]
  ------------------
 6649|    953|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6649:10): [True: 654, False: 0]
  |  Branch (6649:35): [True: 494, False: 160]
  ------------------
 6650|    953|        stageBuiltins[EShLangGeometry].append(
 6651|    953|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6652|    953|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6653|    953|            "\n");
 6654|    953|    }
 6655|       |
 6656|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6656:10): [True: 459, False: 654]
  |  Branch (6656:35): [True: 444, False: 15]
  |  Branch (6656:55): [True: 654, False: 15]
  |  Branch (6656:80): [True: 494, False: 160]
  ------------------
 6657|    938|        stageBuiltins[EShLangGeometry].append(
 6658|    938|            "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
 6659|    938|            "\n");
 6660|    938|    }
 6661|       |
 6662|       |    //============================================================================
 6663|       |    //
 6664|       |    // Define the interface to the tessellation control shader.
 6665|       |    //
 6666|       |    //============================================================================
 6667|       |
 6668|  1.11k|    if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (6668:9): [True: 459, False: 654]
  |  Branch (6668:34): [True: 459, False: 0]
  ------------------
 6669|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6670|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6671|       |
 6672|    459|        stageBuiltins[EShLangTessControl].append(
 6673|    459|            "in int gl_PatchVerticesIn;"
 6674|    459|            "in int gl_PrimitiveID;"
 6675|    459|            "in int gl_InvocationID;"
 6676|       |
 6677|    459|            "out gl_PerVertex {"
 6678|    459|                "vec4 gl_Position;"
 6679|    459|                "float gl_PointSize;"
 6680|    459|                "float gl_ClipDistance[];"
 6681|    459|                );
 6682|    459|        if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (6682:13): [True: 0, False: 459]
  ------------------
 6683|      0|            stageBuiltins[EShLangTessControl].append(
 6684|      0|                "vec4 gl_ClipVertex;"
 6685|      0|                "vec4 gl_FrontColor;"
 6686|      0|                "vec4 gl_BackColor;"
 6687|      0|                "vec4 gl_FrontSecondaryColor;"
 6688|      0|                "vec4 gl_BackSecondaryColor;"
 6689|      0|                "vec4 gl_TexCoord[];"
 6690|      0|                "float gl_FogFragCoord;"
 6691|      0|                );
 6692|    459|        if (version >= 450)
  ------------------
  |  Branch (6692:13): [True: 444, False: 15]
  ------------------
 6693|    444|            stageBuiltins[EShLangTessControl].append(
 6694|    444|                "float gl_CullDistance[];"
 6695|    444|            );
 6696|    459|        if (version >= 430)
  ------------------
  |  Branch (6696:13): [True: 447, False: 12]
  ------------------
 6697|    447|            stageBuiltins[EShLangTessControl].append(
 6698|    447|                "int  gl_ViewportMask[];"             // GL_NV_viewport_array2
 6699|    447|            );
 6700|    459|        if (version >= 450)
  ------------------
  |  Branch (6700:13): [True: 444, False: 15]
  ------------------
 6701|    444|            stageBuiltins[EShLangTessControl].append(
 6702|    444|                "vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
 6703|    444|                "int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
 6704|    444|                "vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
 6705|    444|                "int  gl_ViewportMaskPerViewNV[];"    // GL_NVX_multiview_per_view_attributes
 6706|    444|                );
 6707|    459|        stageBuiltins[EShLangTessControl].append(
 6708|    459|            "} gl_out[];"
 6709|       |
 6710|    459|            "patch out float gl_TessLevelOuter[4];"
 6711|    459|            "patch out float gl_TessLevelInner[2];"
 6712|    459|            "\n");
 6713|       |
 6714|    459|        if (version >= 410)
  ------------------
  |  Branch (6714:13): [True: 449, False: 10]
  ------------------
 6715|    449|            stageBuiltins[EShLangTessControl].append(
 6716|    449|                "out int gl_ViewportIndex;"
 6717|    449|                "out int gl_Layer;"
 6718|    449|                "\n");
 6719|       |
 6720|    654|    } else {
 6721|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6722|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6723|       |
 6724|    654|        stageBuiltins[EShLangTessControl].append(
 6725|    654|            "in highp int gl_PatchVerticesIn;"
 6726|    654|            "in highp int gl_PrimitiveID;"
 6727|    654|            "in highp int gl_InvocationID;"
 6728|       |
 6729|    654|            "out gl_PerVertex {"
 6730|    654|                "highp vec4 gl_Position;"
 6731|    654|                "highp float gl_PointSize;"
 6732|    654|                );
 6733|    654|        stageBuiltins[EShLangTessControl].append(
 6734|    654|            "} gl_out[];"
 6735|       |
 6736|    654|            "patch out highp float gl_TessLevelOuter[4];"
 6737|    654|            "patch out highp float gl_TessLevelInner[2];"
 6738|    654|            "patch out highp vec4 gl_BoundingBoxOES[2];"
 6739|    654|            "patch out highp vec4 gl_BoundingBoxEXT[2];"
 6740|    654|            "\n");
 6741|    654|        if (profile == EEsProfile && version >= 320) {
  ------------------
  |  Branch (6741:13): [True: 654, False: 0]
  |  Branch (6741:38): [True: 3, False: 651]
  ------------------
 6742|      3|            stageBuiltins[EShLangTessControl].append(
 6743|      3|                "patch out highp vec4 gl_BoundingBox[2];"
 6744|      3|                "\n"
 6745|      3|            );
 6746|      3|        }
 6747|    654|    }
 6748|       |
 6749|  1.11k|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6749:10): [True: 459, False: 654]
  |  Branch (6749:35): [True: 459, False: 0]
  ------------------
 6750|    953|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6750:10): [True: 654, False: 0]
  |  Branch (6750:35): [True: 494, False: 160]
  ------------------
 6751|    953|        stageBuiltins[EShLangTessControl].append(
 6752|    953|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6753|    953|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6754|    953|            "\n");
 6755|    953|    }
 6756|       |
 6757|       |    //============================================================================
 6758|       |    //
 6759|       |    // Define the interface to the tessellation evaluation shader.
 6760|       |    //
 6761|       |    //============================================================================
 6762|       |
 6763|  1.11k|    if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (6763:9): [True: 459, False: 654]
  |  Branch (6763:34): [True: 459, False: 0]
  ------------------
 6764|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6765|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6766|       |
 6767|    459|        stageBuiltins[EShLangTessEvaluation].append(
 6768|    459|            "in int gl_PatchVerticesIn;"
 6769|    459|            "in int gl_PrimitiveID;"
 6770|    459|            "in vec3 gl_TessCoord;"
 6771|       |
 6772|    459|            "patch in float gl_TessLevelOuter[4];"
 6773|    459|            "patch in float gl_TessLevelInner[2];"
 6774|       |
 6775|    459|            "out gl_PerVertex {"
 6776|    459|                "vec4 gl_Position;"
 6777|    459|                "float gl_PointSize;"
 6778|    459|                "float gl_ClipDistance[];"
 6779|    459|            );
 6780|    459|        if (version >= 400 && profile == ECompatibilityProfile)
  ------------------
  |  Branch (6780:13): [True: 450, False: 9]
  |  Branch (6780:31): [True: 0, False: 450]
  ------------------
 6781|      0|            stageBuiltins[EShLangTessEvaluation].append(
 6782|      0|                "vec4 gl_ClipVertex;"
 6783|      0|                "vec4 gl_FrontColor;"
 6784|      0|                "vec4 gl_BackColor;"
 6785|      0|                "vec4 gl_FrontSecondaryColor;"
 6786|      0|                "vec4 gl_BackSecondaryColor;"
 6787|      0|                "vec4 gl_TexCoord[];"
 6788|      0|                "float gl_FogFragCoord;"
 6789|      0|                );
 6790|    459|        if (version >= 450)
  ------------------
  |  Branch (6790:13): [True: 444, False: 15]
  ------------------
 6791|    444|            stageBuiltins[EShLangTessEvaluation].append(
 6792|    444|                "float gl_CullDistance[];"
 6793|    444|                );
 6794|    459|        stageBuiltins[EShLangTessEvaluation].append(
 6795|    459|            "};"
 6796|    459|            "\n");
 6797|       |
 6798|    459|        if (version >= 410)
  ------------------
  |  Branch (6798:13): [True: 449, False: 10]
  ------------------
 6799|    449|            stageBuiltins[EShLangTessEvaluation].append(
 6800|    449|                "out int gl_ViewportIndex;"
 6801|    449|                "out int gl_Layer;"
 6802|    449|                "\n");
 6803|       |
 6804|    459|        if (version >= 430)
  ------------------
  |  Branch (6804:13): [True: 447, False: 12]
  ------------------
 6805|    447|            stageBuiltins[EShLangTessEvaluation].append(
 6806|    447|                "out int  gl_ViewportMask[];"             // GL_NV_viewport_array2
 6807|    447|            );
 6808|       |
 6809|    459|        if (version >= 450)
  ------------------
  |  Branch (6809:13): [True: 444, False: 15]
  ------------------
 6810|    444|            stageBuiltins[EShLangTessEvaluation].append(
 6811|    444|                "out vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
 6812|    444|                "out int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
 6813|    444|                "out vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
 6814|    444|                "out int  gl_ViewportMaskPerViewNV[];"    // GL_NVX_multiview_per_view_attributes
 6815|    444|                );
 6816|       |
 6817|    654|    } else if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (6817:16): [True: 654, False: 0]
  |  Branch (6817:41): [True: 494, False: 160]
  ------------------
 6818|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6819|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6820|       |
 6821|    494|        stageBuiltins[EShLangTessEvaluation].append(
 6822|    494|            "in highp int gl_PatchVerticesIn;"
 6823|    494|            "in highp int gl_PrimitiveID;"
 6824|    494|            "in highp vec3 gl_TessCoord;"
 6825|       |
 6826|    494|            "patch in highp float gl_TessLevelOuter[4];"
 6827|    494|            "patch in highp float gl_TessLevelInner[2];"
 6828|       |
 6829|    494|            "out gl_PerVertex {"
 6830|    494|                "highp vec4 gl_Position;"
 6831|    494|                "highp float gl_PointSize;"
 6832|    494|            );
 6833|    494|        stageBuiltins[EShLangTessEvaluation].append(
 6834|    494|            "};"
 6835|    494|            "\n");
 6836|    494|    }
 6837|       |
 6838|  1.11k|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6838:10): [True: 459, False: 654]
  |  Branch (6838:35): [True: 459, False: 0]
  ------------------
 6839|    953|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6839:10): [True: 654, False: 0]
  |  Branch (6839:35): [True: 494, False: 160]
  ------------------
 6840|    953|        stageBuiltins[EShLangTessEvaluation].append(
 6841|    953|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6842|    953|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6843|    953|            "\n");
 6844|    953|    }
 6845|       |
 6846|       |    //============================================================================
 6847|       |    //
 6848|       |    // Define the interface to the fragment shader.
 6849|       |    //
 6850|       |    //============================================================================
 6851|       |
 6852|  1.11k|    if (profile != EEsProfile) {
  ------------------
  |  Branch (6852:9): [True: 459, False: 654]
  ------------------
 6853|       |
 6854|    459|        stageBuiltins[EShLangFragment].append(
 6855|    459|            "vec4  gl_FragCoord;"   // needs qualifier fixed later
 6856|    459|            "bool  gl_FrontFacing;" // needs qualifier fixed later
 6857|    459|            "float gl_FragDepth;"   // needs qualifier fixed later
 6858|    459|            );
 6859|    459|        if (version >= 120)
  ------------------
  |  Branch (6859:13): [True: 459, False: 0]
  ------------------
 6860|    459|            stageBuiltins[EShLangFragment].append(
 6861|    459|                "vec2 gl_PointCoord;"  // needs qualifier fixed later
 6862|    459|                );
 6863|    459|        if (version >= 140)
  ------------------
  |  Branch (6863:13): [True: 459, False: 0]
  ------------------
 6864|    459|            stageBuiltins[EShLangFragment].append(
 6865|    459|                "out int gl_FragStencilRefARB;"
 6866|    459|                );
 6867|    459|        if (IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && version < 420))
  ------------------
  |  Branch (6867:13): [True: 0, False: 459]
  |  Branch (6867:61): [True: 459, Folded]
  |  Branch (6867:87): [True: 11, False: 448]
  ------------------
 6868|     11|            stageBuiltins[EShLangFragment].append(
 6869|     11|                "vec4 gl_FragColor;"   // needs qualifier fixed later
 6870|     11|                );
 6871|       |
 6872|    459|        if (version < 130) {
  ------------------
  |  Branch (6872:13): [True: 0, False: 459]
  ------------------
 6873|      0|            stageBuiltins[EShLangFragment].append(
 6874|      0|                "varying vec4  gl_Color;"
 6875|      0|                "varying vec4  gl_SecondaryColor;"
 6876|      0|                "varying vec4  gl_TexCoord[];"
 6877|      0|                "varying float gl_FogFragCoord;"
 6878|      0|                );
 6879|    459|        } else {
 6880|    459|            stageBuiltins[EShLangFragment].append(
 6881|    459|                "in float gl_ClipDistance[];"
 6882|    459|                );
 6883|       |
 6884|    459|            if (IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (6884:17): [True: 0, False: 459]
  ------------------
 6885|      0|                if (version < 150)
  ------------------
  |  Branch (6885:21): [True: 0, False: 0]
  ------------------
 6886|      0|                    stageBuiltins[EShLangFragment].append(
 6887|      0|                        "in float gl_FogFragCoord;"
 6888|      0|                        "in vec4  gl_TexCoord[];"
 6889|      0|                        "in vec4  gl_Color;"
 6890|      0|                        "in vec4  gl_SecondaryColor;"
 6891|      0|                        );
 6892|      0|                else
 6893|      0|                    stageBuiltins[EShLangFragment].append(
 6894|      0|                        "in gl_PerFragment {"
 6895|      0|                            "in float gl_FogFragCoord;"
 6896|      0|                            "in vec4  gl_TexCoord[];"
 6897|      0|                            "in vec4  gl_Color;"
 6898|      0|                            "in vec4  gl_SecondaryColor;"
 6899|      0|                        "};"
 6900|      0|                        );
 6901|      0|            }
 6902|    459|        }
 6903|       |
 6904|    459|        if (version >= 150)
  ------------------
  |  Branch (6904:13): [True: 459, False: 0]
  ------------------
 6905|    459|            stageBuiltins[EShLangFragment].append(
 6906|    459|                "flat in int gl_PrimitiveID;"
 6907|    459|                );
 6908|       |
 6909|    459|        if (version >= 130) { // ARB_sample_shading
  ------------------
  |  Branch (6909:13): [True: 459, False: 0]
  ------------------
 6910|    459|            stageBuiltins[EShLangFragment].append(
 6911|    459|                "flat in  int  gl_SampleID;"
 6912|    459|                "     in  vec2 gl_SamplePosition;"
 6913|    459|                "     out int  gl_SampleMask[];"
 6914|    459|                );
 6915|       |
 6916|    459|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (6916:17): [True: 55, False: 404]
  ------------------
 6917|     55|                stageBuiltins[EShLangFragment].append(
 6918|     55|                    "uniform int gl_NumSamples;"
 6919|     55|                );
 6920|     55|            }
 6921|    459|        }
 6922|       |
 6923|    459|        if (version >= 150)
  ------------------
  |  Branch (6923:13): [True: 459, False: 0]
  ------------------
 6924|    459|            stageBuiltins[EShLangFragment].append(
 6925|    459|                "flat in  int  gl_SampleMaskIn[];"
 6926|    459|            );
 6927|       |
 6928|    459|        if (version >= 430)
  ------------------
  |  Branch (6928:13): [True: 447, False: 12]
  ------------------
 6929|    447|            stageBuiltins[EShLangFragment].append(
 6930|    447|                "flat in int gl_Layer;"
 6931|    447|                "flat in int gl_ViewportIndex;"
 6932|    447|                );
 6933|       |
 6934|    459|        if (version >= 450)
  ------------------
  |  Branch (6934:13): [True: 444, False: 15]
  ------------------
 6935|    444|            stageBuiltins[EShLangFragment].append(
 6936|    444|                "in float gl_CullDistance[];"
 6937|    444|                "bool gl_HelperInvocation;"     // needs qualifier fixed later
 6938|    444|                );
 6939|       |
 6940|    459|        if (version >= 450)
  ------------------
  |  Branch (6940:13): [True: 444, False: 15]
  ------------------
 6941|    444|            stageBuiltins[EShLangFragment].append( // GL_EXT_fragment_invocation_density
 6942|    444|                "flat in ivec2 gl_FragSizeEXT;"
 6943|    444|                "flat in int   gl_FragInvocationCountEXT;"
 6944|    444|                );
 6945|       |
 6946|    459|        if (version >= 450)
  ------------------
  |  Branch (6946:13): [True: 444, False: 15]
  ------------------
 6947|    444|            stageBuiltins[EShLangFragment].append(
 6948|    444|                "in vec2 gl_BaryCoordNoPerspAMD;"
 6949|    444|                "in vec2 gl_BaryCoordNoPerspCentroidAMD;"
 6950|    444|                "in vec2 gl_BaryCoordNoPerspSampleAMD;"
 6951|    444|                "in vec2 gl_BaryCoordSmoothAMD;"
 6952|    444|                "in vec2 gl_BaryCoordSmoothCentroidAMD;"
 6953|    444|                "in vec2 gl_BaryCoordSmoothSampleAMD;"
 6954|    444|                "in vec3 gl_BaryCoordPullModelAMD;"
 6955|    444|                );
 6956|       |
 6957|    459|        if (version >= 430)
  ------------------
  |  Branch (6957:13): [True: 447, False: 12]
  ------------------
 6958|    447|            stageBuiltins[EShLangFragment].append(
 6959|    447|                "in bool gl_FragFullyCoveredNV;"
 6960|    447|                );
 6961|    459|        if (version >= 450)
  ------------------
  |  Branch (6961:13): [True: 444, False: 15]
  ------------------
 6962|    444|            stageBuiltins[EShLangFragment].append(
 6963|    444|                "flat in ivec2 gl_FragmentSizeNV;"          // GL_NV_shading_rate_image
 6964|    444|                "flat in int   gl_InvocationsPerPixelNV;"
 6965|    444|                "in vec3 gl_BaryCoordNV;"                   // GL_NV_fragment_shader_barycentric
 6966|    444|                "in vec3 gl_BaryCoordNoPerspNV;"
 6967|    444|                "in vec3 gl_BaryCoordEXT;"                  // GL_EXT_fragment_shader_barycentric
 6968|    444|                "in vec3 gl_BaryCoordNoPerspEXT;"
 6969|    444|                );
 6970|       |
 6971|    459|        if (version >= 450)
  ------------------
  |  Branch (6971:13): [True: 444, False: 15]
  ------------------
 6972|    444|            stageBuiltins[EShLangFragment].append(
 6973|    444|                "flat in int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
 6974|    444|            );
 6975|       |
 6976|    654|    } else {
 6977|       |        // ES profile
 6978|       |
 6979|    654|        if (version == 100) {
  ------------------
  |  Branch (6979:13): [True: 160, False: 494]
  ------------------
 6980|    160|            stageBuiltins[EShLangFragment].append(
 6981|    160|                "mediump vec4 gl_FragCoord;"    // needs qualifier fixed later
 6982|    160|                "        bool gl_FrontFacing;"  // needs qualifier fixed later
 6983|    160|                "mediump vec4 gl_FragColor;"    // needs qualifier fixed later
 6984|    160|                "mediump vec2 gl_PointCoord;"   // needs qualifier fixed later
 6985|    160|                );
 6986|    160|        }
 6987|    654|        if (version >= 300) {
  ------------------
  |  Branch (6987:13): [True: 494, False: 160]
  ------------------
 6988|    494|            stageBuiltins[EShLangFragment].append(
 6989|    494|                "highp   vec4  gl_FragCoord;"    // needs qualifier fixed later
 6990|    494|                "        bool  gl_FrontFacing;"  // needs qualifier fixed later
 6991|    494|                "mediump vec2  gl_PointCoord;"   // needs qualifier fixed later
 6992|    494|                "highp   float gl_FragDepth;"    // needs qualifier fixed later
 6993|    494|                );
 6994|    494|        }
 6995|    654|        if (version >= 310) {
  ------------------
  |  Branch (6995:13): [True: 494, False: 160]
  ------------------
 6996|    494|            stageBuiltins[EShLangFragment].append(
 6997|    494|                "bool gl_HelperInvocation;"          // needs qualifier fixed later
 6998|    494|                "flat in highp int gl_PrimitiveID;"  // needs qualifier fixed later
 6999|    494|                "flat in highp int gl_Layer;"        // needs qualifier fixed later
 7000|    494|                );
 7001|       |
 7002|    494|            stageBuiltins[EShLangFragment].append(  // GL_OES_sample_variables
 7003|    494|                "flat  in lowp     int gl_SampleID;"
 7004|    494|                "      in mediump vec2 gl_SamplePosition;"
 7005|    494|                "flat  in highp    int gl_SampleMaskIn[];"
 7006|    494|                "     out highp    int gl_SampleMask[];"
 7007|    494|                );
 7008|    494|            if (spvVersion.spv == 0)
  ------------------
  |  Branch (7008:17): [True: 0, False: 494]
  ------------------
 7009|      0|                stageBuiltins[EShLangFragment].append(  // GL_OES_sample_variables
 7010|      0|                    "uniform lowp int gl_NumSamples;"
 7011|      0|                    );
 7012|    494|        }
 7013|    654|        stageBuiltins[EShLangFragment].append(
 7014|    654|            "highp float gl_FragDepthEXT;"       // GL_EXT_frag_depth
 7015|    654|            );
 7016|       |
 7017|    654|        if (version >= 310)
  ------------------
  |  Branch (7017:13): [True: 494, False: 160]
  ------------------
 7018|    494|            stageBuiltins[EShLangFragment].append( // GL_EXT_fragment_invocation_density
 7019|    494|                "flat in ivec2 gl_FragSizeEXT;"
 7020|    494|                "flat in int   gl_FragInvocationCountEXT;"
 7021|    494|            );
 7022|    654|        if (version >= 320)
  ------------------
  |  Branch (7022:13): [True: 3, False: 651]
  ------------------
 7023|      3|            stageBuiltins[EShLangFragment].append( // GL_NV_shading_rate_image
 7024|      3|                "flat in ivec2 gl_FragmentSizeNV;"
 7025|      3|                "flat in int   gl_InvocationsPerPixelNV;"
 7026|      3|            );
 7027|    654|        if (version >= 320)
  ------------------
  |  Branch (7027:13): [True: 3, False: 651]
  ------------------
 7028|      3|            stageBuiltins[EShLangFragment].append(
 7029|      3|                "in vec3 gl_BaryCoordNV;"
 7030|      3|                "in vec3 gl_BaryCoordNoPerspNV;"
 7031|      3|                "in vec3 gl_BaryCoordEXT;"
 7032|      3|                "in vec3 gl_BaryCoordNoPerspEXT;"
 7033|      3|            );
 7034|    654|        if (version >= 310)
  ------------------
  |  Branch (7034:13): [True: 494, False: 160]
  ------------------
 7035|    494|            stageBuiltins[EShLangFragment].append(
 7036|    494|                "flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
 7037|    494|            );
 7038|    654|    }
 7039|       |
 7040|  1.11k|    stageBuiltins[EShLangFragment].append("\n");
 7041|       |
 7042|  1.11k|    if (version >= 130)
  ------------------
  |  Branch (7042:9): [True: 953, False: 160]
  ------------------
 7043|    953|        add2ndGenerationSamplingImaging(version, profile, spvVersion);
 7044|       |
 7045|  1.11k|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (7045:10): [True: 459, False: 654]
  |  Branch (7045:35): [True: 459, False: 0]
  ------------------
 7046|    953|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7046:10): [True: 654, False: 0]
  |  Branch (7046:35): [True: 494, False: 160]
  ------------------
 7047|    953|        stageBuiltins[EShLangFragment].append(
 7048|    953|            "flat in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 7049|    953|            "flat in highp int gl_ViewIndex;"       // GL_EXT_multiview
 7050|    953|            "\n");
 7051|    953|    }
 7052|       |
 7053|  1.11k|    if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (7053:9): [True: 953, False: 160]
  ------------------
 7054|    953|        stageBuiltins[EShLangFragment].append(
 7055|    953|            "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
 7056|    953|            "\n");
 7057|    953|    }
 7058|       |    
 7059|       |    // GL_QCOM_tile_shading
 7060|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (7060:10): [True: 654, False: 459]
  |  Branch (7060:35): [True: 494, False: 160]
  ------------------
 7061|    619|        (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (7061:10): [True: 459, False: 160]
  |  Branch (7061:35): [True: 1, False: 458]
  ------------------
 7062|    495|        stageBuiltins[EShLangFragment].append(
 7063|    495|            "flat in highp uvec2 gl_TileOffsetQCOM;"     // GL_QCOM_tile_shading
 7064|    495|            "flat in highp uvec3 gl_TileDimensionQCOM;"  // GL_QCOM_tile_shading
 7065|    495|            "flat in highp uvec2 gl_TileApronSizeQCOM;"  // GL_QCOM_tile_shading
 7066|    495|            "\n");
 7067|    495|    }
 7068|       |
 7069|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (7069:10): [True: 654, False: 459]
  |  Branch (7069:35): [True: 494, False: 160]
  ------------------
 7070|    953|        (profile != EEsProfile && version >= 130)) {
  ------------------
  |  Branch (7070:10): [True: 459, False: 160]
  |  Branch (7070:35): [True: 459, False: 0]
  ------------------
 7071|    953|        addGatherFunctionsQCOM();
 7072|    953|    }
 7073|       |
 7074|       |    // GL_ARB_shader_ballot
 7075|  1.11k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (7075:9): [True: 459, False: 654]
  |  Branch (7075:34): [True: 444, False: 15]
  ------------------
 7076|    444|        const char* ballotDecls =
 7077|    444|            "uniform uint gl_SubGroupSizeARB;"
 7078|    444|            "in uint     gl_SubGroupInvocationARB;"
 7079|    444|            "in uint64_t gl_SubGroupEqMaskARB;"
 7080|    444|            "in uint64_t gl_SubGroupGeMaskARB;"
 7081|    444|            "in uint64_t gl_SubGroupGtMaskARB;"
 7082|    444|            "in uint64_t gl_SubGroupLeMaskARB;"
 7083|    444|            "in uint64_t gl_SubGroupLtMaskARB;"
 7084|    444|            "\n";
 7085|    444|        const char* rtBallotDecls =
 7086|    444|            "uniform volatile uint gl_SubGroupSizeARB;"
 7087|    444|            "in volatile uint     gl_SubGroupInvocationARB;"
 7088|    444|            "in volatile uint64_t gl_SubGroupEqMaskARB;"
 7089|    444|            "in volatile uint64_t gl_SubGroupGeMaskARB;"
 7090|    444|            "in volatile uint64_t gl_SubGroupGtMaskARB;"
 7091|    444|            "in volatile uint64_t gl_SubGroupLeMaskARB;"
 7092|    444|            "in volatile uint64_t gl_SubGroupLtMaskARB;"
 7093|    444|            "\n";
 7094|    444|        const char* fragmentBallotDecls =
 7095|    444|            "uniform uint gl_SubGroupSizeARB;"
 7096|    444|            "flat in uint     gl_SubGroupInvocationARB;"
 7097|    444|            "flat in uint64_t gl_SubGroupEqMaskARB;"
 7098|    444|            "flat in uint64_t gl_SubGroupGeMaskARB;"
 7099|    444|            "flat in uint64_t gl_SubGroupGtMaskARB;"
 7100|    444|            "flat in uint64_t gl_SubGroupLeMaskARB;"
 7101|    444|            "flat in uint64_t gl_SubGroupLtMaskARB;"
 7102|    444|            "\n";
 7103|    444|        stageBuiltins[EShLangVertex]        .append(ballotDecls);
 7104|    444|        stageBuiltins[EShLangTessControl]   .append(ballotDecls);
 7105|    444|        stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
 7106|    444|        stageBuiltins[EShLangGeometry]      .append(ballotDecls);
 7107|    444|        stageBuiltins[EShLangCompute]       .append(ballotDecls);
 7108|    444|        stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
 7109|    444|        stageBuiltins[EShLangMesh]        .append(ballotDecls);
 7110|    444|        stageBuiltins[EShLangTask]        .append(ballotDecls);
 7111|    444|        stageBuiltins[EShLangRayGen]        .append(rtBallotDecls);
 7112|    444|        stageBuiltins[EShLangIntersect]     .append(rtBallotDecls);
 7113|       |        // No volatile qualifier on these builtins in any-hit
 7114|    444|        stageBuiltins[EShLangAnyHit]        .append(ballotDecls);
 7115|    444|        stageBuiltins[EShLangClosestHit]    .append(rtBallotDecls);
 7116|    444|        stageBuiltins[EShLangMiss]          .append(rtBallotDecls);
 7117|    444|        stageBuiltins[EShLangCallable]      .append(rtBallotDecls);
 7118|    444|    }
 7119|       |
 7120|       |    // GL_KHR_shader_subgroup
 7121|  1.11k|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (7121:10): [True: 654, False: 459]
  |  Branch (7121:35): [True: 494, False: 160]
  ------------------
 7122|    953|        (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (7122:10): [True: 459, False: 160]
  |  Branch (7122:35): [True: 459, False: 0]
  ------------------
 7123|    953|        const char* subgroupDecls =
 7124|    953|            "in mediump uint  gl_SubgroupSize;"
 7125|    953|            "in mediump uint  gl_SubgroupInvocationID;"
 7126|    953|            "in highp   uvec4 gl_SubgroupEqMask;"
 7127|    953|            "in highp   uvec4 gl_SubgroupGeMask;"
 7128|    953|            "in highp   uvec4 gl_SubgroupGtMask;"
 7129|    953|            "in highp   uvec4 gl_SubgroupLeMask;"
 7130|    953|            "in highp   uvec4 gl_SubgroupLtMask;"
 7131|       |            // GL_NV_shader_sm_builtins
 7132|    953|            "in highp   uint  gl_WarpsPerSMNV;"
 7133|    953|            "in highp   uint  gl_SMCountNV;"
 7134|    953|            "in highp   uint  gl_WarpIDNV;"
 7135|    953|            "in highp   uint  gl_SMIDNV;"
 7136|       |            // GL_ARM_shader_core_builtins
 7137|    953|            "in highp   uint  gl_CoreIDARM;"
 7138|    953|            "in highp   uint  gl_CoreCountARM;"
 7139|    953|            "in highp   uint  gl_CoreMaxIDARM;"
 7140|    953|            "in highp   uint  gl_WarpIDARM;"
 7141|    953|            "in highp   uint  gl_WarpMaxIDARM;"
 7142|    953|            "\n";
 7143|    953|        const char* fragmentSubgroupDecls =
 7144|    953|            "flat in mediump uint  gl_SubgroupSize;"
 7145|    953|            "flat in mediump uint  gl_SubgroupInvocationID;"
 7146|    953|            "flat in highp   uvec4 gl_SubgroupEqMask;"
 7147|    953|            "flat in highp   uvec4 gl_SubgroupGeMask;"
 7148|    953|            "flat in highp   uvec4 gl_SubgroupGtMask;"
 7149|    953|            "flat in highp   uvec4 gl_SubgroupLeMask;"
 7150|    953|            "flat in highp   uvec4 gl_SubgroupLtMask;"
 7151|       |            // GL_NV_shader_sm_builtins
 7152|    953|            "flat in highp   uint  gl_WarpsPerSMNV;"
 7153|    953|            "flat in highp   uint  gl_SMCountNV;"
 7154|    953|            "flat in highp   uint  gl_WarpIDNV;"
 7155|    953|            "flat in highp   uint  gl_SMIDNV;"
 7156|       |            // GL_ARM_shader_core_builtins
 7157|    953|            "flat in highp   uint  gl_CoreIDARM;"
 7158|    953|            "flat in highp   uint  gl_CoreCountARM;"
 7159|    953|            "flat in highp   uint  gl_CoreMaxIDARM;"
 7160|    953|            "flat in highp   uint  gl_WarpIDARM;"
 7161|    953|            "flat in highp   uint  gl_WarpMaxIDARM;"
 7162|    953|            "\n";
 7163|    953|        const char* computeSubgroupDecls =
 7164|    953|            "in highp   uint  gl_NumSubgroups;"
 7165|    953|            "in highp   uint  gl_SubgroupID;"
 7166|    953|            "\n";
 7167|       |        // These builtins are volatile for RT stages
 7168|    953|        const char* rtSubgroupDecls =
 7169|    953|            "in mediump volatile uint  gl_SubgroupSize;"
 7170|    953|            "in mediump volatile uint  gl_SubgroupInvocationID;"
 7171|    953|            "in highp   volatile uvec4 gl_SubgroupEqMask;"
 7172|    953|            "in highp   volatile uvec4 gl_SubgroupGeMask;"
 7173|    953|            "in highp   volatile uvec4 gl_SubgroupGtMask;"
 7174|    953|            "in highp   volatile uvec4 gl_SubgroupLeMask;"
 7175|    953|            "in highp   volatile uvec4 gl_SubgroupLtMask;"
 7176|       |            // GL_NV_shader_sm_builtins
 7177|    953|            "in highp    uint  gl_WarpsPerSMNV;"
 7178|    953|            "in highp    uint  gl_SMCountNV;"
 7179|    953|            "in highp volatile uint  gl_WarpIDNV;"
 7180|    953|            "in highp volatile uint  gl_SMIDNV;"
 7181|       |            // GL_ARM_shader_core_builtins
 7182|    953|            "in highp   uint  gl_CoreIDARM;"
 7183|    953|            "in highp   uint  gl_CoreCountARM;"
 7184|    953|            "in highp   uint  gl_CoreMaxIDARM;"
 7185|    953|            "in highp   uint  gl_WarpIDARM;"
 7186|    953|            "in highp   uint  gl_WarpMaxIDARM;"
 7187|    953|            "\n";
 7188|       |
 7189|    953|        stageBuiltins[EShLangVertex]        .append(subgroupDecls);
 7190|    953|        stageBuiltins[EShLangTessControl]   .append(subgroupDecls);
 7191|    953|        stageBuiltins[EShLangTessEvaluation].append(subgroupDecls);
 7192|    953|        stageBuiltins[EShLangGeometry]      .append(subgroupDecls);
 7193|    953|        stageBuiltins[EShLangCompute]       .append(subgroupDecls);
 7194|    953|        stageBuiltins[EShLangCompute]       .append(computeSubgroupDecls);
 7195|    953|        stageBuiltins[EShLangFragment]      .append(fragmentSubgroupDecls);
 7196|    953|        stageBuiltins[EShLangMesh]        .append(subgroupDecls);
 7197|    953|        stageBuiltins[EShLangMesh]        .append(computeSubgroupDecls);
 7198|    953|        stageBuiltins[EShLangTask]        .append(subgroupDecls);
 7199|    953|        stageBuiltins[EShLangTask]        .append(computeSubgroupDecls);
 7200|    953|        stageBuiltins[EShLangRayGen]        .append(rtSubgroupDecls);
 7201|    953|        stageBuiltins[EShLangIntersect]     .append(rtSubgroupDecls);
 7202|       |        // No volatile qualifier on these builtins in any-hit
 7203|    953|        stageBuiltins[EShLangAnyHit]        .append(subgroupDecls);
 7204|    953|        stageBuiltins[EShLangClosestHit]    .append(rtSubgroupDecls);
 7205|    953|        stageBuiltins[EShLangMiss]          .append(rtSubgroupDecls);
 7206|    953|        stageBuiltins[EShLangCallable]      .append(rtSubgroupDecls);
 7207|    953|    }
 7208|       |
 7209|       |    // GL_NV_ray_tracing/GL_EXT_ray_tracing
 7210|  1.11k|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (7210:9): [True: 459, False: 654]
  |  Branch (7210:34): [True: 1, False: 458]
  ------------------
 7211|       |
 7212|      1|        const char *constRayFlags =
 7213|      1|            "const uint gl_RayFlagsNoneNV = 0U;"
 7214|      1|            "const uint gl_RayFlagsNoneEXT = 0U;"
 7215|      1|            "const uint gl_RayFlagsOpaqueNV = 1U;"
 7216|      1|            "const uint gl_RayFlagsOpaqueEXT = 1U;"
 7217|      1|            "const uint gl_RayFlagsNoOpaqueNV = 2U;"
 7218|      1|            "const uint gl_RayFlagsNoOpaqueEXT = 2U;"
 7219|      1|            "const uint gl_RayFlagsTerminateOnFirstHitNV = 4U;"
 7220|      1|            "const uint gl_RayFlagsTerminateOnFirstHitEXT = 4U;"
 7221|      1|            "const uint gl_RayFlagsSkipClosestHitShaderNV = 8U;"
 7222|      1|            "const uint gl_RayFlagsSkipClosestHitShaderEXT = 8U;"
 7223|      1|            "const uint gl_RayFlagsCullBackFacingTrianglesNV = 16U;"
 7224|      1|            "const uint gl_RayFlagsCullBackFacingTrianglesEXT = 16U;"
 7225|      1|            "const uint gl_RayFlagsCullFrontFacingTrianglesNV = 32U;"
 7226|      1|            "const uint gl_RayFlagsCullFrontFacingTrianglesEXT = 32U;"
 7227|      1|            "const uint gl_RayFlagsCullOpaqueNV = 64U;"
 7228|      1|            "const uint gl_RayFlagsCullOpaqueEXT = 64U;"
 7229|      1|            "const uint gl_RayFlagsCullNoOpaqueNV = 128U;"
 7230|      1|            "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;"
 7231|      1|            "const uint gl_RayFlagsSkipTrianglesEXT = 256U;"
 7232|      1|            "const uint gl_RayFlagsSkipBuiltinPrimitivesNV = 256U;"
 7233|      1|            "const uint gl_RayFlagsSkipAABBEXT = 512U;"
 7234|      1|            "const uint gl_RayFlagsForceOpacityMicromap2StateEXT = 1024U;"
 7235|      1|            "const bool gl_EnableOpacityMicromapEXT = false;"
 7236|      1|            "const uint gl_HitKindFrontFacingTriangleEXT = 254U;"
 7237|      1|            "const uint gl_HitKindBackFacingTriangleEXT = 255U;"
 7238|      1|            "in    uint gl_HitKindFrontFacingMicroTriangleNV;"
 7239|      1|            "in    uint gl_HitKindBackFacingMicroTriangleNV;"
 7240|      1|            "const int  gl_ClusterIDNoneNV = -1;"
 7241|      1|            "\n";
 7242|       |
 7243|      1|        const char *constRayQueryIntersection =
 7244|      1|            "const uint gl_RayQueryCandidateIntersectionEXT = 0U;"
 7245|      1|            "const uint gl_RayQueryCommittedIntersectionEXT = 1U;"
 7246|      1|            "const uint gl_RayQueryCommittedIntersectionNoneEXT = 0U;"
 7247|      1|            "const uint gl_RayQueryCommittedIntersectionTriangleEXT = 1U;"
 7248|      1|            "const uint gl_RayQueryCommittedIntersectionGeneratedEXT = 2U;"
 7249|      1|            "const uint gl_RayQueryCandidateIntersectionTriangleEXT = 0U;"
 7250|      1|            "const uint gl_RayQueryCandidateIntersectionAABBEXT = 1U;"
 7251|      1|            "\n";
 7252|       |
 7253|      1|        const char *rayGenDecls =
 7254|      1|            "in    uvec3  gl_LaunchIDNV;"
 7255|      1|            "in    uvec3  gl_LaunchIDEXT;"
 7256|      1|            "in    uvec3  gl_LaunchSizeNV;"
 7257|      1|            "in    uvec3  gl_LaunchSizeEXT;"
 7258|      1|            "\n";
 7259|      1|        const char *intersectDecls =
 7260|      1|            "in    uvec3  gl_LaunchIDNV;"
 7261|      1|            "in    uvec3  gl_LaunchIDEXT;"
 7262|      1|            "in    uvec3  gl_LaunchSizeNV;"
 7263|      1|            "in    uvec3  gl_LaunchSizeEXT;"
 7264|      1|            "in     int   gl_PrimitiveID;"
 7265|      1|            "in     int   gl_InstanceID;"
 7266|      1|            "in     int   gl_InstanceCustomIndexNV;"
 7267|      1|            "in     int   gl_InstanceCustomIndexEXT;"
 7268|      1|            "in     int   gl_GeometryIndexEXT;"
 7269|      1|            "in    vec3   gl_WorldRayOriginNV;"
 7270|      1|            "in    vec3   gl_WorldRayOriginEXT;"
 7271|      1|            "in    vec3   gl_WorldRayDirectionNV;"
 7272|      1|            "in    vec3   gl_WorldRayDirectionEXT;"
 7273|      1|            "in    vec3   gl_ObjectRayOriginNV;"
 7274|      1|            "in    vec3   gl_ObjectRayOriginEXT;"
 7275|      1|            "in    vec3   gl_ObjectRayDirectionNV;"
 7276|      1|            "in    vec3   gl_ObjectRayDirectionEXT;"
 7277|      1|            "in    float  gl_RayTminNV;"
 7278|      1|            "in    float  gl_RayTminEXT;"
 7279|      1|            "in    float  gl_RayTmaxNV;"
 7280|      1|            "in volatile float gl_RayTmaxEXT;"
 7281|      1|            "in    mat4x3 gl_ObjectToWorldNV;"
 7282|      1|            "in    mat4x3 gl_ObjectToWorldEXT;"
 7283|      1|            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
 7284|      1|            "in    mat4x3 gl_WorldToObjectNV;"
 7285|      1|            "in    mat4x3 gl_WorldToObjectEXT;"
 7286|      1|            "in    mat3x4 gl_WorldToObject3x4EXT;"
 7287|      1|            "in    uint   gl_IncomingRayFlagsNV;"
 7288|      1|            "in    uint   gl_IncomingRayFlagsEXT;"
 7289|      1|            "in    float  gl_CurrentRayTimeNV;"
 7290|      1|            "in    uint   gl_CullMaskEXT;"
 7291|      1|            "\n";
 7292|      1|        const char *hitDecls =
 7293|      1|            "in    uvec3  gl_LaunchIDNV;"
 7294|      1|            "in    uvec3  gl_LaunchIDEXT;"
 7295|      1|            "in    uvec3  gl_LaunchSizeNV;"
 7296|      1|            "in    uvec3  gl_LaunchSizeEXT;"
 7297|      1|            "in     int   gl_PrimitiveID;"
 7298|      1|            "in     int   gl_InstanceID;"
 7299|      1|            "in     int   gl_InstanceCustomIndexNV;"
 7300|      1|            "in     int   gl_InstanceCustomIndexEXT;"
 7301|      1|            "in     int   gl_GeometryIndexEXT;"
 7302|      1|            "in    vec3   gl_WorldRayOriginNV;"
 7303|      1|            "in    vec3   gl_WorldRayOriginEXT;"
 7304|      1|            "in    vec3   gl_WorldRayDirectionNV;"
 7305|      1|            "in    vec3   gl_WorldRayDirectionEXT;"
 7306|      1|            "in    vec3   gl_ObjectRayOriginNV;"
 7307|      1|            "in    vec3   gl_ObjectRayOriginEXT;"
 7308|      1|            "in    vec3   gl_ObjectRayDirectionNV;"
 7309|      1|            "in    vec3   gl_ObjectRayDirectionEXT;"
 7310|      1|            "in    float  gl_RayTminNV;"
 7311|      1|            "in    float  gl_RayTminEXT;"
 7312|      1|            "in    float  gl_RayTmaxNV;"
 7313|      1|            "in    float  gl_RayTmaxEXT;"
 7314|      1|            "in    float  gl_HitTNV;"
 7315|      1|            "in    float  gl_HitTEXT;"
 7316|      1|            "in    uint   gl_HitKindNV;"
 7317|      1|            "in    uint   gl_HitKindEXT;"
 7318|      1|            "in    mat4x3 gl_ObjectToWorldNV;"
 7319|      1|            "in    mat4x3 gl_ObjectToWorldEXT;"
 7320|      1|            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
 7321|      1|            "in    mat4x3 gl_WorldToObjectNV;"
 7322|      1|            "in    mat4x3 gl_WorldToObjectEXT;"
 7323|      1|            "in    mat3x4 gl_WorldToObject3x4EXT;"
 7324|      1|            "in    uint   gl_IncomingRayFlagsNV;"
 7325|      1|            "in    uint   gl_IncomingRayFlagsEXT;"
 7326|      1|            "in    float  gl_CurrentRayTimeNV;"
 7327|      1|            "in    uint   gl_CullMaskEXT;"
 7328|      1|            "in    vec3   gl_HitTriangleVertexPositionsEXT[3];"
 7329|      1|            "in    vec3   gl_HitMicroTriangleVertexPositionsNV[3];"
 7330|      1|            "in    vec2   gl_HitMicroTriangleVertexBarycentricsNV[3];"
 7331|      1|            "in    int    gl_ClusterIDNV;"
 7332|      1|            "in    bool   gl_HitIsSphereNV;"
 7333|      1|            "in    bool   gl_HitIsLSSNV;"
 7334|      1|            "in    vec3   gl_HitSpherePositionNV;"
 7335|      1|            "in    float  gl_HitSphereRadiusNV;"
 7336|      1|            "in    vec3   gl_HitLSSPositionsNV[2];"
 7337|      1|            "in    float  gl_HitLSSRadiiNV[2];"
 7338|      1|            "\n";
 7339|       |
 7340|      1|        const char *missDecls =
 7341|      1|            "in    uvec3  gl_LaunchIDNV;"
 7342|      1|            "in    uvec3  gl_LaunchIDEXT;"
 7343|      1|            "in    uvec3  gl_LaunchSizeNV;"
 7344|      1|            "in    uvec3  gl_LaunchSizeEXT;"
 7345|      1|            "in    vec3   gl_WorldRayOriginNV;"
 7346|      1|            "in    vec3   gl_WorldRayOriginEXT;"
 7347|      1|            "in    vec3   gl_WorldRayDirectionNV;"
 7348|      1|            "in    vec3   gl_WorldRayDirectionEXT;"
 7349|      1|            "in    vec3   gl_ObjectRayOriginNV;"
 7350|      1|            "in    vec3   gl_ObjectRayDirectionNV;"
 7351|      1|            "in    float  gl_RayTminNV;"
 7352|      1|            "in    float  gl_RayTminEXT;"
 7353|      1|            "in    float  gl_RayTmaxNV;"
 7354|      1|            "in    float  gl_RayTmaxEXT;"
 7355|      1|            "in    uint   gl_IncomingRayFlagsNV;"
 7356|      1|            "in    uint   gl_IncomingRayFlagsEXT;"
 7357|      1|            "in    float  gl_CurrentRayTimeNV;"
 7358|      1|            "in    uint   gl_CullMaskEXT;"
 7359|      1|            "\n";
 7360|       |
 7361|      1|        const char *callableDecls =
 7362|      1|            "in    uvec3  gl_LaunchIDNV;"
 7363|      1|            "in    uvec3  gl_LaunchIDEXT;"
 7364|      1|            "in    uvec3  gl_LaunchSizeNV;"
 7365|      1|            "in    uvec3  gl_LaunchSizeEXT;"
 7366|      1|            "\n";
 7367|       |
 7368|       |
 7369|      1|        commonBuiltins.append(constRayQueryIntersection);
 7370|      1|        commonBuiltins.append(constRayFlags);
 7371|       |
 7372|      1|        stageBuiltins[EShLangRayGen].append(rayGenDecls);
 7373|      1|        stageBuiltins[EShLangIntersect].append(intersectDecls);
 7374|      1|        stageBuiltins[EShLangAnyHit].append(hitDecls);
 7375|      1|        stageBuiltins[EShLangClosestHit].append(hitDecls);
 7376|      1|        stageBuiltins[EShLangMiss].append(missDecls);
 7377|      1|        stageBuiltins[EShLangCallable].append(callableDecls);
 7378|       |
 7379|      1|    }
 7380|       |
 7381|  1.11k|    if ((profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (7381:10): [True: 459, False: 654]
  |  Branch (7381:35): [True: 459, False: 0]
  ------------------
 7382|    459|        const char *deviceIndex =
 7383|    459|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 7384|    459|            "\n";
 7385|       |
 7386|    459|        stageBuiltins[EShLangRayGen].append(deviceIndex);
 7387|    459|        stageBuiltins[EShLangIntersect].append(deviceIndex);
 7388|    459|        stageBuiltins[EShLangAnyHit].append(deviceIndex);
 7389|    459|        stageBuiltins[EShLangClosestHit].append(deviceIndex);
 7390|    459|        stageBuiltins[EShLangMiss].append(deviceIndex);
 7391|    459|    }
 7392|       |
 7393|  1.11k|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (7393:10): [True: 459, False: 654]
  |  Branch (7393:35): [True: 448, False: 11]
  ------------------
 7394|    942|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7394:10): [True: 654, False: 11]
  |  Branch (7394:35): [True: 494, False: 160]
  ------------------
 7395|    942|        commonBuiltins.append("const int gl_ScopeDevice      = 1;\n");
 7396|    942|        commonBuiltins.append("const int gl_ScopeWorkgroup   = 2;\n");
 7397|    942|        commonBuiltins.append("const int gl_ScopeSubgroup    = 3;\n");
 7398|    942|        commonBuiltins.append("const int gl_ScopeInvocation  = 4;\n");
 7399|    942|        commonBuiltins.append("const int gl_ScopeQueueFamily = 5;\n");
 7400|    942|        commonBuiltins.append("const int gl_ScopeShaderCallEXT = 6;\n");
 7401|       |
 7402|    942|        commonBuiltins.append("const int gl_SemanticsRelaxed         = 0x0;\n");
 7403|    942|        commonBuiltins.append("const int gl_SemanticsAcquire         = 0x2;\n");
 7404|    942|        commonBuiltins.append("const int gl_SemanticsRelease         = 0x4;\n");
 7405|    942|        commonBuiltins.append("const int gl_SemanticsAcquireRelease  = 0x8;\n");
 7406|    942|        commonBuiltins.append("const int gl_SemanticsMakeAvailable   = 0x2000;\n");
 7407|    942|        commonBuiltins.append("const int gl_SemanticsMakeVisible     = 0x4000;\n");
 7408|    942|        commonBuiltins.append("const int gl_SemanticsVolatile        = 0x8000;\n");
 7409|       |
 7410|    942|        commonBuiltins.append("const int gl_StorageSemanticsNone     = 0x0;\n");
 7411|    942|        commonBuiltins.append("const int gl_StorageSemanticsBuffer   = 0x40;\n");
 7412|    942|        commonBuiltins.append("const int gl_StorageSemanticsShared   = 0x100;\n");
 7413|    942|        commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\n");
 7414|    942|        commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
 7415|    942|    }
 7416|       |
 7417|       |    // Adding these to common built-ins triggers an assert due to a memory corruption in related code when testing
 7418|       |    // So instead add to each stage individually, avoiding the GLSLang bug
 7419|  1.11k|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7419:10): [True: 459, False: 654]
  |  Branch (7419:35): [True: 444, False: 15]
  |  Branch (7419:55): [True: 654, False: 15]
  |  Branch (7419:80): [True: 494, False: 160]
  ------------------
 7420|  14.0k|        for (int stage=EShLangVertex; stage<EShLangCount; stage++)
  ------------------
  |  Branch (7420:39): [True: 13.1k, False: 938]
  ------------------
 7421|  13.1k|        {
 7422|  13.1k|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag2VerticalPixelsEXT       = 1;\n");
 7423|  13.1k|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4VerticalPixelsEXT       = 2;\n");
 7424|  13.1k|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag2HorizontalPixelsEXT     = 4;\n");
 7425|  13.1k|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4HorizontalPixelsEXT     = 8;\n");
 7426|  13.1k|        }
 7427|    938|    }
 7428|       |    
 7429|       |    // GL_EXT_shader_image_int64
 7430|  1.11k|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (7430:10): [True: 459, False: 654]
  |  Branch (7430:35): [True: 448, False: 11]
  ------------------
 7431|    942|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7431:10): [True: 654, False: 11]
  |  Branch (7431:35): [True: 494, False: 160]
  ------------------
 7432|       |            
 7433|    942|        const TBasicType bTypes[] = { EbtInt64, EbtUint64 };
 7434|  2.82k|        for (int ms = 0; ms <= 1; ++ms) { // loop over "bool" multisample or not
  ------------------
  |  Branch (7434:26): [True: 1.88k, False: 942]
  ------------------
 7435|  5.65k|            for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
  ------------------
  |  Branch (7435:35): [True: 3.76k, False: 1.88k]
  ------------------
 7436|  26.3k|                for (int dim = Esd1D; dim < EsdSubpass; ++dim) { // 1D, ..., buffer
  ------------------
  |  Branch (7436:39): [True: 22.6k, False: 3.76k]
  ------------------
 7437|  22.6k|                    if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
  ------------------
  |  Branch (7437:26): [True: 3.76k, False: 18.8k]
  |  Branch (7437:42): [True: 3.76k, False: 15.0k]
  |  Branch (7437:61): [True: 3.95k, False: 3.58k]
  ------------------
 7438|  3.95k|                        continue;
 7439|       |                    
 7440|  18.6k|                    if ((dim == Esd3D || dim == EsdRect || dim == EsdBuffer) && arrayed)
  ------------------
  |  Branch (7440:26): [True: 3.76k, False: 14.8k]
  |  Branch (7440:42): [True: 1.79k, False: 13.0k]
  |  Branch (7440:60): [True: 3.76k, False: 9.32k]
  |  Branch (7440:81): [True: 4.66k, False: 4.66k]
  ------------------
 7441|  4.66k|                        continue;
 7442|       |                    
 7443|  13.9k|                    if (dim != Esd2D && ms)
  ------------------
  |  Branch (7443:25): [True: 10.2k, False: 3.76k]
  |  Branch (7443:41): [True: 5.11k, False: 5.11k]
  ------------------
 7444|  5.11k|                        continue;
 7445|       |                    
 7446|       |                    // Loop over the bTypes
 7447|  26.6k|                    for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
  ------------------
  |  Branch (7447:44): [True: 17.7k, False: 8.88k]
  ------------------
 7448|       |                        //
 7449|       |                        // Now, make all the function prototypes for the type we just built...
 7450|       |                        //
 7451|  17.7k|                        TSampler sampler;
 7452|       |                    
 7453|  17.7k|                        sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
  ------------------
  |  Branch (7453:75): [True: 6.54k, False: 11.2k]
  ------------------
 7454|  17.7k|                                                                          false,
 7455|  17.7k|                                                                          ms      ? true : false);
  ------------------
  |  Branch (7455:75): [True: 3.76k, False: 13.9k]
  ------------------
 7456|       |
 7457|  17.7k|                        TString typeName = TString{sampler.getString()};
 7458|       |
 7459|  17.7k|                        addQueryFunctions(sampler, typeName, version, profile);
 7460|  17.7k|                        addImageFunctions(sampler, typeName, version, profile);
 7461|  17.7k|                    }
 7462|  8.88k|                }
 7463|  3.76k|            }
 7464|  1.88k|        }
 7465|    942|    }
 7466|       |
 7467|       |    // printf("%s\n", commonBuiltins.c_str());
 7468|       |    // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
 7469|  1.11k|}
_ZN7glslang9TBuiltIns31add2ndGenerationSamplingImagingEi8EProfileRKNS_10SpvVersionE:
 7476|    953|{
 7477|       |    //
 7478|       |    // In this function proper, enumerate the types, then calls the next set of functions
 7479|       |    // to enumerate all the uses for that type.
 7480|       |    //
 7481|       |
 7482|       |    // enumerate all the types
 7483|    953|    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint,
 7484|    953|         EbtFloat16
 7485|    953|    };
 7486|    953|    bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
  ------------------
  |  Branch (7486:24): [True: 494, False: 459]
  |  Branch (7486:49): [True: 0, False: 494]
  |  Branch (7486:68): [True: 459, False: 494]
  |  Branch (7486:93): [True: 0, False: 459]
  ------------------
 7487|    953|    bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
  ------------------
  |  Branch (7487:29): [True: 494, False: 459]
  |  Branch (7487:54): [True: 0, False: 494]
  |  Branch (7487:73): [True: 459, False: 494]
  |  Branch (7487:98): [True: 0, False: 459]
  ------------------
 7488|  2.85k|    for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
  ------------------
  |  Branch (7488:25): [True: 1.90k, False: 953]
  ------------------
 7489|  1.90k|    {
 7490|  5.71k|        for (int shadow = 0; shadow <= 1; ++shadow) { // loop over "bool" shadow or not
  ------------------
  |  Branch (7490:30): [True: 3.81k, False: 1.90k]
  ------------------
 7491|  11.4k|            for (int ms = 0; ms <= 1; ++ms) // loop over "bool" multisample or not
  ------------------
  |  Branch (7491:30): [True: 7.62k, False: 3.81k]
  ------------------
 7492|  7.62k|            {
 7493|  7.62k|                if ((ms || image) && shadow)
  ------------------
  |  Branch (7493:22): [True: 3.81k, False: 3.81k]
  |  Branch (7493:28): [True: 1.90k, False: 1.90k]
  |  Branch (7493:38): [True: 2.85k, False: 2.85k]
  ------------------
 7494|  2.85k|                    continue;
 7495|  4.76k|                if (ms && profile != EEsProfile && version < 140)
  ------------------
  |  Branch (7495:21): [True: 1.90k, False: 2.85k]
  |  Branch (7495:27): [True: 918, False: 988]
  |  Branch (7495:52): [True: 0, False: 918]
  ------------------
 7496|      0|                    continue;
 7497|  4.76k|                if (ms && image && profile == EEsProfile)
  ------------------
  |  Branch (7497:21): [True: 1.90k, False: 2.85k]
  |  Branch (7497:27): [True: 953, False: 953]
  |  Branch (7497:36): [True: 494, False: 459]
  ------------------
 7498|    494|                    continue;
 7499|  4.27k|                if (ms && profile == EEsProfile && version < 310)
  ------------------
  |  Branch (7499:21): [True: 1.41k, False: 2.85k]
  |  Branch (7499:27): [True: 494, False: 918]
  |  Branch (7499:52): [True: 0, False: 494]
  ------------------
 7500|      0|                    continue;
 7501|       |
 7502|  12.8k|                for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
  ------------------
  |  Branch (7502:39): [True: 8.54k, False: 4.27k]
  ------------------
 7503|  76.8k|                    for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
  ------------------
  |  Branch (7503:43): [True: 68.3k, False: 8.54k]
  ------------------
 7504|  68.3k|                        if (dim == EsdAttachmentEXT)
  ------------------
  |  Branch (7504:29): [True: 8.54k, False: 59.7k]
  ------------------
 7505|  8.54k|                            continue;
 7506|  59.7k|                        if (dim == EsdSubpass && spvVersion.vulkan == 0)
  ------------------
  |  Branch (7506:29): [True: 8.54k, False: 51.2k]
  |  Branch (7506:50): [True: 8.01k, False: 530]
  ------------------
 7507|  8.01k|                            continue;
 7508|  51.7k|                        if (dim == EsdSubpass && (image || shadow || arrayed))
  ------------------
  |  Branch (7508:29): [True: 530, False: 51.2k]
  |  Branch (7508:51): [True: 212, False: 318]
  |  Branch (7508:60): [True: 106, False: 212]
  |  Branch (7508:70): [True: 106, False: 106]
  ------------------
 7509|    424|                            continue;
 7510|  51.3k|                        if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
  ------------------
  |  Branch (7510:30): [True: 8.54k, False: 42.8k]
  |  Branch (7510:46): [True: 8.54k, False: 34.2k]
  |  Branch (7510:65): [True: 7.90k, False: 9.18k]
  ------------------
 7511|  7.90k|                            continue;
 7512|  43.4k|                        if (dim == EsdSubpass && spvVersion.vulkan == 0)
  ------------------
  |  Branch (7512:29): [True: 106, False: 43.3k]
  |  Branch (7512:50): [True: 0, False: 106]
  ------------------
 7513|      0|                            continue;
 7514|  43.4k|                        if (dim == EsdSubpass && (image || shadow || arrayed))
  ------------------
  |  Branch (7514:29): [True: 106, False: 43.3k]
  |  Branch (7514:51): [True: 0, False: 106]
  |  Branch (7514:60): [True: 0, False: 106]
  |  Branch (7514:70): [True: 0, False: 106]
  ------------------
 7515|      0|                            continue;
 7516|  43.4k|                        if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
  ------------------
  |  Branch (7516:30): [True: 4.59k, False: 38.8k]
  |  Branch (7516:46): [True: 4.59k, False: 34.2k]
  |  Branch (7516:65): [True: 0, False: 9.18k]
  ------------------
 7517|      0|                            continue;
 7518|  43.4k|                        if (dim != Esd2D && dim != EsdSubpass && ms)
  ------------------
  |  Branch (7518:29): [True: 34.9k, False: 8.54k]
  |  Branch (7518:45): [True: 34.8k, False: 106]
  |  Branch (7518:66): [True: 12.1k, False: 22.6k]
  ------------------
 7519|  12.1k|                            continue;
 7520|  31.3k|                        if (dim == EsdBuffer && skipBuffer)
  ------------------
  |  Branch (7520:29): [True: 5.71k, False: 25.5k]
  |  Branch (7520:49): [True: 0, False: 5.71k]
  ------------------
 7521|      0|                            continue;
 7522|  31.3k|                        if (dim == EsdBuffer && (shadow || arrayed || ms))
  ------------------
  |  Branch (7522:29): [True: 5.71k, False: 25.5k]
  |  Branch (7522:50): [True: 1.90k, False: 3.81k]
  |  Branch (7522:60): [True: 1.90k, False: 1.90k]
  |  Branch (7522:71): [True: 0, False: 1.90k]
  ------------------
 7523|  3.81k|                            continue;
 7524|  27.4k|                        if (ms && arrayed && profile == EEsProfile && version < 310)
  ------------------
  |  Branch (7524:29): [True: 2.87k, False: 24.6k]
  |  Branch (7524:35): [True: 1.41k, False: 1.46k]
  |  Branch (7524:46): [True: 494, False: 918]
  |  Branch (7524:71): [True: 0, False: 494]
  ------------------
 7525|      0|                            continue;
 7526|  27.4k|                        if (dim == Esd3D && shadow)
  ------------------
  |  Branch (7526:29): [True: 5.71k, False: 21.7k]
  |  Branch (7526:45): [True: 1.90k, False: 3.81k]
  ------------------
 7527|  1.90k|                            continue;
 7528|  25.5k|                        if (dim == EsdCube && arrayed && skipCubeArrayed)
  ------------------
  |  Branch (7528:29): [True: 5.71k, False: 19.8k]
  |  Branch (7528:47): [True: 2.85k, False: 2.85k]
  |  Branch (7528:58): [True: 0, False: 2.85k]
  ------------------
 7529|      0|                            continue;
 7530|  25.5k|                        if ((dim == Esd3D || dim == EsdRect) && arrayed)
  ------------------
  |  Branch (7530:30): [True: 3.81k, False: 21.7k]
  |  Branch (7530:46): [True: 2.75k, False: 19.0k]
  |  Branch (7530:65): [True: 3.28k, False: 3.28k]
  ------------------
 7531|  3.28k|                            continue;
 7532|       |
 7533|       |                        // Loop over the bTypes
 7534|   111k|                        for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
  ------------------
  |  Branch (7534:48): [True: 89.2k, False: 22.3k]
  ------------------
 7535|  89.2k|                            if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (7535:33): [True: 22.3k, False: 66.9k]
  |  Branch (7535:65): [True: 8.89k, False: 13.4k]
  |  Branch (7535:90): [True: 435, False: 12.9k]
  ------------------
 7536|  9.32k|                                continue;
 7537|  79.9k|                            if (dim == EsdRect && version < 140 && bType > 0)
  ------------------
  |  Branch (7537:33): [True: 5.46k, False: 74.4k]
  |  Branch (7537:51): [True: 0, False: 5.46k]
  |  Branch (7537:68): [True: 0, False: 0]
  ------------------
 7538|      0|                                continue;
 7539|  79.9k|                            if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint))
  ------------------
  |  Branch (7539:33): [True: 18.6k, False: 61.2k]
  |  Branch (7539:44): [True: 5.18k, False: 13.4k]
  |  Branch (7539:71): [True: 5.18k, False: 8.29k]
  ------------------
 7540|  10.3k|                                continue;
 7541|       |                            //
 7542|       |                            // Now, make all the function prototypes for the type we just built...
 7543|       |                            //
 7544|  69.5k|                            TSampler sampler;
 7545|  69.5k|                            if (dim == EsdSubpass) {
  ------------------
  |  Branch (7545:33): [True: 424, False: 69.1k]
  ------------------
 7546|    424|                                sampler.setSubpass(bTypes[bType], ms ? true : false);
  ------------------
  |  Branch (7546:67): [True: 212, False: 212]
  ------------------
 7547|  69.1k|                            } else if (dim == EsdAttachmentEXT) {
  ------------------
  |  Branch (7547:40): [True: 0, False: 69.1k]
  ------------------
 7548|      0|                                sampler.setAttachmentEXT(bTypes[bType]);
 7549|      0|                            } else
 7550|  69.1k|                            if (image) {
  ------------------
  |  Branch (7550:33): [True: 28.9k, False: 40.1k]
  ------------------
 7551|  28.9k|                                sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
  ------------------
  |  Branch (7551:83): [True: 10.2k, False: 18.6k]
  ------------------
 7552|  28.9k|                                                                                  shadow  ? true : false,
  ------------------
  |  Branch (7552:83): [True: 0, False: 28.9k]
  ------------------
 7553|  28.9k|                                                                                  ms      ? true : false);
  ------------------
  |  Branch (7553:83): [True: 3.64k, False: 25.2k]
  ------------------
 7554|  40.1k|                            } else {
 7555|  40.1k|                                sampler.set(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
  ------------------
  |  Branch (7555:78): [True: 15.4k, False: 24.7k]
  ------------------
 7556|  40.1k|                                                                             shadow  ? true : false,
  ------------------
  |  Branch (7556:78): [True: 8.29k, False: 31.8k]
  ------------------
 7557|  40.1k|                                                                             ms      ? true : false);
  ------------------
  |  Branch (7557:78): [True: 6.60k, False: 33.5k]
  ------------------
 7558|  40.1k|                            }
 7559|       |
 7560|  69.5k|                            TString typeName = TString{sampler.getString()};
 7561|       |
 7562|  69.5k|                            if (dim == EsdSubpass) {
  ------------------
  |  Branch (7562:33): [True: 424, False: 69.1k]
  ------------------
 7563|    424|                                addSubpassSampling(sampler, typeName, version, profile);
 7564|    424|                                continue;
 7565|    424|                            }
 7566|       |
 7567|  69.1k|                            addQueryFunctions(sampler, typeName, version, profile);
 7568|       |
 7569|  69.1k|                            if (image)
  ------------------
  |  Branch (7569:33): [True: 28.9k, False: 40.1k]
  ------------------
 7570|  28.9k|                                addImageFunctions(sampler, typeName, version, profile);
 7571|  40.1k|                            else {
 7572|  40.1k|                                addSamplingFunctions(sampler, typeName, version, profile);
 7573|  40.1k|                                addGatherFunctions(sampler, typeName, version, profile);
 7574|  40.1k|                                if (spvVersion.vulkan > 0 && sampler.isCombined() && !sampler.shadow) {
  ------------------
  |  Branch (7574:37): [True: 3.07k, False: 37.1k]
  |  Branch (7574:62): [True: 3.07k, False: 0]
  |  Branch (7574:86): [True: 2.33k, False: 742]
  ------------------
 7575|       |                                    // Base Vulkan allows texelFetch() for
 7576|       |                                    // textureBuffer (i.e. without sampler).
 7577|       |                                    //
 7578|       |                                    // GL_EXT_samplerless_texture_functions
 7579|       |                                    // allows texelFetch() and query functions
 7580|       |                                    // (other than textureQueryLod()) for all
 7581|       |                                    // texture types.
 7582|  2.33k|                                    sampler.setTexture(sampler.type, sampler.dim, sampler.arrayed, sampler.shadow,
 7583|  2.33k|                                                       sampler.ms);
 7584|  2.33k|                                    TString textureTypeName = TString{sampler.getString()};
 7585|  2.33k|                                    addSamplingFunctions(sampler, textureTypeName, version, profile);
 7586|  2.33k|                                    addQueryFunctions(sampler, textureTypeName, version, profile);
 7587|  2.33k|                                }
 7588|  40.1k|                            }
 7589|  69.1k|                        }
 7590|  22.3k|                    }
 7591|  8.54k|                }
 7592|  4.27k|            }
 7593|  3.81k|        }
 7594|  1.90k|    }
 7595|       |
 7596|       |    //
 7597|       |    // sparseTexelsResidentARB()
 7598|       |    //
 7599|    953|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (7599:9): [True: 459, False: 494]
  |  Branch (7599:34): [True: 444, False: 15]
  ------------------
 7600|    444|        commonBuiltins.append("bool sparseTexelsResidentARB(int code);\n");
 7601|    444|    }
 7602|    953|}
_ZN7glslang9TBuiltIns17addQueryFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7611|  89.1k|{
 7612|       |    //
 7613|       |    // textureSize() and imageSize()
 7614|       |    //
 7615|       |
 7616|  89.1k|    int sizeDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0);
  ------------------
  |  Branch (7616:43): [True: 33.0k, False: 56.1k]
  |  Branch (7616:71): [True: 20.1k, False: 69.0k]
  ------------------
 7617|       |
 7618|  89.1k|    if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 420)))
  ------------------
  |  Branch (7618:9): [True: 46.6k, False: 42.5k]
  |  Branch (7618:32): [True: 16.7k, False: 29.8k]
  |  Branch (7618:57): [True: 0, False: 16.7k]
  |  Branch (7618:76): [True: 29.8k, False: 16.7k]
  |  Branch (7618:101): [True: 363, False: 29.5k]
  ------------------
 7619|    363|        return;
 7620|       |
 7621|  88.8k|    if (profile == EEsProfile)
  ------------------
  |  Branch (7621:9): [True: 30.6k, False: 58.2k]
  ------------------
 7622|  30.6k|        commonBuiltins.append("highp ");
 7623|  88.8k|    if (sizeDims == 1)
  ------------------
  |  Branch (7623:9): [True: 14.2k, False: 74.5k]
  ------------------
 7624|  14.2k|        commonBuiltins.append("int");
 7625|  74.5k|    else {
 7626|  74.5k|        commonBuiltins.append("ivec");
 7627|  74.5k|        commonBuiltins.append(postfixes[sizeDims]);
 7628|  74.5k|    }
 7629|  88.8k|    if (sampler.isImage())
  ------------------
  |  Branch (7629:9): [True: 46.3k, False: 42.5k]
  ------------------
 7630|  46.3k|        commonBuiltins.append(" imageSize(readonly writeonly volatile coherent nontemporal ");
 7631|  42.5k|    else
 7632|  42.5k|        commonBuiltins.append(" textureSize(");
 7633|  88.8k|    commonBuiltins.append(typeName);
 7634|  88.8k|    if (! sampler.isImage() && ! sampler.isRect() && ! sampler.isBuffer() && ! sampler.isMultiSample())
  ------------------
  |  Branch (7634:9): [True: 42.5k, False: 46.3k]
  |  Branch (7634:32): [True: 39.5k, False: 2.93k]
  |  Branch (7634:54): [True: 36.0k, False: 3.51k]
  |  Branch (7634:78): [True: 29.0k, False: 7.03k]
  ------------------
 7635|  29.0k|        commonBuiltins.append(",int);\n");
 7636|  59.8k|    else
 7637|  59.8k|        commonBuiltins.append(");\n");
 7638|       |
 7639|       |    //
 7640|       |    // textureSamples() and imageSamples()
 7641|       |    //
 7642|       |
 7643|       |    // GL_ARB_shader_texture_image_samples
 7644|       |    // TODO: spec issue? there are no memory qualifiers; how to query a writeonly/readonly image, etc?
 7645|  88.8k|    if (profile != EEsProfile && version >= 430 && sampler.isMultiSample()) {
  ------------------
  |  Branch (7645:9): [True: 58.2k, False: 30.6k]
  |  Branch (7645:34): [True: 57.6k, False: 535]
  |  Branch (7645:52): [True: 9.35k, False: 48.3k]
  ------------------
 7646|  9.35k|        commonBuiltins.append("int ");
 7647|  9.35k|        if (sampler.isImage())
  ------------------
  |  Branch (7647:13): [True: 5.35k, False: 3.99k]
  ------------------
 7648|  5.35k|            commonBuiltins.append("imageSamples(readonly writeonly volatile coherent nontemporal ");
 7649|  3.99k|        else
 7650|  3.99k|            commonBuiltins.append("textureSamples(");
 7651|  9.35k|        commonBuiltins.append(typeName);
 7652|  9.35k|        commonBuiltins.append(");\n");
 7653|  9.35k|    }
 7654|       |
 7655|       |    //
 7656|       |    // textureQueryLod()
 7657|       |    // Also enabled with extension GL_ARB_texture_query_lod
 7658|       |    // Extension GL_ARB_texture_query_lod says that textureQueryLOD() also exist at extension.
 7659|       |
 7660|  88.8k|    if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect &&
  ------------------
  |  Branch (7660:9): [True: 58.2k, False: 30.6k]
  |  Branch (7660:34): [True: 58.2k, False: 0]
  |  Branch (7660:52): [True: 26.3k, False: 31.8k]
  |  Branch (7660:76): [True: 23.6k, False: 2.72k]
  ------------------
 7661|  23.6k|        ! sampler.isMultiSample() && ! sampler.isBuffer()) {
  ------------------
  |  Branch (7661:9): [True: 19.9k, False: 3.64k]
  |  Branch (7661:38): [True: 18.1k, False: 1.82k]
  ------------------
 7662|       |
 7663|  18.1k|        const TString funcName[2] = {"vec2 textureQueryLod(", "vec2 textureQueryLOD("};
 7664|       |
 7665|  54.4k|        for (int i = 0; i < 2; ++i){
  ------------------
  |  Branch (7665:25): [True: 36.3k, False: 18.1k]
  ------------------
 7666|   108k|            for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
  ------------------
  |  Branch (7666:38): [True: 72.6k, False: 36.3k]
  ------------------
 7667|  72.6k|                if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (7667:21): [True: 36.3k, False: 36.3k]
  |  Branch (7667:35): [True: 24.7k, False: 11.5k]
  ------------------
 7668|  24.7k|                    continue;
 7669|  47.8k|                stageBuiltins[EShLangFragment].append(funcName[i]);
 7670|  47.8k|                stageBuiltins[EShLangFragment].append(typeName);
 7671|  47.8k|                if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7671:21): [True: 14.4k, False: 33.4k]
  ------------------
 7672|  14.4k|                    if (f16TexAddr)
  ------------------
  |  Branch (7672:25): [True: 3.55k, False: 10.8k]
  ------------------
 7673|  3.55k|                        stageBuiltins[EShLangFragment].append(", float16_t");
 7674|  10.8k|                    else
 7675|  10.8k|                        stageBuiltins[EShLangFragment].append(", float");
 7676|  33.4k|                else {
 7677|  33.4k|                    if (f16TexAddr)
  ------------------
  |  Branch (7677:25): [True: 7.99k, False: 25.4k]
  ------------------
 7678|  7.99k|                        stageBuiltins[EShLangFragment].append(", f16vec");
 7679|  25.4k|                    else
 7680|  25.4k|                        stageBuiltins[EShLangFragment].append(", vec");
 7681|  33.4k|                    stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
 7682|  33.4k|                }
 7683|  47.8k|                stageBuiltins[EShLangFragment].append(");\n");
 7684|  47.8k|            }
 7685|       |
 7686|  36.3k|            stageBuiltins[EShLangCompute].append(funcName[i]);
 7687|  36.3k|            stageBuiltins[EShLangCompute].append(typeName);
 7688|  36.3k|            if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7688:17): [True: 10.8k, False: 25.4k]
  ------------------
 7689|  10.8k|                stageBuiltins[EShLangCompute].append(", float");
 7690|  25.4k|            else {
 7691|  25.4k|                stageBuiltins[EShLangCompute].append(", vec");
 7692|  25.4k|                stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
 7693|  25.4k|            }
 7694|  36.3k|            stageBuiltins[EShLangCompute].append(");\n");
 7695|       |
 7696|  36.3k|            stageBuiltins[EShLangTask].append(funcName[i]);
 7697|  36.3k|            stageBuiltins[EShLangTask].append(typeName);
 7698|  36.3k|            if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7698:17): [True: 10.8k, False: 25.4k]
  ------------------
 7699|  10.8k|                stageBuiltins[EShLangTask].append(", float");
 7700|  25.4k|            else {
 7701|  25.4k|                stageBuiltins[EShLangTask].append(", vec");
 7702|  25.4k|                stageBuiltins[EShLangTask].append(postfixes[dimMap[sampler.dim]]);
 7703|  25.4k|            }
 7704|  36.3k|            stageBuiltins[EShLangTask].append(");\n");
 7705|       |
 7706|  36.3k|            stageBuiltins[EShLangMesh].append(funcName[i]);
 7707|  36.3k|            stageBuiltins[EShLangMesh].append(typeName);
 7708|  36.3k|            if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7708:17): [True: 10.8k, False: 25.4k]
  ------------------
 7709|  10.8k|                stageBuiltins[EShLangMesh].append(", float");
 7710|  25.4k|            else {
 7711|  25.4k|                stageBuiltins[EShLangMesh].append(", vec");
 7712|  25.4k|                stageBuiltins[EShLangMesh].append(postfixes[dimMap[sampler.dim]]);
 7713|  25.4k|            }
 7714|  36.3k|            stageBuiltins[EShLangMesh].append(");\n");
 7715|  36.3k|        }
 7716|  18.1k|    }
 7717|       |
 7718|       |    //
 7719|       |    // textureQueryLevels()
 7720|       |    //
 7721|       |
 7722|  88.8k|    if (profile != EEsProfile && version >= 430 && ! sampler.isImage() && sampler.dim != EsdRect &&
  ------------------
  |  Branch (7722:9): [True: 58.2k, False: 30.6k]
  |  Branch (7722:34): [True: 57.6k, False: 535]
  |  Branch (7722:52): [True: 28.2k, False: 29.4k]
  |  Branch (7722:75): [True: 25.3k, False: 2.88k]
  ------------------
 7723|  25.3k|        ! sampler.isMultiSample() && ! sampler.isBuffer()) {
  ------------------
  |  Branch (7723:9): [True: 21.3k, False: 3.99k]
  |  Branch (7723:38): [True: 19.3k, False: 1.99k]
  ------------------
 7724|  19.3k|        commonBuiltins.append("int textureQueryLevels(");
 7725|  19.3k|        commonBuiltins.append(typeName);
 7726|  19.3k|        commonBuiltins.append(");\n");
 7727|  19.3k|    }
 7728|  88.8k|}
_ZN7glslang9TBuiltIns17addImageFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7737|  46.6k|{
 7738|  46.6k|    int dims = dimMap[sampler.dim];
 7739|       |    // most things with an array add a dimension, except for cubemaps
 7740|  46.6k|    if (sampler.arrayed && sampler.dim != EsdCube)
  ------------------
  |  Branch (7740:9): [True: 16.7k, False: 29.8k]
  |  Branch (7740:28): [True: 11.6k, False: 5.18k]
  ------------------
 7741|  11.6k|        ++dims;
 7742|       |
 7743|  46.6k|    TString imageParams = typeName;
 7744|  46.6k|    if (dims == 1)
  ------------------
  |  Branch (7744:9): [True: 7.90k, False: 38.7k]
  ------------------
 7745|  7.90k|        imageParams.append(", int");
 7746|  38.7k|    else {
 7747|  38.7k|        imageParams.append(", ivec");
 7748|  38.7k|        imageParams.append(postfixes[dims]);
 7749|  38.7k|    }
 7750|  46.6k|    if (sampler.isMultiSample())
  ------------------
  |  Branch (7750:9): [True: 7.41k, False: 39.2k]
  ------------------
 7751|  7.41k|        imageParams.append(", int");
 7752|       |
 7753|  46.6k|    if (profile == EEsProfile)
  ------------------
  |  Branch (7753:9): [True: 16.7k, False: 29.8k]
  ------------------
 7754|  16.7k|        commonBuiltins.append("highp ");
 7755|  46.6k|    commonBuiltins.append(prefixes[sampler.type]);
 7756|  46.6k|    commonBuiltins.append("vec4 imageLoad(readonly volatile coherent nontemporal ");
 7757|  46.6k|    commonBuiltins.append(imageParams);
 7758|  46.6k|    commonBuiltins.append(");\n");
 7759|       |
 7760|  46.6k|    commonBuiltins.append("void imageStore(writeonly volatile coherent nontemporal ");
 7761|  46.6k|    commonBuiltins.append(imageParams);
 7762|  46.6k|    commonBuiltins.append(", ");
 7763|  46.6k|    commonBuiltins.append(prefixes[sampler.type]);
 7764|  46.6k|    commonBuiltins.append("vec4);\n");
 7765|       |
 7766|  46.6k|    if (! sampler.is1D() && ! sampler.isBuffer() && profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (7766:9): [True: 41.2k, False: 5.43k]
  |  Branch (7766:29): [True: 36.0k, False: 5.18k]
  |  Branch (7766:53): [True: 21.7k, False: 14.3k]
  |  Branch (7766:78): [True: 21.3k, False: 424]
  ------------------
 7767|  21.3k|        commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent nontemporal ");
 7768|  21.3k|        commonBuiltins.append(imageParams);
 7769|  21.3k|        commonBuiltins.append(", out ");
 7770|  21.3k|        commonBuiltins.append(prefixes[sampler.type]);
 7771|  21.3k|        commonBuiltins.append("vec4");
 7772|  21.3k|        commonBuiltins.append(");\n");
 7773|  21.3k|    }
 7774|       |
 7775|  46.6k|    if ( profile != EEsProfile ||
  ------------------
  |  Branch (7775:10): [True: 29.8k, False: 16.7k]
  ------------------
 7776|  46.6k|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7776:10): [True: 16.7k, False: 0]
  |  Branch (7776:35): [True: 16.7k, False: 0]
  ------------------
 7777|  46.6k|        if (sampler.type == EbtInt || sampler.type == EbtUint || sampler.type == EbtInt64 || sampler.type == EbtUint64 ) {
  ------------------
  |  Branch (7777:13): [True: 8.01k, False: 38.6k]
  |  Branch (7777:39): [True: 8.01k, False: 30.6k]
  |  Branch (7777:66): [True: 8.88k, False: 21.7k]
  |  Branch (7777:94): [True: 8.88k, False: 12.8k]
  ------------------
 7778|       |            
 7779|  33.7k|            const char* dataType;
 7780|  33.7k|            switch (sampler.type) {
 7781|  8.01k|                case(EbtInt): dataType = "highp int"; break;
  ------------------
  |  Branch (7781:17): [True: 8.01k, False: 25.7k]
  ------------------
 7782|  8.01k|                case(EbtUint): dataType = "highp uint"; break;
  ------------------
  |  Branch (7782:17): [True: 8.01k, False: 25.7k]
  ------------------
 7783|  8.88k|                case(EbtInt64): dataType = "highp int64_t"; break;
  ------------------
  |  Branch (7783:17): [True: 8.88k, False: 24.9k]
  ------------------
 7784|  8.88k|                case(EbtUint64): dataType = "highp uint64_t"; break;
  ------------------
  |  Branch (7784:17): [True: 8.88k, False: 24.9k]
  ------------------
 7785|      0|                default: dataType = "";
  ------------------
  |  Branch (7785:17): [True: 0, False: 33.7k]
  ------------------
 7786|  33.7k|            }
 7787|       |
 7788|  33.7k|            const int numBuiltins = 7;
 7789|       |
 7790|  33.7k|            static const char* atomicFunc[numBuiltins] = {
 7791|  33.7k|                " imageAtomicAdd(volatile coherent nontemporal ",
 7792|  33.7k|                " imageAtomicMin(volatile coherent nontemporal ",
 7793|  33.7k|                " imageAtomicMax(volatile coherent nontemporal ",
 7794|  33.7k|                " imageAtomicAnd(volatile coherent nontemporal ",
 7795|  33.7k|                " imageAtomicOr(volatile coherent nontemporal ",
 7796|  33.7k|                " imageAtomicXor(volatile coherent nontemporal ",
 7797|  33.7k|                " imageAtomicExchange(volatile coherent nontemporal "
 7798|  33.7k|            };
 7799|       |
 7800|       |            // Loop twice to add prototypes with/without scope/semantics
 7801|   101k|            for (int j = 0; j < 2; ++j) {
  ------------------
  |  Branch (7801:29): [True: 67.5k, False: 33.7k]
  ------------------
 7802|   540k|                for (size_t i = 0; i < numBuiltins; ++i) {
  ------------------
  |  Branch (7802:36): [True: 473k, False: 67.5k]
  ------------------
 7803|   473k|                    commonBuiltins.append(dataType);
 7804|   473k|                    commonBuiltins.append(atomicFunc[i]);
 7805|   473k|                    commonBuiltins.append(imageParams);
 7806|   473k|                    commonBuiltins.append(", ");
 7807|   473k|                    commonBuiltins.append(dataType);
 7808|   473k|                    if (j == 1) {
  ------------------
  |  Branch (7808:25): [True: 236k, False: 236k]
  ------------------
 7809|   236k|                        commonBuiltins.append(", int, int, int");
 7810|   236k|                    }
 7811|   473k|                    commonBuiltins.append(");\n");
 7812|   473k|                }
 7813|       |
 7814|  67.5k|                commonBuiltins.append(dataType);
 7815|  67.5k|                commonBuiltins.append(" imageAtomicCompSwap(volatile coherent nontemporal ");
 7816|  67.5k|                commonBuiltins.append(imageParams);
 7817|  67.5k|                commonBuiltins.append(", ");
 7818|  67.5k|                commonBuiltins.append(dataType);
 7819|  67.5k|                commonBuiltins.append(", ");
 7820|  67.5k|                commonBuiltins.append(dataType);
 7821|  67.5k|                if (j == 1) {
  ------------------
  |  Branch (7821:21): [True: 33.7k, False: 33.7k]
  ------------------
 7822|  33.7k|                    commonBuiltins.append(", int, int, int, int, int");
 7823|  33.7k|                }
 7824|  67.5k|                commonBuiltins.append(");\n");
 7825|  67.5k|            }
 7826|       |
 7827|  33.7k|            commonBuiltins.append(dataType);
 7828|  33.7k|            commonBuiltins.append(" imageAtomicLoad(volatile coherent nontemporal ");
 7829|  33.7k|            commonBuiltins.append(imageParams);
 7830|  33.7k|            commonBuiltins.append(", int, int, int);\n");
 7831|       |
 7832|  33.7k|            commonBuiltins.append("void imageAtomicStore(volatile coherent nontemporal ");
 7833|  33.7k|            commonBuiltins.append(imageParams);
 7834|  33.7k|            commonBuiltins.append(", ");
 7835|  33.7k|            commonBuiltins.append(dataType);
 7836|  33.7k|            commonBuiltins.append(", int, int, int);\n");
 7837|       |
 7838|  33.7k|        } else {
 7839|       |            // not int or uint
 7840|       |            // GL_ARB_ES3_1_compatibility
 7841|       |            // TODO: spec issue: are there restrictions on the kind of layout() that can be used?  what about dropping memory qualifiers?
 7842|  12.8k|            if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (7842:17): [True: 2.96k, False: 9.93k]
  |  Branch (7842:42): [True: 2.96k, False: 0]
  ------------------
 7843|  2.96k|                commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal ");
 7844|  2.96k|                commonBuiltins.append(imageParams);
 7845|  2.96k|                commonBuiltins.append(", float);\n");
 7846|  2.96k|            }
 7847|       |
 7848|       |            // GL_NV_shader_atomic_fp16_vector
 7849|  12.8k|            if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (7849:17): [True: 9.93k, False: 2.96k]
  |  Branch (7849:42): [True: 9.80k, False: 132]
  ------------------
 7850|  9.80k|                const int numFp16Builtins = 4;
 7851|  9.80k|                const char* atomicFp16Func[numFp16Builtins] = {
 7852|  9.80k|                    " imageAtomicAdd(volatile coherent nontemporal ",
 7853|  9.80k|                    " imageAtomicMin(volatile coherent nontemporal ",
 7854|  9.80k|                    " imageAtomicMax(volatile coherent nontemporal ",
 7855|  9.80k|                    " imageAtomicExchange(volatile coherent nontemporal "
 7856|  9.80k|                };
 7857|  9.80k|                const int numFp16DataTypes = 2;
 7858|  9.80k|                const char* atomicFp16DataTypes[numFp16DataTypes] = {
 7859|  9.80k|                    "f16vec2",
 7860|  9.80k|                    "f16vec4"
 7861|  9.80k|                };
 7862|       |                // Loop twice to add prototypes with/without scope/semantics
 7863|  29.4k|                for (int j = 0; j < numFp16DataTypes; ++j) {
  ------------------
  |  Branch (7863:33): [True: 19.6k, False: 9.80k]
  ------------------
 7864|  98.0k|                    for (int i = 0; i < numFp16Builtins; ++i) {
  ------------------
  |  Branch (7864:37): [True: 78.4k, False: 19.6k]
  ------------------
 7865|  78.4k|                        commonBuiltins.append(atomicFp16DataTypes[j]);
 7866|  78.4k|                        commonBuiltins.append(atomicFp16Func[i]);
 7867|  78.4k|                        commonBuiltins.append(imageParams);
 7868|  78.4k|                        commonBuiltins.append(", ");
 7869|  78.4k|                        commonBuiltins.append(atomicFp16DataTypes[j]);
 7870|  78.4k|                        commonBuiltins.append(");\n");
 7871|  78.4k|                    }
 7872|  19.6k|                }
 7873|  9.80k|            }
 7874|       |
 7875|  12.8k|            if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (7875:17): [True: 9.93k, False: 2.96k]
  |  Branch (7875:42): [True: 9.76k, False: 165]
  ------------------
 7876|  9.76k|                commonBuiltins.append("float imageAtomicAdd(volatile coherent nontemporal ");
 7877|  9.76k|                commonBuiltins.append(imageParams);
 7878|  9.76k|                commonBuiltins.append(", float);\n");
 7879|       |
 7880|  9.76k|                commonBuiltins.append("float imageAtomicAdd(volatile coherent nontemporal ");
 7881|  9.76k|                commonBuiltins.append(imageParams);
 7882|  9.76k|                commonBuiltins.append(", float");
 7883|  9.76k|                commonBuiltins.append(", int, int, int);\n");
 7884|       |
 7885|  9.76k|                commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal ");
 7886|  9.76k|                commonBuiltins.append(imageParams);
 7887|  9.76k|                commonBuiltins.append(", float);\n");
 7888|       |
 7889|  9.76k|                commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal ");
 7890|  9.76k|                commonBuiltins.append(imageParams);
 7891|  9.76k|                commonBuiltins.append(", float");
 7892|  9.76k|                commonBuiltins.append(", int, int, int);\n");
 7893|       |
 7894|  9.76k|                commonBuiltins.append("float imageAtomicLoad(readonly volatile coherent nontemporal ");
 7895|  9.76k|                commonBuiltins.append(imageParams);
 7896|  9.76k|                commonBuiltins.append(", int, int, int);\n");
 7897|       |
 7898|  9.76k|                commonBuiltins.append("void imageAtomicStore(writeonly volatile coherent nontemporal ");
 7899|  9.76k|                commonBuiltins.append(imageParams);
 7900|  9.76k|                commonBuiltins.append(", float");
 7901|  9.76k|                commonBuiltins.append(", int, int, int);\n");
 7902|       |
 7903|  9.76k|                commonBuiltins.append("float imageAtomicMin(volatile coherent nontemporal ");
 7904|  9.76k|                commonBuiltins.append(imageParams);
 7905|  9.76k|                commonBuiltins.append(", float);\n");
 7906|       |
 7907|  9.76k|                commonBuiltins.append("float imageAtomicMin(volatile coherent nontemporal ");
 7908|  9.76k|                commonBuiltins.append(imageParams);
 7909|  9.76k|                commonBuiltins.append(", float");
 7910|  9.76k|                commonBuiltins.append(", int, int, int);\n");
 7911|       |
 7912|  9.76k|                commonBuiltins.append("float imageAtomicMax(volatile coherent nontemporal ");
 7913|  9.76k|                commonBuiltins.append(imageParams);
 7914|  9.76k|                commonBuiltins.append(", float);\n");
 7915|       |
 7916|  9.76k|                commonBuiltins.append("float imageAtomicMax(volatile coherent nontemporal ");
 7917|  9.76k|                commonBuiltins.append(imageParams);
 7918|  9.76k|                commonBuiltins.append(", float");
 7919|  9.76k|                commonBuiltins.append(", int, int, int);\n");
 7920|  9.76k|            }
 7921|  12.8k|        }
 7922|  46.6k|    }
 7923|       |
 7924|  46.6k|    if (sampler.dim == EsdRect || sampler.dim == EsdBuffer || sampler.shadow || sampler.isMultiSample())
  ------------------
  |  Branch (7924:9): [True: 2.71k, False: 43.9k]
  |  Branch (7924:35): [True: 5.18k, False: 38.7k]
  |  Branch (7924:63): [True: 0, False: 38.7k]
  |  Branch (7924:81): [True: 7.41k, False: 31.3k]
  ------------------
 7925|  15.3k|        return;
 7926|       |
 7927|  31.3k|    if (profile == EEsProfile || version < 450)
  ------------------
  |  Branch (7927:9): [True: 12.3k, False: 19.0k]
  |  Branch (7927:34): [True: 371, False: 18.6k]
  ------------------
 7928|  12.7k|        return;
 7929|       |
 7930|  18.6k|    TString imageLodParams = typeName;
 7931|  18.6k|    if (dims == 1)
  ------------------
  |  Branch (7931:9): [True: 2.66k, False: 15.9k]
  ------------------
 7932|  2.66k|        imageLodParams.append(", int");
 7933|  15.9k|    else {
 7934|  15.9k|        imageLodParams.append(", ivec");
 7935|  15.9k|        imageLodParams.append(postfixes[dims]);
 7936|  15.9k|    }
 7937|  18.6k|    imageLodParams.append(", int");
 7938|       |
 7939|  18.6k|    commonBuiltins.append(prefixes[sampler.type]);
 7940|  18.6k|    commonBuiltins.append("vec4 imageLoadLodAMD(readonly volatile coherent nontemporal ");
 7941|  18.6k|    commonBuiltins.append(imageLodParams);
 7942|  18.6k|    commonBuiltins.append(");\n");
 7943|       |
 7944|  18.6k|    commonBuiltins.append("void imageStoreLodAMD(writeonly volatile coherent nontemporal ");
 7945|  18.6k|    commonBuiltins.append(imageLodParams);
 7946|  18.6k|    commonBuiltins.append(", ");
 7947|  18.6k|    commonBuiltins.append(prefixes[sampler.type]);
 7948|  18.6k|    commonBuiltins.append("vec4);\n");
 7949|       |
 7950|  18.6k|    if (! sampler.is1D()) {
  ------------------
  |  Branch (7950:9): [True: 13.3k, False: 5.32k]
  ------------------
 7951|  13.3k|        commonBuiltins.append("int sparseImageLoadLodAMD(readonly volatile coherent nontemporal ");
 7952|  13.3k|        commonBuiltins.append(imageLodParams);
 7953|  13.3k|        commonBuiltins.append(", out ");
 7954|  13.3k|        commonBuiltins.append(prefixes[sampler.type]);
 7955|  13.3k|        commonBuiltins.append("vec4");
 7956|  13.3k|        commonBuiltins.append(");\n");
 7957|  13.3k|    }
 7958|  18.6k|}
_ZN7glslang9TBuiltIns18addSubpassSamplingENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7967|    424|{
 7968|    424|    stageBuiltins[EShLangFragment].append(prefixes[sampler.type]);
 7969|    424|    stageBuiltins[EShLangFragment].append("vec4 subpassLoad");
 7970|    424|    stageBuiltins[EShLangFragment].append("(");
 7971|    424|    stageBuiltins[EShLangFragment].append(typeName.c_str());
 7972|    424|    if (sampler.isMultiSample())
  ------------------
  |  Branch (7972:9): [True: 212, False: 212]
  ------------------
 7973|    212|        stageBuiltins[EShLangFragment].append(", int");
 7974|    424|    stageBuiltins[EShLangFragment].append(");\n");
 7975|    424|}
_ZN7glslang9TBuiltIns20addSamplingFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7984|  42.5k|{
 7985|       |    //
 7986|       |    // texturing
 7987|       |    //
 7988|   127k|    for (int proj = 0; proj <= 1; ++proj) { // loop over "bool" projective or not
  ------------------
  |  Branch (7988:24): [True: 85.0k, False: 42.5k]
  ------------------
 7989|       |
 7990|  85.0k|        if (proj && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.arrayed || sampler.isMultiSample()
  ------------------
  |  Branch (7990:13): [True: 42.5k, False: 42.5k]
  |  Branch (7990:22): [True: 9.82k, False: 32.6k]
  |  Branch (7990:48): [True: 3.51k, False: 29.1k]
  |  Branch (7990:70): [True: 11.3k, False: 17.8k]
  |  Branch (7990:89): [True: 3.51k, False: 14.2k]
  ------------------
 7991|  14.2k|            || !sampler.isCombined()))
  ------------------
  |  Branch (7991:16): [True: 848, False: 13.4k]
  ------------------
 7992|  29.0k|            continue;
 7993|       |
 7994|   167k|        for (int lod = 0; lod <= 1; ++lod) {
  ------------------
  |  Branch (7994:27): [True: 111k, False: 55.9k]
  ------------------
 7995|       |
 7996|   111k|            if (lod && (sampler.isBuffer() || sampler.isRect() || sampler.isMultiSample() || !sampler.isCombined()))
  ------------------
  |  Branch (7996:17): [True: 55.9k, False: 55.9k]
  |  Branch (7996:25): [True: 3.51k, False: 52.4k]
  |  Branch (7996:47): [True: 5.66k, False: 46.7k]
  |  Branch (7996:67): [True: 7.03k, False: 39.7k]
  |  Branch (7996:94): [True: 1.48k, False: 38.2k]
  ------------------
 7997|  17.6k|                continue;
 7998|  94.2k|            if (lod && sampler.dim == Esd2D && sampler.arrayed && sampler.shadow)
  ------------------
  |  Branch (7998:17): [True: 38.2k, False: 55.9k]
  |  Branch (7998:24): [True: 14.1k, False: 24.1k]
  |  Branch (7998:48): [True: 4.70k, False: 9.40k]
  |  Branch (7998:67): [True: 1.39k, False: 3.30k]
  ------------------
 7999|  1.39k|                continue;
 8000|  92.8k|            if (lod && sampler.dim == EsdCube && sampler.shadow)
  ------------------
  |  Branch (8000:17): [True: 36.8k, False: 55.9k]
  |  Branch (8000:24): [True: 9.40k, False: 27.4k]
  |  Branch (8000:50): [True: 2.79k, False: 6.60k]
  ------------------
 8001|  2.79k|                continue;
 8002|       |
 8003|   270k|            for (int bias = 0; bias <= 1; ++bias) {
  ------------------
  |  Branch (8003:32): [True: 180k, False: 90.0k]
  ------------------
 8004|       |
 8005|   180k|                if (bias && (lod || sampler.isMultiSample() || !sampler.isCombined()))
  ------------------
  |  Branch (8005:21): [True: 90.0k, False: 90.0k]
  |  Branch (8005:30): [True: 34.0k, False: 55.9k]
  |  Branch (8005:37): [True: 7.03k, False: 48.9k]
  |  Branch (8005:64): [True: 1.90k, False: 47.0k]
  ------------------
 8006|  43.0k|                    continue;
 8007|   137k|                if (bias && (sampler.dim == Esd2D || sampler.dim == EsdCube) && sampler.shadow && sampler.arrayed)
  ------------------
  |  Branch (8007:21): [True: 47.0k, False: 90.0k]
  |  Branch (8007:30): [True: 14.1k, False: 32.9k]
  |  Branch (8007:54): [True: 9.40k, False: 23.5k]
  |  Branch (8007:81): [True: 6.98k, False: 16.5k]
  |  Branch (8007:99): [True: 2.79k, False: 4.19k]
  ------------------
 8008|  2.79k|                    continue;
 8009|   134k|                if (bias && (sampler.isRect() || sampler.isBuffer()))
  ------------------
  |  Branch (8009:21): [True: 44.2k, False: 90.0k]
  |  Branch (8009:30): [True: 5.44k, False: 38.7k]
  |  Branch (8009:50): [True: 3.30k, False: 35.4k]
  ------------------
 8010|  8.75k|                    continue;
 8011|       |
 8012|   376k|                for (int offset = 0; offset <= 1; ++offset) { // loop over "bool" offset or not
  ------------------
  |  Branch (8012:38): [True: 251k, False: 125k]
  ------------------
 8013|       |
 8014|   251k|                    if (proj + offset + bias + lod > 3)
  ------------------
  |  Branch (8014:25): [True: 0, False: 251k]
  ------------------
 8015|      0|                        continue;
 8016|   251k|                    if (offset && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.isMultiSample()))
  ------------------
  |  Branch (8016:25): [True: 125k, False: 125k]
  |  Branch (8016:36): [True: 24.4k, False: 101k]
  |  Branch (8016:62): [True: 3.51k, False: 97.5k]
  |  Branch (8016:84): [True: 7.03k, False: 90.5k]
  ------------------
 8017|  34.9k|                        continue;
 8018|       |
 8019|   648k|                    for (int fetch = 0; fetch <= 1; ++fetch) { // loop over "bool" fetch or not
  ------------------
  |  Branch (8019:41): [True: 432k, False: 216k]
  ------------------
 8020|       |
 8021|   432k|                        if (proj + offset + fetch + bias + lod > 3)
  ------------------
  |  Branch (8021:29): [True: 21.4k, False: 410k]
  ------------------
 8022|  21.4k|                            continue;
 8023|   410k|                        if (fetch && (lod || bias))
  ------------------
  |  Branch (8023:29): [True: 194k, False: 216k]
  |  Branch (8023:39): [True: 50.8k, False: 143k]
  |  Branch (8023:46): [True: 52.2k, False: 91.5k]
  ------------------
 8024|   103k|                            continue;
 8025|   307k|                        if (fetch && (sampler.shadow || sampler.dim == EsdCube))
  ------------------
  |  Branch (8025:29): [True: 91.5k, False: 216k]
  |  Branch (8025:39): [True: 20.2k, False: 71.3k]
  |  Branch (8025:57): [True: 7.03k, False: 64.3k]
  ------------------
 8026|  27.2k|                            continue;
 8027|   280k|                        if (fetch == 0 && (sampler.isMultiSample() || sampler.isBuffer()
  ------------------
  |  Branch (8027:29): [True: 216k, False: 64.3k]
  |  Branch (8027:44): [True: 7.03k, False: 209k]
  |  Branch (8027:71): [True: 3.51k, False: 205k]
  ------------------
 8028|   205k|                            || !sampler.isCombined()))
  ------------------
  |  Branch (8028:32): [True: 2.96k, False: 202k]
  ------------------
 8029|  13.5k|                            continue;
 8030|       |
 8031|   800k|                        for (int grad = 0; grad <= 1; ++grad) { // loop over "bool" grad or not
  ------------------
  |  Branch (8031:44): [True: 533k, False: 266k]
  ------------------
 8032|       |
 8033|   533k|                            if (grad && (lod || bias || sampler.isMultiSample() || !sampler.isCombined()))
  ------------------
  |  Branch (8033:33): [True: 266k, False: 266k]
  |  Branch (8033:42): [True: 61.5k, False: 205k]
  |  Branch (8033:49): [True: 62.9k, False: 142k]
  |  Branch (8033:57): [True: 7.03k, False: 135k]
  |  Branch (8033:84): [True: 2.75k, False: 132k]
  ------------------
 8034|   134k|                                continue;
 8035|   399k|                            if (grad && sampler.isBuffer())
  ------------------
  |  Branch (8035:33): [True: 132k, False: 266k]
  |  Branch (8035:41): [True: 3.30k, False: 129k]
  ------------------
 8036|  3.30k|                                continue;
 8037|   396k|                            if (proj + offset + fetch + grad + bias + lod > 3)
  ------------------
  |  Branch (8037:33): [True: 10.2k, False: 385k]
  ------------------
 8038|  10.2k|                                continue;
 8039|       |
 8040|  1.15M|                            for (int extraProj = 0; extraProj <= 1; ++extraProj) {
  ------------------
  |  Branch (8040:53): [True: 771k, False: 385k]
  ------------------
 8041|   771k|                                bool compare = false;
 8042|   771k|                                int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
  ------------------
  |  Branch (8042:72): [True: 189k, False: 582k]
  ------------------
 8043|       |                                // skip dummy unused second component for 1D non-array shadows
 8044|   771k|                                if (sampler.shadow && totalDims < 2)
  ------------------
  |  Branch (8044:37): [True: 127k, False: 644k]
  |  Branch (8044:55): [True: 28.8k, False: 98.7k]
  ------------------
 8045|  28.8k|                                    totalDims = 2;
 8046|   771k|                                totalDims += (sampler.shadow ? 1 : 0) + proj;
  ------------------
  |  Branch (8046:47): [True: 127k, False: 644k]
  ------------------
 8047|   771k|                                if (totalDims > 4 && sampler.shadow) {
  ------------------
  |  Branch (8047:37): [True: 5.58k, False: 766k]
  |  Branch (8047:54): [True: 5.58k, False: 0]
  ------------------
 8048|  5.58k|                                    compare = true;
 8049|  5.58k|                                    totalDims = 4;
 8050|  5.58k|                                }
 8051|   771k|                                assert(totalDims <= 4);
 8052|       |
 8053|   771k|                                if (extraProj && ! proj)
  ------------------
  |  Branch (8053:37): [True: 385k, False: 385k]
  |  Branch (8053:50): [True: 258k, False: 127k]
  ------------------
 8054|   258k|                                    continue;
 8055|   513k|                                if (extraProj && (sampler.dim == Esd3D || sampler.shadow || !sampler.isCombined()))
  ------------------
  |  Branch (8055:37): [True: 127k, False: 385k]
  |  Branch (8055:51): [True: 36.3k, False: 91.1k]
  |  Branch (8055:75): [True: 22.0k, False: 69.1k]
  |  Branch (8055:93): [True: 0, False: 69.1k]
  ------------------
 8056|  58.3k|                                    continue;
 8057|       |
 8058|       |                                // loop over 16-bit floating-point texel addressing
 8059|  1.36M|                                for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
  ------------------
  |  Branch (8059:58): [True: 910k, False: 455k]
  ------------------
 8060|   910k|                                {
 8061|   910k|                                    if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (8061:41): [True: 455k, False: 455k]
  |  Branch (8061:55): [True: 363k, False: 91.8k]
  ------------------
 8062|   363k|                                        continue;
 8063|   546k|                                    if (f16TexAddr && sampler.shadow && ! compare) {
  ------------------
  |  Branch (8063:41): [True: 91.8k, False: 455k]
  |  Branch (8063:55): [True: 25.3k, False: 66.5k]
  |  Branch (8063:73): [True: 24.4k, False: 888]
  ------------------
 8064|  24.4k|                                        compare = true; // compare argument is always present
 8065|  24.4k|                                        totalDims--;
 8066|  24.4k|                                    }
 8067|       |                                    // loop over "bool" lod clamp
 8068|  1.64M|                                    for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
  ------------------
  |  Branch (8068:60): [True: 1.09M, False: 546k]
  ------------------
 8069|  1.09M|                                    {
 8070|  1.09M|                                        if (lodClamp && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (8070:45): [True: 546k, False: 546k]
  |  Branch (8070:58): [True: 130k, False: 415k]
  |  Branch (8070:83): [True: 7.51k, False: 408k]
  ------------------
 8071|   138k|                                            continue;
 8072|   955k|                                        if (lodClamp && (proj || lod || fetch))
  ------------------
  |  Branch (8072:45): [True: 408k, False: 546k]
  |  Branch (8072:58): [True: 179k, False: 228k]
  |  Branch (8072:66): [True: 34.6k, False: 194k]
  |  Branch (8072:73): [True: 63.9k, False: 130k]
  ------------------
 8073|   278k|                                            continue;
 8074|       |
 8075|       |                                        // loop over "bool" sparse or not
 8076|  2.03M|                                        for (int sparse = 0; sparse <= 1; ++sparse)
  ------------------
  |  Branch (8076:62): [True: 1.35M, False: 676k]
  ------------------
 8077|  1.35M|                                        {
 8078|  1.35M|                                            if (sparse && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (8078:49): [True: 676k, False: 676k]
  |  Branch (8078:60): [True: 130k, False: 546k]
  |  Branch (8078:85): [True: 7.51k, False: 538k]
  ------------------
 8079|   138k|                                                continue;
 8080|       |                                            // Sparse sampling is not for 1D/1D array texture, buffer texture, and
 8081|       |                                            // projective texture
 8082|  1.21M|                                            if (sparse && (sampler.is1D() || sampler.isBuffer() || proj))
  ------------------
  |  Branch (8082:49): [True: 538k, False: 676k]
  |  Branch (8082:60): [True: 177k, False: 360k]
  |  Branch (8082:78): [True: 2.48k, False: 358k]
  |  Branch (8082:100): [True: 120k, False: 237k]
  ------------------
 8083|   300k|                                                continue;
 8084|       |
 8085|   914k|                                            TString s;
 8086|       |
 8087|       |                                            // return type
 8088|   914k|                                            if (sparse)
  ------------------
  |  Branch (8088:49): [True: 237k, False: 676k]
  ------------------
 8089|   237k|                                                s.append("int ");
 8090|   676k|                                            else {
 8091|   676k|                                                if (sampler.shadow)
  ------------------
  |  Branch (8091:53): [True: 130k, False: 546k]
  ------------------
 8092|   130k|                                                    if (sampler.type == EbtFloat16)
  ------------------
  |  Branch (8092:57): [True: 78.1k, False: 52.2k]
  ------------------
 8093|  78.1k|                                                        s.append("float16_t ");
 8094|  52.2k|                                                    else
 8095|  52.2k|                                                        s.append("float ");
 8096|   546k|                                                else {
 8097|   546k|                                                    s.append(prefixes[sampler.type]);
 8098|   546k|                                                    s.append("vec4 ");
 8099|   546k|                                                }
 8100|   676k|                                            }
 8101|       |
 8102|       |                                            // name
 8103|   914k|                                            if (sparse) {
  ------------------
  |  Branch (8103:49): [True: 237k, False: 676k]
  ------------------
 8104|   237k|                                                if (fetch)
  ------------------
  |  Branch (8104:53): [True: 42.6k, False: 195k]
  ------------------
 8105|  42.6k|                                                    s.append("sparseTexel");
 8106|   195k|                                                else
 8107|   195k|                                                    s.append("sparseTexture");
 8108|   237k|                                            }
 8109|   676k|                                            else {
 8110|   676k|                                                if (fetch)
  ------------------
  |  Branch (8110:53): [True: 148k, False: 528k]
  ------------------
 8111|   148k|                                                    s.append("texel");
 8112|   528k|                                                else
 8113|   528k|                                                    s.append("texture");
 8114|   676k|                                            }
 8115|   914k|                                            if (proj)
  ------------------
  |  Branch (8115:49): [True: 236k, False: 678k]
  ------------------
 8116|   236k|                                                s.append("Proj");
 8117|   914k|                                            if (lod)
  ------------------
  |  Branch (8117:49): [True: 106k, False: 808k]
  ------------------
 8118|   106k|                                                s.append("Lod");
 8119|   914k|                                            if (grad)
  ------------------
  |  Branch (8119:49): [True: 299k, False: 615k]
  ------------------
 8120|   299k|                                                s.append("Grad");
 8121|   914k|                                            if (fetch)
  ------------------
  |  Branch (8121:49): [True: 190k, False: 724k]
  ------------------
 8122|   190k|                                                s.append("Fetch");
 8123|   914k|                                            if (offset)
  ------------------
  |  Branch (8123:49): [True: 387k, False: 527k]
  ------------------
 8124|   387k|                                                s.append("Offset");
 8125|   914k|                                            if (lodClamp)
  ------------------
  |  Branch (8125:49): [True: 217k, False: 697k]
  ------------------
 8126|   217k|                                                s.append("Clamp");
 8127|   914k|                                            if (lodClamp != 0 || sparse)
  ------------------
  |  Branch (8127:49): [True: 217k, False: 697k]
  |  Branch (8127:66): [True: 150k, False: 546k]
  ------------------
 8128|   368k|                                                s.append("ARB");
 8129|   914k|                                            s.append("(");
 8130|       |
 8131|       |                                            // sampler type
 8132|   914k|                                            s.append(typeName);
 8133|       |                                            // P coordinate
 8134|   914k|                                            if (extraProj) {
  ------------------
  |  Branch (8134:49): [True: 81.9k, False: 832k]
  ------------------
 8135|  81.9k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8135:53): [True: 12.8k, False: 69.1k]
  ------------------
 8136|  12.8k|                                                    s.append(",f16vec4");
 8137|  69.1k|                                                else
 8138|  69.1k|                                                    s.append(",vec4");
 8139|   832k|                                            } else {
 8140|   832k|                                                s.append(",");
 8141|   832k|                                                TBasicType t = fetch ? EbtInt : (f16TexAddr ? EbtFloat16 : EbtFloat);
  ------------------
  |  Branch (8141:64): [True: 166k, False: 666k]
  |  Branch (8141:82): [True: 138k, False: 528k]
  ------------------
 8142|   832k|                                                if (totalDims == 1)
  ------------------
  |  Branch (8142:53): [True: 45.0k, False: 787k]
  ------------------
 8143|  45.0k|                                                    s.append(TType::getBasicString(t));
 8144|   787k|                                                else {
 8145|   787k|                                                    s.append(prefixes[t]);
 8146|   787k|                                                    s.append("vec");
 8147|   787k|                                                    s.append(postfixes[totalDims]);
 8148|   787k|                                                }
 8149|   832k|                                            }
 8150|       |                                            // non-optional compare
 8151|   914k|                                            if (compare)
  ------------------
  |  Branch (8151:49): [True: 64.9k, False: 849k]
  ------------------
 8152|  64.9k|                                                s.append(",float");
 8153|       |
 8154|       |                                            // non-optional lod argument (lod that's not driven by lod loop) or sample
 8155|   914k|                                            if ((fetch && !sampler.isBuffer() &&
  ------------------
  |  Branch (8155:50): [True: 190k, False: 724k]
  |  Branch (8155:59): [True: 186k, False: 4.01k]
  ------------------
 8156|   186k|                                                 !sampler.isRect() && !sampler.isMultiSample())
  ------------------
  |  Branch (8156:50): [True: 154k, False: 32.5k]
  |  Branch (8156:71): [True: 141k, False: 12.9k]
  ------------------
 8157|   773k|                                                 || (sampler.isMultiSample() && fetch))
  ------------------
  |  Branch (8157:54): [True: 12.9k, False: 760k]
  |  Branch (8157:81): [True: 12.9k, False: 0]
  ------------------
 8158|   154k|                                                s.append(",int");
 8159|       |                                            // non-optional lod
 8160|   914k|                                            if (lod) {
  ------------------
  |  Branch (8160:49): [True: 106k, False: 808k]
  ------------------
 8161|   106k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8161:53): [True: 18.6k, False: 87.8k]
  ------------------
 8162|  18.6k|                                                    s.append(",float16_t");
 8163|  87.8k|                                                else
 8164|  87.8k|                                                    s.append(",float");
 8165|   106k|                                            }
 8166|       |
 8167|       |                                            // gradient arguments
 8168|   914k|                                            if (grad) {
  ------------------
  |  Branch (8168:49): [True: 299k, False: 615k]
  ------------------
 8169|   299k|                                                if (dimMap[sampler.dim] == 1) {
  ------------------
  |  Branch (8169:53): [True: 54.0k, False: 245k]
  ------------------
 8170|  54.0k|                                                    if (f16TexAddr)
  ------------------
  |  Branch (8170:57): [True: 12.4k, False: 41.5k]
  ------------------
 8171|  12.4k|                                                        s.append(",float16_t,float16_t");
 8172|  41.5k|                                                    else
 8173|  41.5k|                                                        s.append(",float,float");
 8174|   245k|                                                } else {
 8175|   245k|                                                    if (f16TexAddr)
  ------------------
  |  Branch (8175:57): [True: 47.5k, False: 197k]
  ------------------
 8176|  47.5k|                                                        s.append(",f16vec");
 8177|   197k|                                                    else
 8178|   197k|                                                        s.append(",vec");
 8179|   245k|                                                    s.append(postfixes[dimMap[sampler.dim]]);
 8180|   245k|                                                    if (f16TexAddr)
  ------------------
  |  Branch (8180:57): [True: 47.5k, False: 197k]
  ------------------
 8181|  47.5k|                                                        s.append(",f16vec");
 8182|   197k|                                                    else
 8183|   197k|                                                        s.append(",vec");
 8184|   245k|                                                    s.append(postfixes[dimMap[sampler.dim]]);
 8185|   245k|                                                }
 8186|   299k|                                            }
 8187|       |                                            // offset
 8188|   914k|                                            if (offset) {
  ------------------
  |  Branch (8188:49): [True: 387k, False: 527k]
  ------------------
 8189|   387k|                                                if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (8189:53): [True: 87.8k, False: 299k]
  ------------------
 8190|  87.8k|                                                    s.append(",int");
 8191|   299k|                                                else {
 8192|   299k|                                                    s.append(",ivec");
 8193|   299k|                                                    s.append(postfixes[dimMap[sampler.dim]]);
 8194|   299k|                                                }
 8195|   387k|                                            }
 8196|       |
 8197|       |                                            // lod clamp
 8198|   914k|                                            if (lodClamp) {
  ------------------
  |  Branch (8198:49): [True: 217k, False: 697k]
  ------------------
 8199|   217k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8199:53): [True: 52.3k, False: 165k]
  ------------------
 8200|  52.3k|                                                    s.append(",float16_t");
 8201|   165k|                                                else
 8202|   165k|                                                    s.append(",float");
 8203|   217k|                                            }
 8204|       |                                            // texel out (for sparse texture)
 8205|   914k|                                            if (sparse) {
  ------------------
  |  Branch (8205:49): [True: 237k, False: 676k]
  ------------------
 8206|   237k|                                                s.append(",out ");
 8207|   237k|                                                if (sampler.shadow)
  ------------------
  |  Branch (8207:53): [True: 53.2k, False: 184k]
  ------------------
 8208|  53.2k|                                                    if (sampler.type == EbtFloat16)
  ------------------
  |  Branch (8208:57): [True: 35.5k, False: 17.7k]
  ------------------
 8209|  35.5k|                                                        s.append("float16_t");
 8210|  17.7k|                                                    else
 8211|  17.7k|                                                        s.append("float");
 8212|   184k|                                                else {
 8213|   184k|                                                    s.append(prefixes[sampler.type]);
 8214|   184k|                                                    s.append("vec4");
 8215|   184k|                                                }
 8216|   237k|                                            }
 8217|       |                                            // optional bias
 8218|   914k|                                            if (bias) {
  ------------------
  |  Branch (8218:49): [True: 167k, False: 747k]
  ------------------
 8219|   167k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8219:53): [True: 32.8k, False: 134k]
  ------------------
 8220|  32.8k|                                                    s.append(",float16_t");
 8221|   134k|                                                else
 8222|   134k|                                                    s.append(",float");
 8223|   167k|                                            }
 8224|   914k|                                            s.append(");\n");
 8225|       |
 8226|       |                                            // Add to the per-language set of built-ins
 8227|   914k|                                            if (!grad && (bias || lodClamp != 0)) {
  ------------------
  |  Branch (8227:49): [True: 615k, False: 299k]
  |  Branch (8227:59): [True: 167k, False: 448k]
  |  Branch (8227:67): [True: 79.9k, False: 368k]
  ------------------
 8228|   247k|                                                stageBuiltins[EShLangFragment].append(s);
 8229|   247k|                                                stageBuiltins[EShLangCompute].append(s);
 8230|   247k|                                            } else
 8231|   667k|                                                commonBuiltins.append(s);
 8232|       |
 8233|   914k|                                        }
 8234|   676k|                                    }
 8235|   546k|                                }
 8236|   455k|                            }
 8237|   385k|                        }
 8238|   266k|                    }
 8239|   216k|                }
 8240|   125k|            }
 8241|  90.0k|        }
 8242|  55.9k|    }
 8243|  42.5k|}
_ZN7glslang9TBuiltIns18addGatherFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 8252|  40.1k|{
 8253|  40.1k|    switch (sampler.dim) {
 8254|  16.0k|    case Esd2D:
  ------------------
  |  Branch (8254:5): [True: 16.0k, False: 24.1k]
  ------------------
 8255|  18.7k|    case EsdRect:
  ------------------
  |  Branch (8255:5): [True: 2.72k, False: 37.4k]
  ------------------
 8256|  28.1k|    case EsdCube:
  ------------------
  |  Branch (8256:5): [True: 9.40k, False: 30.7k]
  ------------------
 8257|  28.1k|        break;
 8258|  12.0k|    default:
  ------------------
  |  Branch (8258:5): [True: 12.0k, False: 28.1k]
  ------------------
 8259|  12.0k|        return;
 8260|  40.1k|    }
 8261|       |
 8262|  28.1k|    if (sampler.isMultiSample())
  ------------------
  |  Branch (8262:9): [True: 6.60k, False: 21.5k]
  ------------------
 8263|  6.60k|        return;
 8264|       |
 8265|  21.5k|    if (version < 140 && sampler.dim == EsdRect && sampler.type != EbtFloat)
  ------------------
  |  Branch (8265:9): [True: 0, False: 21.5k]
  |  Branch (8265:26): [True: 0, False: 0]
  |  Branch (8265:52): [True: 0, False: 0]
  ------------------
 8266|      0|        return;
 8267|       |
 8268|  64.5k|    for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
  ------------------
  |  Branch (8268:30): [True: 43.0k, False: 21.5k]
  ------------------
 8269|       |
 8270|  43.0k|        if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (8270:13): [True: 21.5k, False: 21.5k]
  |  Branch (8270:27): [True: 17.0k, False: 4.44k]
  ------------------
 8271|  17.0k|            continue;
 8272|   103k|        for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
  ------------------
  |  Branch (8272:30): [True: 77.8k, False: 25.9k]
  ------------------
 8273|       |
 8274|   233k|            for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
  ------------------
  |  Branch (8274:32): [True: 155k, False: 77.8k]
  ------------------
 8275|       |
 8276|   155k|                if (comp > 0 && sampler.shadow)
  ------------------
  |  Branch (8276:21): [True: 77.8k, False: 77.8k]
  |  Branch (8276:33): [True: 26.1k, False: 51.7k]
  ------------------
 8277|  26.1k|                    continue;
 8278|       |
 8279|   129k|                if (offset > 0 && sampler.dim == EsdCube)
  ------------------
  |  Branch (8279:21): [True: 86.4k, False: 43.2k]
  |  Branch (8279:35): [True: 37.3k, False: 49.0k]
  ------------------
 8280|  37.3k|                    continue;
 8281|       |
 8282|   276k|                for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
  ------------------
  |  Branch (8282:38): [True: 184k, False: 92.3k]
  ------------------
 8283|   184k|                    if (sparse && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (8283:25): [True: 92.3k, False: 92.3k]
  |  Branch (8283:36): [True: 27.6k, False: 64.6k]
  |  Branch (8283:61): [True: 1.15k, False: 63.4k]
  ------------------
 8284|  28.8k|                        continue;
 8285|       |
 8286|   155k|                    TString s;
 8287|       |
 8288|       |                    // return type
 8289|   155k|                    if (sparse)
  ------------------
  |  Branch (8289:25): [True: 63.4k, False: 92.3k]
  ------------------
 8290|  63.4k|                        s.append("int ");
 8291|  92.3k|                    else {
 8292|  92.3k|                        s.append(prefixes[sampler.type]);
 8293|  92.3k|                        s.append("vec4 ");
 8294|  92.3k|                    }
 8295|       |
 8296|       |                    // name
 8297|   155k|                    if (sparse)
  ------------------
  |  Branch (8297:25): [True: 63.4k, False: 92.3k]
  ------------------
 8298|  63.4k|                        s.append("sparseTextureGather");
 8299|  92.3k|                    else
 8300|  92.3k|                        s.append("textureGather");
 8301|   155k|                    switch (offset) {
 8302|  41.8k|                    case 1:
  ------------------
  |  Branch (8302:21): [True: 41.8k, False: 113k]
  ------------------
 8303|  41.8k|                        s.append("Offset");
 8304|  41.8k|                        break;
 8305|  41.8k|                    case 2:
  ------------------
  |  Branch (8305:21): [True: 41.8k, False: 113k]
  ------------------
 8306|  41.8k|                        s.append("Offsets");
 8307|  41.8k|                        break;
 8308|  72.0k|                    default:
  ------------------
  |  Branch (8308:21): [True: 72.0k, False: 83.7k]
  ------------------
 8309|  72.0k|                        break;
 8310|   155k|                    }
 8311|   155k|                    if (sparse)
  ------------------
  |  Branch (8311:25): [True: 63.4k, False: 92.3k]
  ------------------
 8312|  63.4k|                        s.append("ARB");
 8313|   155k|                    s.append("(");
 8314|       |
 8315|       |                    // sampler type argument
 8316|   155k|                    s.append(typeName);
 8317|       |
 8318|       |                    // P coordinate argument
 8319|   155k|                    if (f16TexAddr)
  ------------------
  |  Branch (8319:25): [True: 29.3k, False: 126k]
  ------------------
 8320|  29.3k|                        s.append(",f16vec");
 8321|   126k|                    else
 8322|   126k|                        s.append(",vec");
 8323|   155k|                    int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
  ------------------
  |  Branch (8323:60): [True: 60.4k, False: 95.3k]
  ------------------
 8324|   155k|                    s.append(postfixes[totalDims]);
 8325|       |
 8326|       |                    // refZ argument
 8327|   155k|                    if (sampler.shadow)
  ------------------
  |  Branch (8327:25): [True: 33.4k, False: 122k]
  ------------------
 8328|  33.4k|                        s.append(",float");
 8329|       |
 8330|       |                    // offset argument
 8331|   155k|                    if (offset > 0) {
  ------------------
  |  Branch (8331:25): [True: 83.7k, False: 72.0k]
  ------------------
 8332|  83.7k|                        s.append(",ivec2");
 8333|  83.7k|                        if (offset == 2)
  ------------------
  |  Branch (8333:29): [True: 41.8k, False: 41.8k]
  ------------------
 8334|  41.8k|                            s.append("[4]");
 8335|  83.7k|                    }
 8336|       |
 8337|       |                    // texel out (for sparse texture)
 8338|   155k|                    if (sparse) {
  ------------------
  |  Branch (8338:25): [True: 63.4k, False: 92.3k]
  ------------------
 8339|  63.4k|                        s.append(",out ");
 8340|  63.4k|                        s.append(prefixes[sampler.type]);
 8341|  63.4k|                        s.append("vec4 ");
 8342|  63.4k|                    }
 8343|       |
 8344|       |                    // comp argument
 8345|   155k|                    if (comp)
  ------------------
  |  Branch (8345:25): [True: 61.1k, False: 94.6k]
  ------------------
 8346|  61.1k|                        s.append(",int");
 8347|       |
 8348|   155k|                    s.append(");\n");
 8349|   155k|                    commonBuiltins.append(s);
 8350|   155k|                }
 8351|  92.3k|            }
 8352|  77.8k|        }
 8353|  25.9k|    }
 8354|       |
 8355|  21.5k|    if (sampler.dim == EsdRect || sampler.shadow)
  ------------------
  |  Branch (8355:9): [True: 2.72k, False: 18.8k]
  |  Branch (8355:35): [True: 5.58k, False: 13.2k]
  ------------------
 8356|  8.31k|        return;
 8357|       |
 8358|  13.2k|    if (profile == EEsProfile || version < 450)
  ------------------
  |  Branch (8358:9): [True: 5.92k, False: 7.28k]
  |  Branch (8358:34): [True: 180, False: 7.10k]
  ------------------
 8359|  6.10k|        return;
 8360|       |
 8361|  21.3k|    for (int bias = 0; bias < 2; ++bias) { // loop over presence of bias argument
  ------------------
  |  Branch (8361:24): [True: 14.2k, False: 7.10k]
  ------------------
 8362|       |
 8363|  42.6k|        for (int lod = 0; lod < 2; ++lod) { // loop over presence of lod argument
  ------------------
  |  Branch (8363:27): [True: 28.4k, False: 14.2k]
  ------------------
 8364|       |
 8365|  28.4k|            if ((lod && bias) || (lod == 0 && bias == 0))
  ------------------
  |  Branch (8365:18): [True: 14.2k, False: 14.2k]
  |  Branch (8365:25): [True: 7.10k, False: 7.10k]
  |  Branch (8365:35): [True: 14.2k, False: 7.10k]
  |  Branch (8365:47): [True: 7.10k, False: 7.10k]
  ------------------
 8366|  14.2k|                continue;
 8367|       |
 8368|  42.6k|            for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
  ------------------
  |  Branch (8368:38): [True: 28.4k, False: 14.2k]
  ------------------
 8369|       |
 8370|  28.4k|                if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (8370:21): [True: 14.2k, False: 14.2k]
  |  Branch (8370:35): [True: 10.6k, False: 3.55k]
  ------------------
 8371|  10.6k|                    continue;
 8372|       |
 8373|  71.0k|                for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
  ------------------
  |  Branch (8373:38): [True: 53.2k, False: 17.7k]
  ------------------
 8374|       |
 8375|   159k|                    for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
  ------------------
  |  Branch (8375:40): [True: 106k, False: 53.2k]
  ------------------
 8376|       |
 8377|   106k|                        if (comp == 0 && bias)
  ------------------
  |  Branch (8377:29): [True: 53.2k, False: 53.2k]
  |  Branch (8377:42): [True: 26.6k, False: 26.6k]
  ------------------
 8378|  26.6k|                            continue;
 8379|       |
 8380|  79.9k|                        if (offset > 0 && sampler.dim == EsdCube)
  ------------------
  |  Branch (8380:29): [True: 53.2k, False: 26.6k]
  |  Branch (8380:43): [True: 26.6k, False: 26.6k]
  ------------------
 8381|  26.6k|                            continue;
 8382|       |
 8383|   159k|                        for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
  ------------------
  |  Branch (8383:46): [True: 106k, False: 53.2k]
  ------------------
 8384|   106k|                            if (sparse && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (8384:33): [True: 53.2k, False: 53.2k]
  |  Branch (8384:44): [True: 0, False: 53.2k]
  |  Branch (8384:69): [True: 0, False: 53.2k]
  ------------------
 8385|      0|                                continue;
 8386|       |
 8387|   106k|                            TString s;
 8388|       |
 8389|       |                            // return type
 8390|   106k|                            if (sparse)
  ------------------
  |  Branch (8390:33): [True: 53.2k, False: 53.2k]
  ------------------
 8391|  53.2k|                                s.append("int ");
 8392|  53.2k|                            else {
 8393|  53.2k|                                s.append(prefixes[sampler.type]);
 8394|  53.2k|                                s.append("vec4 ");
 8395|  53.2k|                            }
 8396|       |
 8397|       |                            // name
 8398|   106k|                            if (sparse)
  ------------------
  |  Branch (8398:33): [True: 53.2k, False: 53.2k]
  ------------------
 8399|  53.2k|                                s.append("sparseTextureGather");
 8400|  53.2k|                            else
 8401|  53.2k|                                s.append("textureGather");
 8402|       |
 8403|   106k|                            if (lod)
  ------------------
  |  Branch (8403:33): [True: 71.0k, False: 35.5k]
  ------------------
 8404|  71.0k|                                s.append("Lod");
 8405|       |
 8406|   106k|                            switch (offset) {
 8407|  26.6k|                            case 1:
  ------------------
  |  Branch (8407:29): [True: 26.6k, False: 79.9k]
  ------------------
 8408|  26.6k|                                s.append("Offset");
 8409|  26.6k|                                break;
 8410|  26.6k|                            case 2:
  ------------------
  |  Branch (8410:29): [True: 26.6k, False: 79.9k]
  ------------------
 8411|  26.6k|                                s.append("Offsets");
 8412|  26.6k|                                break;
 8413|  53.2k|                            default:
  ------------------
  |  Branch (8413:29): [True: 53.2k, False: 53.2k]
  ------------------
 8414|  53.2k|                                break;
 8415|   106k|                            }
 8416|       |
 8417|   106k|                            if (lod)
  ------------------
  |  Branch (8417:33): [True: 71.0k, False: 35.5k]
  ------------------
 8418|  71.0k|                                s.append("AMD");
 8419|  35.5k|                            else if (sparse)
  ------------------
  |  Branch (8419:38): [True: 17.7k, False: 17.7k]
  ------------------
 8420|  17.7k|                                s.append("ARB");
 8421|       |
 8422|   106k|                            s.append("(");
 8423|       |
 8424|       |                            // sampler type argument
 8425|   106k|                            s.append(typeName);
 8426|       |
 8427|       |                            // P coordinate argument
 8428|   106k|                            if (f16TexAddr)
  ------------------
  |  Branch (8428:33): [True: 21.3k, False: 85.2k]
  ------------------
 8429|  21.3k|                                s.append(",f16vec");
 8430|  85.2k|                            else
 8431|  85.2k|                                s.append(",vec");
 8432|   106k|                            int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
  ------------------
  |  Branch (8432:68): [True: 53.2k, False: 53.2k]
  ------------------
 8433|   106k|                            s.append(postfixes[totalDims]);
 8434|       |
 8435|       |                            // lod argument
 8436|   106k|                            if (lod) {
  ------------------
  |  Branch (8436:33): [True: 71.0k, False: 35.5k]
  ------------------
 8437|  71.0k|                                if (f16TexAddr)
  ------------------
  |  Branch (8437:37): [True: 14.2k, False: 56.8k]
  ------------------
 8438|  14.2k|                                    s.append(",float16_t");
 8439|  56.8k|                                else
 8440|  56.8k|                                    s.append(",float");
 8441|  71.0k|                            }
 8442|       |
 8443|       |                            // offset argument
 8444|   106k|                            if (offset > 0) {
  ------------------
  |  Branch (8444:33): [True: 53.2k, False: 53.2k]
  ------------------
 8445|  53.2k|                                s.append(",ivec2");
 8446|  53.2k|                                if (offset == 2)
  ------------------
  |  Branch (8446:37): [True: 26.6k, False: 26.6k]
  ------------------
 8447|  26.6k|                                    s.append("[4]");
 8448|  53.2k|                            }
 8449|       |
 8450|       |                            // texel out (for sparse texture)
 8451|   106k|                            if (sparse) {
  ------------------
  |  Branch (8451:33): [True: 53.2k, False: 53.2k]
  ------------------
 8452|  53.2k|                                s.append(",out ");
 8453|  53.2k|                                s.append(prefixes[sampler.type]);
 8454|  53.2k|                                s.append("vec4 ");
 8455|  53.2k|                            }
 8456|       |
 8457|       |                            // comp argument
 8458|   106k|                            if (comp)
  ------------------
  |  Branch (8458:33): [True: 71.0k, False: 35.5k]
  ------------------
 8459|  71.0k|                                s.append(",int");
 8460|       |
 8461|       |                            // bias argument
 8462|   106k|                            if (bias) {
  ------------------
  |  Branch (8462:33): [True: 35.5k, False: 71.0k]
  ------------------
 8463|  35.5k|                                if (f16TexAddr)
  ------------------
  |  Branch (8463:37): [True: 7.10k, False: 28.4k]
  ------------------
 8464|  7.10k|                                    s.append(",float16_t");
 8465|  28.4k|                                else
 8466|  28.4k|                                    s.append(",float");
 8467|  35.5k|                            }
 8468|       |
 8469|   106k|                            s.append(");\n");
 8470|   106k|                            if (bias) {
  ------------------
  |  Branch (8470:33): [True: 35.5k, False: 71.0k]
  ------------------
 8471|  35.5k|                                stageBuiltins[EShLangFragment].append(s);
 8472|  35.5k|                                stageBuiltins[EShLangCompute].append(s);
 8473|  35.5k|                                stageBuiltins[EShLangTask].append(s);
 8474|  35.5k|                                stageBuiltins[EShLangMesh].append(s);
 8475|  35.5k|                            } else
 8476|  71.0k|                                commonBuiltins.append(s);
 8477|   106k|                        }
 8478|  53.2k|                    }
 8479|  53.2k|                }
 8480|  17.7k|            }
 8481|  14.2k|        }
 8482|  14.2k|    }
 8483|  7.10k|}
_ZN7glslang9TBuiltIns22addGatherFunctionsQCOMEv:
 8486|    953|{
 8487|    953|    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint };
 8488|    953|    const TSamplerDim sDims[] = { Esd2D };
 8489|    953|    const TString modes[] = { "4x1", "V2", "H2", "D" };
 8490|  2.85k|    for (size_t arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
  ------------------
  |  Branch (8490:30): [True: 1.90k, False: 953]
  ------------------
 8491|  3.81k|        for (size_t dimIdx = 0; dimIdx < std::size(sDims); ++dimIdx) {
  ------------------
  |  Branch (8491:33): [True: 1.90k, False: 1.90k]
  ------------------
 8492|  1.90k|            int dim = sDims[dimIdx];
 8493|       |            // Loop over the bTypes
 8494|  7.62k|            for (size_t bType = 0; bType < std::size(bTypes); ++bType) {
  ------------------
  |  Branch (8494:36): [True: 5.71k, False: 1.90k]
  ------------------
 8495|  28.5k|                for (size_t mode = 0; mode < std::size(modes); ++mode) {
  ------------------
  |  Branch (8495:39): [True: 22.8k, False: 5.71k]
  ------------------
 8496|       |                    // loop over two forms of offset in the call name:  none, and Offset
 8497|  68.6k|                    for (int offset = 0; offset < 2; ++offset) {
  ------------------
  |  Branch (8497:42): [True: 45.7k, False: 22.8k]
  ------------------
 8498|   137k|                        for (int comp = 0; comp < 2; ++comp) {
  ------------------
  |  Branch (8498:44): [True: 91.4k, False: 45.7k]
  ------------------
 8499|       |                            //
 8500|       |                            // Now, make all the function prototypes for the type we just built...
 8501|       |                            //
 8502|  91.4k|                            TSampler sampler;
 8503|  91.4k|                            sampler.set(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false, false, false);
  ------------------
  |  Branch (8503:74): [True: 45.7k, False: 45.7k]
  ------------------
 8504|  91.4k|                            TString typeName = sampler.getString().c_str();
 8505|       |
 8506|  91.4k|                            TString s;
 8507|  91.4k|                            s.append(prefixes[sampler.type]);
 8508|  91.4k|                            s.append("vec4 textureGather");
 8509|  91.4k|                            s.append(modes[mode]);
 8510|       |
 8511|  91.4k|                            if (offset == 1)
  ------------------
  |  Branch (8511:33): [True: 45.7k, False: 45.7k]
  ------------------
 8512|  45.7k|                                s.append("Offset");
 8513|       |
 8514|  91.4k|                            s.append("QCOM(");
 8515|  91.4k|                            s.append(typeName);
 8516|  91.4k|                            s.append(", vec");
 8517|  91.4k|                            int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
  ------------------
  |  Branch (8517:68): [True: 45.7k, False: 45.7k]
  ------------------
 8518|  91.4k|                            s.append(postfixes[totalDims]);
 8519|       |
 8520|       |                            // offset argument
 8521|  91.4k|                            if (offset == 1)
  ------------------
  |  Branch (8521:33): [True: 45.7k, False: 45.7k]
  ------------------
 8522|  45.7k|                                s.append(", ivec2");
 8523|       |
 8524|  91.4k|                            if (comp)
  ------------------
  |  Branch (8524:33): [True: 45.7k, False: 45.7k]
  ------------------
 8525|  45.7k|                                s.append(", int");
 8526|  91.4k|                            s.append(");\n");
 8527|  91.4k|                            commonBuiltins.append(s);
 8528|  91.4k|                        }
 8529|  45.7k|                    }
 8530|  22.8k|                }
 8531|  5.71k|            }
 8532|  1.90k|        }
 8533|  1.90k|    }
 8534|    953|}
_ZN7glslang9TBuiltIns10initializeERK16TBuiltInResourcei8EProfileRKNS_10SpvVersionE11EShLanguage:
 8544|    913|{
 8545|       |    //
 8546|       |    // Initialize the context-dependent (resource-dependent) built-in strings for parsing.
 8547|       |    //
 8548|       |
 8549|       |    //============================================================================
 8550|       |    //
 8551|       |    // Standard Uniforms
 8552|       |    //
 8553|       |    //============================================================================
 8554|       |
 8555|    913|    TString& s = commonBuiltins;
 8556|    913|    const int maxSize = 200;
 8557|    913|    char builtInConstant[maxSize];
 8558|       |
 8559|       |    //
 8560|       |    // Build string of implementation dependent constants.
 8561|       |    //
 8562|       |
 8563|    913|    if (profile == EEsProfile) {
  ------------------
  |  Branch (8563:9): [True: 514, False: 399]
  ------------------
 8564|    514|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs);
 8565|    514|        s.append(builtInConstant);
 8566|       |
 8567|    514|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexUniformVectors = %d;", resources.maxVertexUniformVectors);
 8568|    514|        s.append(builtInConstant);
 8569|       |
 8570|    514|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits);
 8571|    514|        s.append(builtInConstant);
 8572|       |
 8573|    514|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits);
 8574|    514|        s.append(builtInConstant);
 8575|       |
 8576|    514|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits);
 8577|    514|        s.append(builtInConstant);
 8578|       |
 8579|    514|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors);
 8580|    514|        s.append(builtInConstant);
 8581|       |
 8582|    514|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers);
 8583|    514|        s.append(builtInConstant);
 8584|       |
 8585|    514|        if (version == 100) {
  ------------------
  |  Branch (8585:13): [True: 20, False: 494]
  ------------------
 8586|     20|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVaryingVectors = %d;", resources.maxVaryingVectors);
 8587|     20|            s.append(builtInConstant);
 8588|    494|        } else {
 8589|    494|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexOutputVectors = %d;", resources.maxVertexOutputVectors);
 8590|    494|            s.append(builtInConstant);
 8591|       |
 8592|    494|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxFragmentInputVectors = %d;", resources.maxFragmentInputVectors);
 8593|    494|            s.append(builtInConstant);
 8594|       |
 8595|    494|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MinProgramTexelOffset = %d;", resources.minProgramTexelOffset);
 8596|    494|            s.append(builtInConstant);
 8597|       |
 8598|    494|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxProgramTexelOffset = %d;", resources.maxProgramTexelOffset);
 8599|    494|            s.append(builtInConstant);
 8600|    494|        }
 8601|       |
 8602|    514|        if (version >= 310) {
  ------------------
  |  Branch (8602:13): [True: 494, False: 20]
  ------------------
 8603|       |            // geometry
 8604|       |
 8605|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryInputComponents = %d;", resources.maxGeometryInputComponents);
 8606|    494|            s.append(builtInConstant);
 8607|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputComponents = %d;", resources.maxGeometryOutputComponents);
 8608|    494|            s.append(builtInConstant);
 8609|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryImageUniforms = %d;", resources.maxGeometryImageUniforms);
 8610|    494|            s.append(builtInConstant);
 8611|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTextureImageUnits = %d;", resources.maxGeometryTextureImageUnits);
 8612|    494|            s.append(builtInConstant);
 8613|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputVertices = %d;", resources.maxGeometryOutputVertices);
 8614|    494|            s.append(builtInConstant);
 8615|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTotalOutputComponents = %d;", resources.maxGeometryTotalOutputComponents);
 8616|    494|            s.append(builtInConstant);
 8617|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryUniformComponents = %d;", resources.maxGeometryUniformComponents);
 8618|    494|            s.append(builtInConstant);
 8619|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounters = %d;", resources.maxGeometryAtomicCounters);
 8620|    494|            s.append(builtInConstant);
 8621|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounterBuffers = %d;", resources.maxGeometryAtomicCounterBuffers);
 8622|    494|            s.append(builtInConstant);
 8623|       |
 8624|       |            // tessellation
 8625|       |
 8626|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlInputComponents = %d;", resources.maxTessControlInputComponents);
 8627|    494|            s.append(builtInConstant);
 8628|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlOutputComponents = %d;", resources.maxTessControlOutputComponents);
 8629|    494|            s.append(builtInConstant);
 8630|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTextureImageUnits = %d;", resources.maxTessControlTextureImageUnits);
 8631|    494|            s.append(builtInConstant);
 8632|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlUniformComponents = %d;", resources.maxTessControlUniformComponents);
 8633|    494|            s.append(builtInConstant);
 8634|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTotalOutputComponents = %d;", resources.maxTessControlTotalOutputComponents);
 8635|    494|            s.append(builtInConstant);
 8636|       |
 8637|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationInputComponents = %d;", resources.maxTessEvaluationInputComponents);
 8638|    494|            s.append(builtInConstant);
 8639|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationOutputComponents = %d;", resources.maxTessEvaluationOutputComponents);
 8640|    494|            s.append(builtInConstant);
 8641|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationTextureImageUnits = %d;", resources.maxTessEvaluationTextureImageUnits);
 8642|    494|            s.append(builtInConstant);
 8643|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationUniformComponents = %d;", resources.maxTessEvaluationUniformComponents);
 8644|    494|            s.append(builtInConstant);
 8645|       |
 8646|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessPatchComponents = %d;", resources.maxTessPatchComponents);
 8647|    494|            s.append(builtInConstant);
 8648|       |
 8649|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxPatchVertices = %d;", resources.maxPatchVertices);
 8650|    494|            s.append(builtInConstant);
 8651|    494|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessGenLevel = %d;", resources.maxTessGenLevel);
 8652|    494|            s.append(builtInConstant);
 8653|       |
 8654|       |            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxPatchVertices
 8655|    494|            if (language == EShLangTessControl || language == EShLangTessEvaluation) {
  ------------------
  |  Branch (8655:17): [True: 0, False: 494]
  |  Branch (8655:51): [True: 0, False: 494]
  ------------------
 8656|      0|                s.append(
 8657|      0|                    "in gl_PerVertex {"
 8658|      0|                        "highp vec4 gl_Position;"
 8659|      0|                        "highp float gl_PointSize;"
 8660|      0|                        "highp vec4 gl_SecondaryPositionNV;"  // GL_NV_stereo_view_rendering
 8661|      0|                        "highp vec4 gl_PositionPerViewNV[];"  // GL_NVX_multiview_per_view_attributes
 8662|      0|                    "} gl_in[gl_MaxPatchVertices];"
 8663|      0|                    "\n");
 8664|      0|            }
 8665|    494|        }
 8666|       |
 8667|    514|        if (version >= 320) {
  ------------------
  |  Branch (8667:13): [True: 3, False: 511]
  ------------------
 8668|       |            // tessellation
 8669|       |
 8670|      3|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms);
 8671|      3|            s.append(builtInConstant);
 8672|      3|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms);
 8673|      3|            s.append(builtInConstant);
 8674|      3|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources.maxTessControlAtomicCounters);
 8675|      3|            s.append(builtInConstant);
 8676|      3|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources.maxTessEvaluationAtomicCounters);
 8677|      3|            s.append(builtInConstant);
 8678|      3|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources.maxTessControlAtomicCounterBuffers);
 8679|      3|            s.append(builtInConstant);
 8680|      3|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources.maxTessEvaluationAtomicCounterBuffers);
 8681|      3|            s.append(builtInConstant);
 8682|      3|        }
 8683|       |
 8684|    514|        if (version >= 100) {
  ------------------
  |  Branch (8684:13): [True: 514, False: 0]
  ------------------
 8685|       |            // GL_EXT_blend_func_extended
 8686|    514|            snprintf(builtInConstant, maxSize, "const mediump int gl_MaxDualSourceDrawBuffersEXT = %d;", resources.maxDualSourceDrawBuffersEXT);
 8687|    514|            s.append(builtInConstant);
 8688|       |            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxDualSourceDrawBuffersEXT
 8689|    514|            if (language == EShLangFragment) {
  ------------------
  |  Branch (8689:17): [True: 0, False: 514]
  ------------------
 8690|      0|                s.append(
 8691|      0|                    "mediump vec4 gl_SecondaryFragColorEXT;"
 8692|      0|                    "mediump vec4 gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT];"
 8693|      0|                    "\n");
 8694|      0|            }
 8695|    514|        }
 8696|    514|    } else {
 8697|       |        // non-ES profile
 8698|       |
 8699|    399|        if (version > 400) {
  ------------------
  |  Branch (8699:13): [True: 396, False: 3]
  ------------------
 8700|    396|            snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexUniformVectors = %d;", resources.maxVertexUniformVectors);
 8701|    396|            s.append(builtInConstant);
 8702|       |
 8703|    396|            snprintf(builtInConstant, maxSize, "const int  gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors);
 8704|    396|            s.append(builtInConstant);
 8705|       |
 8706|    396|            snprintf(builtInConstant, maxSize, "const int  gl_MaxVaryingVectors = %d;", resources.maxVaryingVectors);
 8707|    396|            s.append(builtInConstant);
 8708|    396|        }
 8709|       |
 8710|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs);
 8711|    399|        s.append(builtInConstant);
 8712|       |
 8713|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits);
 8714|    399|        s.append(builtInConstant);
 8715|       |
 8716|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits);
 8717|    399|        s.append(builtInConstant);
 8718|       |
 8719|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits);
 8720|    399|        s.append(builtInConstant);
 8721|       |
 8722|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers);
 8723|    399|        s.append(builtInConstant);
 8724|       |
 8725|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxLights = %d;", resources.maxLights);
 8726|    399|        s.append(builtInConstant);
 8727|       |
 8728|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxClipPlanes = %d;", resources.maxClipPlanes);
 8729|    399|        s.append(builtInConstant);
 8730|       |
 8731|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxTextureUnits = %d;", resources.maxTextureUnits);
 8732|    399|        s.append(builtInConstant);
 8733|       |
 8734|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxTextureCoords = %d;", resources.maxTextureCoords);
 8735|    399|        s.append(builtInConstant);
 8736|       |
 8737|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexUniformComponents = %d;", resources.maxVertexUniformComponents);
 8738|    399|        s.append(builtInConstant);
 8739|       |
 8740|       |        // Moved from just being deprecated into compatibility profile only as of 4.20
 8741|    399|        if (version < 420 || profile == ECompatibilityProfile) {
  ------------------
  |  Branch (8741:13): [True: 4, False: 395]
  |  Branch (8741:30): [True: 0, False: 395]
  ------------------
 8742|      4|            snprintf(builtInConstant, maxSize, "const int  gl_MaxVaryingFloats = %d;", resources.maxVaryingFloats);
 8743|      4|            s.append(builtInConstant);
 8744|      4|        }
 8745|       |
 8746|    399|        snprintf(builtInConstant, maxSize, "const int  gl_MaxFragmentUniformComponents = %d;", resources.maxFragmentUniformComponents);
 8747|    399|        s.append(builtInConstant);
 8748|       |
 8749|    399|        if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (8749:13): [True: 2, False: 397]
  |  Branch (8749:36): [True: 0, False: 2]
  ------------------
 8750|       |            //
 8751|       |            // OpenGL'uniform' state.  Page numbers are in reference to version
 8752|       |            // 1.4 of the OpenGL specification.
 8753|       |            //
 8754|       |
 8755|       |            //
 8756|       |            // Matrix state. p. 31, 32, 37, 39, 40.
 8757|       |            //
 8758|      0|            s.append("uniform mat4  gl_TextureMatrix[gl_MaxTextureCoords];"
 8759|       |
 8760|       |            //
 8761|       |            // Derived matrix state that provides inverse and transposed versions
 8762|       |            // of the matrices above.
 8763|       |            //
 8764|      0|                        "uniform mat4  gl_TextureMatrixInverse[gl_MaxTextureCoords];"
 8765|       |
 8766|      0|                        "uniform mat4  gl_TextureMatrixTranspose[gl_MaxTextureCoords];"
 8767|       |
 8768|      0|                        "uniform mat4  gl_TextureMatrixInverseTranspose[gl_MaxTextureCoords];"
 8769|       |
 8770|       |            //
 8771|       |            // Clip planes p. 42.
 8772|       |            //
 8773|      0|                        "uniform vec4  gl_ClipPlane[gl_MaxClipPlanes];"
 8774|       |
 8775|       |            //
 8776|       |            // Light State p 50, 53, 55.
 8777|       |            //
 8778|      0|                        "uniform gl_LightSourceParameters  gl_LightSource[gl_MaxLights];"
 8779|       |
 8780|       |            //
 8781|       |            // Derived state from products of light.
 8782|       |            //
 8783|      0|                        "uniform gl_LightProducts gl_FrontLightProduct[gl_MaxLights];"
 8784|      0|                        "uniform gl_LightProducts gl_BackLightProduct[gl_MaxLights];"
 8785|       |
 8786|       |            //
 8787|       |            // Texture Environment and Generation, p. 152, p. 40-42.
 8788|       |            //
 8789|      0|                        "uniform vec4  gl_TextureEnvColor[gl_MaxTextureImageUnits];"
 8790|      0|                        "uniform vec4  gl_EyePlaneS[gl_MaxTextureCoords];"
 8791|      0|                        "uniform vec4  gl_EyePlaneT[gl_MaxTextureCoords];"
 8792|      0|                        "uniform vec4  gl_EyePlaneR[gl_MaxTextureCoords];"
 8793|      0|                        "uniform vec4  gl_EyePlaneQ[gl_MaxTextureCoords];"
 8794|      0|                        "uniform vec4  gl_ObjectPlaneS[gl_MaxTextureCoords];"
 8795|      0|                        "uniform vec4  gl_ObjectPlaneT[gl_MaxTextureCoords];"
 8796|      0|                        "uniform vec4  gl_ObjectPlaneR[gl_MaxTextureCoords];"
 8797|      0|                        "uniform vec4  gl_ObjectPlaneQ[gl_MaxTextureCoords];");
 8798|      0|        }
 8799|       |
 8800|    399|        if (version >= 130) {
  ------------------
  |  Branch (8800:13): [True: 399, False: 0]
  ------------------
 8801|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxClipDistances = %d;", resources.maxClipDistances);
 8802|    399|            s.append(builtInConstant);
 8803|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxVaryingComponents = %d;", resources.maxVaryingComponents);
 8804|    399|            s.append(builtInConstant);
 8805|       |
 8806|       |            // GL_ARB_shading_language_420pack
 8807|    399|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MinProgramTexelOffset = %d;", resources.minProgramTexelOffset);
 8808|    399|            s.append(builtInConstant);
 8809|    399|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxProgramTexelOffset = %d;", resources.maxProgramTexelOffset);
 8810|    399|            s.append(builtInConstant);
 8811|    399|        }
 8812|       |
 8813|       |        // geometry
 8814|    399|        if (version >= 150) {
  ------------------
  |  Branch (8814:13): [True: 399, False: 0]
  ------------------
 8815|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryInputComponents = %d;", resources.maxGeometryInputComponents);
 8816|    399|            s.append(builtInConstant);
 8817|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputComponents = %d;", resources.maxGeometryOutputComponents);
 8818|    399|            s.append(builtInConstant);
 8819|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTextureImageUnits = %d;", resources.maxGeometryTextureImageUnits);
 8820|    399|            s.append(builtInConstant);
 8821|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputVertices = %d;", resources.maxGeometryOutputVertices);
 8822|    399|            s.append(builtInConstant);
 8823|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTotalOutputComponents = %d;", resources.maxGeometryTotalOutputComponents);
 8824|    399|            s.append(builtInConstant);
 8825|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryUniformComponents = %d;", resources.maxGeometryUniformComponents);
 8826|    399|            s.append(builtInConstant);
 8827|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryVaryingComponents = %d;", resources.maxGeometryVaryingComponents);
 8828|    399|            s.append(builtInConstant);
 8829|       |
 8830|    399|        }
 8831|       |
 8832|    399|        if (version >= 150) {
  ------------------
  |  Branch (8832:13): [True: 399, False: 0]
  ------------------
 8833|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxVertexOutputComponents = %d;", resources.maxVertexOutputComponents);
 8834|    399|            s.append(builtInConstant);
 8835|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentInputComponents = %d;", resources.maxFragmentInputComponents);
 8836|    399|            s.append(builtInConstant);
 8837|    399|        }
 8838|       |
 8839|       |        // tessellation
 8840|    399|        if (version >= 150) {
  ------------------
  |  Branch (8840:13): [True: 399, False: 0]
  ------------------
 8841|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlInputComponents = %d;", resources.maxTessControlInputComponents);
 8842|    399|            s.append(builtInConstant);
 8843|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlOutputComponents = %d;", resources.maxTessControlOutputComponents);
 8844|    399|            s.append(builtInConstant);
 8845|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTextureImageUnits = %d;", resources.maxTessControlTextureImageUnits);
 8846|    399|            s.append(builtInConstant);
 8847|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlUniformComponents = %d;", resources.maxTessControlUniformComponents);
 8848|    399|            s.append(builtInConstant);
 8849|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTotalOutputComponents = %d;", resources.maxTessControlTotalOutputComponents);
 8850|    399|            s.append(builtInConstant);
 8851|       |
 8852|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationInputComponents = %d;", resources.maxTessEvaluationInputComponents);
 8853|    399|            s.append(builtInConstant);
 8854|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationOutputComponents = %d;", resources.maxTessEvaluationOutputComponents);
 8855|    399|            s.append(builtInConstant);
 8856|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationTextureImageUnits = %d;", resources.maxTessEvaluationTextureImageUnits);
 8857|    399|            s.append(builtInConstant);
 8858|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationUniformComponents = %d;", resources.maxTessEvaluationUniformComponents);
 8859|    399|            s.append(builtInConstant);
 8860|       |
 8861|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessPatchComponents = %d;", resources.maxTessPatchComponents);
 8862|    399|            s.append(builtInConstant);
 8863|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessGenLevel = %d;", resources.maxTessGenLevel);
 8864|    399|            s.append(builtInConstant);
 8865|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxPatchVertices = %d;", resources.maxPatchVertices);
 8866|    399|            s.append(builtInConstant);
 8867|       |
 8868|       |            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxPatchVertices
 8869|    399|            if (language == EShLangTessControl || language == EShLangTessEvaluation) {
  ------------------
  |  Branch (8869:17): [True: 0, False: 399]
  |  Branch (8869:51): [True: 0, False: 399]
  ------------------
 8870|      0|                s.append(
 8871|      0|                    "in gl_PerVertex {"
 8872|      0|                        "vec4 gl_Position;"
 8873|      0|                        "float gl_PointSize;"
 8874|      0|                        "float gl_ClipDistance[];"
 8875|      0|                    );
 8876|      0|                if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (8876:21): [True: 0, False: 0]
  ------------------
 8877|      0|                    s.append(
 8878|      0|                        "vec4 gl_ClipVertex;"
 8879|      0|                        "vec4 gl_FrontColor;"
 8880|      0|                        "vec4 gl_BackColor;"
 8881|      0|                        "vec4 gl_FrontSecondaryColor;"
 8882|      0|                        "vec4 gl_BackSecondaryColor;"
 8883|      0|                        "vec4 gl_TexCoord[];"
 8884|      0|                        "float gl_FogFragCoord;"
 8885|      0|                        );
 8886|      0|                if (profile != EEsProfile && version >= 450)
  ------------------
  |  Branch (8886:21): [True: 0, False: 0]
  |  Branch (8886:46): [True: 0, False: 0]
  ------------------
 8887|      0|                    s.append(
 8888|      0|                        "float gl_CullDistance[];"
 8889|      0|                        "vec4 gl_SecondaryPositionNV;"  // GL_NV_stereo_view_rendering
 8890|      0|                        "vec4 gl_PositionPerViewNV[];"  // GL_NVX_multiview_per_view_attributes
 8891|      0|                       );
 8892|      0|                s.append(
 8893|      0|                    "} gl_in[gl_MaxPatchVertices];"
 8894|      0|                    "\n");
 8895|      0|            }
 8896|    399|        }
 8897|       |
 8898|    399|        if (version >= 150) {
  ------------------
  |  Branch (8898:13): [True: 399, False: 0]
  ------------------
 8899|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxViewports = %d;", resources.maxViewports);
 8900|    399|            s.append(builtInConstant);
 8901|    399|        }
 8902|       |
 8903|       |        // images
 8904|    399|        if (version >= 130) {
  ------------------
  |  Branch (8904:13): [True: 399, False: 0]
  ------------------
 8905|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedImageUnitsAndFragmentOutputs = %d;", resources.maxCombinedImageUnitsAndFragmentOutputs);
 8906|    399|            s.append(builtInConstant);
 8907|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxImageSamples = %d;", resources.maxImageSamples);
 8908|    399|            s.append(builtInConstant);
 8909|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms);
 8910|    399|            s.append(builtInConstant);
 8911|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms);
 8912|    399|            s.append(builtInConstant);
 8913|    399|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryImageUniforms = %d;", resources.maxGeometryImageUniforms);
 8914|    399|            s.append(builtInConstant);
 8915|    399|        }
 8916|       |
 8917|       |        // enhanced layouts
 8918|    399|        if (version >= 430) {
  ------------------
  |  Branch (8918:13): [True: 394, False: 5]
  ------------------
 8919|    394|            snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackBuffers = %d;", resources.maxTransformFeedbackBuffers);
 8920|    394|            s.append(builtInConstant);
 8921|    394|            snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackInterleavedComponents = %d;", resources.maxTransformFeedbackInterleavedComponents);
 8922|    394|            s.append(builtInConstant);
 8923|    394|        }
 8924|    399|    }
 8925|       |
 8926|       |    // compute
 8927|    913|    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
  ------------------
  |  Branch (8927:10): [True: 514, False: 399]
  |  Branch (8927:35): [True: 494, False: 20]
  |  Branch (8927:55): [True: 399, False: 20]
  |  Branch (8927:80): [True: 395, False: 4]
  ------------------
 8928|    889|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX,
 8929|    889|                                                                                                         resources.maxComputeWorkGroupCountY,
 8930|    889|                                                                                                         resources.maxComputeWorkGroupCountZ);
 8931|    889|        s.append(builtInConstant);
 8932|    889|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupSize = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupSizeX,
 8933|    889|                                                                                                        resources.maxComputeWorkGroupSizeY,
 8934|    889|                                                                                                        resources.maxComputeWorkGroupSizeZ);
 8935|    889|        s.append(builtInConstant);
 8936|       |
 8937|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeUniformComponents = %d;", resources.maxComputeUniformComponents);
 8938|    889|        s.append(builtInConstant);
 8939|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeTextureImageUnits = %d;", resources.maxComputeTextureImageUnits);
 8940|    889|        s.append(builtInConstant);
 8941|       |
 8942|       |        // GL_ARM_tensors operands.
 8943|    889|        snprintf(builtInConstant, maxSize, "const uint gl_TensorOperandsNonTemporalARM = 0x1U;");
 8944|    889|        s.append(builtInConstant);
 8945|    889|        snprintf(builtInConstant, maxSize, "const uint gl_TensorOperandsOutOfBoundsValueARM = 0x2U;");
 8946|    889|        s.append(builtInConstant);
 8947|       |
 8948|    889|        s.append("\n");
 8949|    889|    }
 8950|       |
 8951|       |    // images (some in compute below)
 8952|    913|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (8952:10): [True: 514, False: 399]
  |  Branch (8952:35): [True: 494, False: 20]
  ------------------
 8953|    893|        (profile != EEsProfile && version >= 130)) {
  ------------------
  |  Branch (8953:10): [True: 399, False: 20]
  |  Branch (8953:35): [True: 399, False: 0]
  ------------------
 8954|    893|        snprintf(builtInConstant, maxSize, "const int gl_MaxImageUnits = %d;", resources.maxImageUnits);
 8955|    893|        s.append(builtInConstant);
 8956|    893|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedShaderOutputResources = %d;", resources.maxCombinedShaderOutputResources);
 8957|    893|        s.append(builtInConstant);
 8958|    893|        snprintf(builtInConstant, maxSize, "const int gl_MaxVertexImageUniforms = %d;", resources.maxVertexImageUniforms);
 8959|    893|        s.append(builtInConstant);
 8960|    893|        snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentImageUniforms = %d;", resources.maxFragmentImageUniforms);
 8961|    893|        s.append(builtInConstant);
 8962|    893|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedImageUniforms = %d;", resources.maxCombinedImageUniforms);
 8963|    893|        s.append(builtInConstant);
 8964|    893|    }
 8965|       |
 8966|       |    // compute
 8967|    913|    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
  ------------------
  |  Branch (8967:10): [True: 514, False: 399]
  |  Branch (8967:35): [True: 494, False: 20]
  |  Branch (8967:55): [True: 399, False: 20]
  |  Branch (8967:80): [True: 395, False: 4]
  ------------------
 8968|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeImageUniforms = %d;", resources.maxComputeImageUniforms);
 8969|    889|        s.append(builtInConstant);
 8970|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounters = %d;", resources.maxComputeAtomicCounters);
 8971|    889|        s.append(builtInConstant);
 8972|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounterBuffers = %d;", resources.maxComputeAtomicCounterBuffers);
 8973|    889|        s.append(builtInConstant);
 8974|       |
 8975|    889|        s.append("\n");
 8976|    889|    }
 8977|       |
 8978|       |    // atomic counters (some in compute below)
 8979|    913|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (8979:10): [True: 514, False: 399]
  |  Branch (8979:35): [True: 494, False: 20]
  ------------------
 8980|    889|        (profile != EEsProfile && version >= 420)) {
  ------------------
  |  Branch (8980:10): [True: 399, False: 20]
  |  Branch (8980:35): [True: 395, False: 4]
  ------------------
 8981|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAtomicCounters = %d;", resources.               maxVertexAtomicCounters);
 8982|    889|        s.append(builtInConstant);
 8983|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentAtomicCounters = %d;", resources.             maxFragmentAtomicCounters);
 8984|    889|        s.append(builtInConstant);
 8985|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedAtomicCounters = %d;", resources.             maxCombinedAtomicCounters);
 8986|    889|        s.append(builtInConstant);
 8987|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxAtomicCounterBindings = %d;", resources.              maxAtomicCounterBindings);
 8988|    889|        s.append(builtInConstant);
 8989|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAtomicCounterBuffers = %d;", resources.         maxVertexAtomicCounterBuffers);
 8990|    889|        s.append(builtInConstant);
 8991|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentAtomicCounterBuffers = %d;", resources.       maxFragmentAtomicCounterBuffers);
 8992|    889|        s.append(builtInConstant);
 8993|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedAtomicCounterBuffers = %d;", resources.       maxCombinedAtomicCounterBuffers);
 8994|    889|        s.append(builtInConstant);
 8995|    889|        snprintf(builtInConstant, maxSize, "const int gl_MaxAtomicCounterBufferSize = %d;", resources.            maxAtomicCounterBufferSize);
 8996|    889|        s.append(builtInConstant);
 8997|    889|    }
 8998|    913|    if (profile != EEsProfile && version >= 420) {
  ------------------
  |  Branch (8998:9): [True: 399, False: 514]
  |  Branch (8998:34): [True: 395, False: 4]
  ------------------
 8999|    395|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources.          maxTessControlAtomicCounters);
 9000|    395|        s.append(builtInConstant);
 9001|    395|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources.       maxTessEvaluationAtomicCounters);
 9002|    395|        s.append(builtInConstant);
 9003|    395|        snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounters = %d;", resources.             maxGeometryAtomicCounters);
 9004|    395|        s.append(builtInConstant);
 9005|    395|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources.    maxTessControlAtomicCounterBuffers);
 9006|    395|        s.append(builtInConstant);
 9007|    395|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources. maxTessEvaluationAtomicCounterBuffers);
 9008|    395|        s.append(builtInConstant);
 9009|    395|        snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounterBuffers = %d;", resources.       maxGeometryAtomicCounterBuffers);
 9010|    395|        s.append(builtInConstant);
 9011|       |
 9012|    395|        s.append("\n");
 9013|    395|    }
 9014|       |
 9015|       |    // GL_ARB_cull_distance
 9016|    913|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (9016:9): [True: 399, False: 514]
  |  Branch (9016:34): [True: 391, False: 8]
  ------------------
 9017|    391|        snprintf(builtInConstant, maxSize, "const int gl_MaxCullDistances = %d;",                resources.maxCullDistances);
 9018|    391|        s.append(builtInConstant);
 9019|    391|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedClipAndCullDistances = %d;", resources.maxCombinedClipAndCullDistances);
 9020|    391|        s.append(builtInConstant);
 9021|    391|    }
 9022|       |
 9023|       |    // GL_ARB_ES3_1_compatibility
 9024|    913|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (9024:10): [True: 399, False: 514]
  |  Branch (9024:35): [True: 391, False: 8]
  ------------------
 9025|    885|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (9025:10): [True: 514, False: 8]
  |  Branch (9025:35): [True: 494, False: 20]
  ------------------
 9026|    885|        snprintf(builtInConstant, maxSize, "const int gl_MaxSamples = %d;", resources.maxSamples);
 9027|    885|        s.append(builtInConstant);
 9028|    885|    }
 9029|       |
 9030|       |    // SPV_NV_mesh_shader
 9031|    913|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (9031:10): [True: 399, False: 514]
  |  Branch (9031:35): [True: 391, False: 8]
  |  Branch (9031:55): [True: 514, False: 8]
  |  Branch (9031:80): [True: 3, False: 511]
  ------------------
 9032|    394|        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
 9033|    394|        s.append(builtInConstant);
 9034|       |
 9035|    394|        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputPrimitivesNV = %d;", resources.maxMeshOutputPrimitivesNV);
 9036|    394|        s.append(builtInConstant);
 9037|       |
 9038|    394|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxMeshWorkGroupSizeNV = ivec3(%d,%d,%d);", resources.maxMeshWorkGroupSizeX_NV,
 9039|    394|                                                                                                       resources.maxMeshWorkGroupSizeY_NV,
 9040|    394|                                                                                                       resources.maxMeshWorkGroupSizeZ_NV);
 9041|    394|        s.append(builtInConstant);
 9042|    394|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxTaskWorkGroupSizeNV = ivec3(%d,%d,%d);", resources.maxTaskWorkGroupSizeX_NV,
 9043|    394|                                                                                                       resources.maxTaskWorkGroupSizeY_NV,
 9044|    394|                                                                                                       resources.maxTaskWorkGroupSizeZ_NV);
 9045|    394|        s.append(builtInConstant);
 9046|       |
 9047|    394|        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshViewCountNV = %d;", resources.maxMeshViewCountNV);
 9048|    394|        s.append(builtInConstant);
 9049|       |
 9050|    394|        s.append("\n");
 9051|    394|    }
 9052|       |
 9053|    913|    s.append("\n");
 9054|    913|}
_ZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableE:
 9153|  9.39k|{
 9154|       |    //
 9155|       |    // Tag built-in variables and functions with additional qualifier and extension information
 9156|       |    // that cannot be declared with the text strings.
 9157|       |    //
 9158|       |
 9159|       |    // N.B.: a symbol should only be tagged once, and this function is called multiple times, once
 9160|       |    // per stage that's used for this profile.  So
 9161|       |    //  - generally, stick common ones in the fragment stage to ensure they are tagged exactly once
 9162|       |    //  - for ES, which has different precisions for different stages, the coarsest-grained tagging
 9163|       |    //    for a built-in used in many stages needs to be once for the fragment stage and once for
 9164|       |    //    the vertex stage
 9165|       |
 9166|  9.39k|    switch(language) {
 9167|  1.11k|    case EShLangVertex:
  ------------------
  |  Branch (9167:5): [True: 1.11k, False: 8.27k]
  ------------------
 9168|  1.11k|        if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (9168:13): [True: 193, False: 920]
  ------------------
 9169|    193|            BuiltInVariable("gl_VertexIndex",   EbvVertexIndex,   symbolTable);
 9170|    193|            BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
 9171|    193|        }
 9172|       |
 9173|  1.11k|        if (spvVersion.vulkan == 0) {
  ------------------
  |  Branch (9173:13): [True: 920, False: 193]
  ------------------
 9174|    920|            SpecialQualifier("gl_VertexID",   EvqVertexId,   EbvVertexId,   symbolTable);
 9175|    920|            SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
 9176|    920|            if (version < 140)
  ------------------
  |  Branch (9176:17): [True: 20, False: 900]
  ------------------
 9177|     20|                symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_EXT_draw_instanced);
 9178|    920|        }
 9179|       |
 9180|  1.11k|        if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (9180:13): [True: 193, False: 920]
  |  Branch (9180:38): [True: 0, False: 193]
  ------------------
 9181|       |            // treat these built-ins as aliases of VertexIndex and InstanceIndex
 9182|      0|            RetargetVariable("gl_InstanceID", "gl_InstanceIndex", symbolTable);
 9183|      0|            RetargetVariable("gl_VertexID", "gl_VertexIndex", symbolTable);
 9184|      0|        }
 9185|       |
 9186|  1.11k|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9186:13): [True: 459, False: 654]
  ------------------
 9187|    459|            if (version >= 440) {
  ------------------
  |  Branch (9187:17): [True: 446, False: 13]
  ------------------
 9188|    446|                symbolTable.setVariableExtensions("gl_BaseVertexARB",   1, &E_GL_ARB_shader_draw_parameters);
 9189|    446|                symbolTable.setVariableExtensions("gl_BaseInstanceARB", 1, &E_GL_ARB_shader_draw_parameters);
 9190|    446|                symbolTable.setVariableExtensions("gl_DrawIDARB",       1, &E_GL_ARB_shader_draw_parameters);
 9191|    446|                BuiltInVariable("gl_BaseVertexARB",   EbvBaseVertex,   symbolTable);
 9192|    446|                BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable);
 9193|    446|                BuiltInVariable("gl_DrawIDARB",       EbvDrawId,       symbolTable);
 9194|    446|            }
 9195|    459|            if (version >= 460) {
  ------------------
  |  Branch (9195:17): [True: 1, False: 458]
  ------------------
 9196|      1|                BuiltInVariable("gl_BaseVertex",   EbvBaseVertex,   symbolTable);
 9197|      1|                BuiltInVariable("gl_BaseInstance", EbvBaseInstance, symbolTable);
 9198|      1|                BuiltInVariable("gl_DrawID",       EbvDrawId,       symbolTable);
 9199|      1|            }
 9200|    459|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
 9201|    459|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
 9202|    459|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
 9203|    459|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9204|    459|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9205|    459|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9206|    459|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9207|       |
 9208|    459|            symbolTable.setFunctionExtensions("ballotARB",              1, &E_GL_ARB_shader_ballot);
 9209|    459|            symbolTable.setFunctionExtensions("readInvocationARB",      1, &E_GL_ARB_shader_ballot);
 9210|    459|            symbolTable.setFunctionExtensions("readFirstInvocationARB", 1, &E_GL_ARB_shader_ballot);
 9211|       |
 9212|    459|            if (version >= 430) {
  ------------------
  |  Branch (9212:17): [True: 447, False: 12]
  ------------------
 9213|    447|                symbolTable.setFunctionExtensions("anyInvocationARB",       1, &E_GL_ARB_shader_group_vote);
 9214|    447|                symbolTable.setFunctionExtensions("allInvocationsARB",      1, &E_GL_ARB_shader_group_vote);
 9215|    447|                symbolTable.setFunctionExtensions("allInvocationsEqualARB", 1, &E_GL_ARB_shader_group_vote);
 9216|    447|            }
 9217|    459|            if (version >= 150) {
  ------------------
  |  Branch (9217:17): [True: 459, False: 0]
  ------------------
 9218|    459|                symbolTable.setFunctionExtensions("anyThreadNV",       1, &E_GL_NV_gpu_shader5);
 9219|    459|                symbolTable.setFunctionExtensions("allThreadsNV",      1, &E_GL_NV_gpu_shader5);
 9220|    459|                symbolTable.setFunctionExtensions("allThreadsEqualNV", 1, &E_GL_NV_gpu_shader5);
 9221|    459|            }
 9222|    459|        }
 9223|       |
 9224|       |
 9225|  1.11k|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9225:13): [True: 459, False: 654]
  ------------------
 9226|    459|            symbolTable.setFunctionExtensions("minInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
 9227|    459|            symbolTable.setFunctionExtensions("maxInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
 9228|    459|            symbolTable.setFunctionExtensions("addInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
 9229|    459|            symbolTable.setFunctionExtensions("minInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
 9230|    459|            symbolTable.setFunctionExtensions("maxInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
 9231|    459|            symbolTable.setFunctionExtensions("addInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
 9232|    459|            symbolTable.setFunctionExtensions("swizzleInvocationsAMD",            1, &E_GL_AMD_shader_ballot);
 9233|    459|            symbolTable.setFunctionExtensions("swizzleInvocationsWithPatternAMD", 1, &E_GL_AMD_shader_ballot);
 9234|    459|            symbolTable.setFunctionExtensions("writeInvocationAMD",               1, &E_GL_AMD_shader_ballot);
 9235|    459|            symbolTable.setFunctionExtensions("mbcntAMD",                         1, &E_GL_AMD_shader_ballot);
 9236|       |
 9237|    459|            symbolTable.setFunctionExtensions("minInvocationsInclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9238|    459|            symbolTable.setFunctionExtensions("maxInvocationsInclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9239|    459|            symbolTable.setFunctionExtensions("addInvocationsInclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9240|    459|            symbolTable.setFunctionExtensions("minInvocationsInclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9241|    459|            symbolTable.setFunctionExtensions("maxInvocationsInclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9242|    459|            symbolTable.setFunctionExtensions("addInvocationsInclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9243|    459|            symbolTable.setFunctionExtensions("minInvocationsExclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9244|    459|            symbolTable.setFunctionExtensions("maxInvocationsExclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9245|    459|            symbolTable.setFunctionExtensions("addInvocationsExclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9246|    459|            symbolTable.setFunctionExtensions("minInvocationsExclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9247|    459|            symbolTable.setFunctionExtensions("maxInvocationsExclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9248|    459|            symbolTable.setFunctionExtensions("addInvocationsExclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9249|    459|        }
 9250|       |
 9251|  1.11k|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9251:13): [True: 459, False: 654]
  ------------------
 9252|    459|            symbolTable.setFunctionExtensions("min3", 1, &E_GL_AMD_shader_trinary_minmax);
 9253|    459|            symbolTable.setFunctionExtensions("max3", 1, &E_GL_AMD_shader_trinary_minmax);
 9254|    459|            symbolTable.setFunctionExtensions("mid3", 1, &E_GL_AMD_shader_trinary_minmax);
 9255|    459|        }
 9256|       |
 9257|  1.11k|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9257:13): [True: 459, False: 654]
  ------------------
 9258|    459|            symbolTable.setVariableExtensions("gl_SIMDGroupSizeAMD", 1, &E_GL_AMD_gcn_shader);
 9259|    459|            SpecialQualifier("gl_SIMDGroupSizeAMD", EvqVaryingIn, EbvSubGroupSize, symbolTable);
 9260|       |
 9261|    459|            symbolTable.setFunctionExtensions("cubeFaceIndexAMD", 1, &E_GL_AMD_gcn_shader);
 9262|    459|            symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader);
 9263|    459|            symbolTable.setFunctionExtensions("timeAMD",          1, &E_GL_AMD_gcn_shader);
 9264|    459|        }
 9265|       |
 9266|  1.11k|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9266:13): [True: 459, False: 654]
  ------------------
 9267|    459|            symbolTable.setFunctionExtensions("fragmentMaskFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
 9268|    459|            symbolTable.setFunctionExtensions("fragmentFetchAMD",     1, &E_GL_AMD_shader_fragment_mask);
 9269|    459|        }
 9270|       |
 9271|  1.11k|        symbolTable.setFunctionExtensions("countLeadingZeros",  1, &E_GL_INTEL_shader_integer_functions2);
 9272|  1.11k|        symbolTable.setFunctionExtensions("countTrailingZeros", 1, &E_GL_INTEL_shader_integer_functions2);
 9273|  1.11k|        symbolTable.setFunctionExtensions("absoluteDifference", 1, &E_GL_INTEL_shader_integer_functions2);
 9274|  1.11k|        symbolTable.setFunctionExtensions("addSaturate",        1, &E_GL_INTEL_shader_integer_functions2);
 9275|  1.11k|        symbolTable.setFunctionExtensions("subtractSaturate",   1, &E_GL_INTEL_shader_integer_functions2);
 9276|  1.11k|        symbolTable.setFunctionExtensions("average",            1, &E_GL_INTEL_shader_integer_functions2);
 9277|  1.11k|        symbolTable.setFunctionExtensions("averageRounded",     1, &E_GL_INTEL_shader_integer_functions2);
 9278|  1.11k|        symbolTable.setFunctionExtensions("multiply32x16",      1, &E_GL_INTEL_shader_integer_functions2);
 9279|       |
 9280|  1.11k|        symbolTable.setFunctionExtensions("textureFootprintNV",          1, &E_GL_NV_shader_texture_footprint);
 9281|  1.11k|        symbolTable.setFunctionExtensions("textureFootprintClampNV",     1, &E_GL_NV_shader_texture_footprint);
 9282|  1.11k|        symbolTable.setFunctionExtensions("textureFootprintLodNV",       1, &E_GL_NV_shader_texture_footprint);
 9283|  1.11k|        symbolTable.setFunctionExtensions("textureFootprintGradNV",      1, &E_GL_NV_shader_texture_footprint);
 9284|  1.11k|        symbolTable.setFunctionExtensions("textureFootprintGradClampNV", 1, &E_GL_NV_shader_texture_footprint);
 9285|       |        // Compatibility variables, vertex only
 9286|  1.11k|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9286:13): [True: 215, False: 898]
  ------------------
 9287|    215|            BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
 9288|    215|            BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable);
 9289|    215|            BuiltInVariable("gl_Normal",         EbvNormal,         symbolTable);
 9290|    215|            BuiltInVariable("gl_Vertex",         EbvVertex,         symbolTable);
 9291|    215|            BuiltInVariable("gl_MultiTexCoord0", EbvMultiTexCoord0, symbolTable);
 9292|    215|            BuiltInVariable("gl_MultiTexCoord1", EbvMultiTexCoord1, symbolTable);
 9293|    215|            BuiltInVariable("gl_MultiTexCoord2", EbvMultiTexCoord2, symbolTable);
 9294|    215|            BuiltInVariable("gl_MultiTexCoord3", EbvMultiTexCoord3, symbolTable);
 9295|    215|            BuiltInVariable("gl_MultiTexCoord4", EbvMultiTexCoord4, symbolTable);
 9296|    215|            BuiltInVariable("gl_MultiTexCoord5", EbvMultiTexCoord5, symbolTable);
 9297|    215|            BuiltInVariable("gl_MultiTexCoord6", EbvMultiTexCoord6, symbolTable);
 9298|    215|            BuiltInVariable("gl_MultiTexCoord7", EbvMultiTexCoord7, symbolTable);
 9299|    215|            BuiltInVariable("gl_FogCoord",       EbvFogFragCoord,   symbolTable);
 9300|    215|        }
 9301|       |
 9302|  1.11k|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9302:13): [True: 654, False: 459]
  ------------------
 9303|    654|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9303:17): [True: 160, False: 494]
  ------------------
 9304|    160|                symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
 9305|    160|                symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
 9306|    160|                symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
 9307|    160|                if (version == 310)
  ------------------
  |  Branch (9307:21): [True: 0, False: 160]
  ------------------
 9308|      0|                    symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9309|    160|            }
 9310|    654|            if (version == 310) {
  ------------------
  |  Branch (9310:17): [True: 491, False: 163]
  ------------------
 9311|    491|                symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9312|    491|            } else if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (9312:24): [True: 0, False: 163]
  |  Branch (9312:49): [True: 0, False: 0]
  ------------------
 9313|      0|                symbolTable.setFunctionExtensions("fma", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9314|      0|            }
 9315|    654|        }
 9316|       |
 9317|  1.11k|        if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9317:13): [True: 654, False: 459]
  |  Branch (9317:38): [True: 651, False: 3]
  ------------------
 9318|    651|            symbolTable.setFunctionExtensions("imageAtomicAdd",      1, &E_GL_OES_shader_image_atomic);
 9319|    651|            symbolTable.setFunctionExtensions("imageAtomicMin",      1, &E_GL_OES_shader_image_atomic);
 9320|    651|            symbolTable.setFunctionExtensions("imageAtomicMax",      1, &E_GL_OES_shader_image_atomic);
 9321|    651|            symbolTable.setFunctionExtensions("imageAtomicAnd",      1, &E_GL_OES_shader_image_atomic);
 9322|    651|            symbolTable.setFunctionExtensions("imageAtomicOr",       1, &E_GL_OES_shader_image_atomic);
 9323|    651|            symbolTable.setFunctionExtensions("imageAtomicXor",      1, &E_GL_OES_shader_image_atomic);
 9324|    651|            symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic);
 9325|    651|            symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
 9326|    651|        }
 9327|       |
 9328|  1.11k|        if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (9328:13): [True: 953, False: 160]
  ------------------
 9329|    953|            symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
 9330|    953|            BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
 9331|    953|        }
 9332|       |
 9333|  1.11k|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9333:13): [True: 654, False: 459]
  ------------------
 9334|    654|            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
 9335|    654|            symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
 9336|    654|        }
 9337|       |
 9338|       |        // E_GL_EXT_texture_array
 9339|  1.11k|        if (profile != EEsProfile && spvVersion.spv == 0) {
  ------------------
  |  Branch (9339:13): [True: 459, False: 654]
  |  Branch (9339:38): [True: 55, False: 404]
  ------------------
 9340|     55|            symbolTable.setFunctionExtensions("texture1DArray", 1, &E_GL_EXT_texture_array);
 9341|     55|            symbolTable.setFunctionExtensions("texture2DArray", 1, &E_GL_EXT_texture_array);
 9342|     55|            symbolTable.setFunctionExtensions("shadow1DArray", 1, &E_GL_EXT_texture_array);
 9343|     55|            symbolTable.setFunctionExtensions("shadow2DArray", 1, &E_GL_EXT_texture_array);
 9344|       |
 9345|     55|            symbolTable.setFunctionExtensions("texture1DArrayLod", 1, &E_GL_EXT_texture_array);
 9346|     55|            symbolTable.setFunctionExtensions("texture2DArrayLod", 1, &E_GL_EXT_texture_array);
 9347|     55|            symbolTable.setFunctionExtensions("shadow1DArrayLod", 1, &E_GL_EXT_texture_array);
 9348|     55|        }
 9349|  1.11k|        [[fallthrough]];
 9350|       |
 9351|  2.06k|    case EShLangTessControl:
  ------------------
  |  Branch (9351:5): [True: 953, False: 8.43k]
  ------------------
 9352|  2.06k|        if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (9352:13): [True: 1.14k, False: 918]
  |  Branch (9352:38): [True: 988, False: 160]
  ------------------
 9353|    988|            BuiltInVariable("gl_BoundingBoxEXT", EbvBoundingBox, symbolTable);
 9354|    988|            symbolTable.setVariableExtensions("gl_BoundingBoxEXT", 1,
 9355|    988|                                              &E_GL_EXT_primitive_bounding_box);
 9356|    988|            BuiltInVariable("gl_BoundingBoxOES", EbvBoundingBox, symbolTable);
 9357|    988|            symbolTable.setVariableExtensions("gl_BoundingBoxOES", 1,
 9358|    988|                                              &E_GL_OES_primitive_bounding_box);
 9359|       |
 9360|    988|            if (version >= 320) {
  ------------------
  |  Branch (9360:17): [True: 6, False: 982]
  ------------------
 9361|      6|                BuiltInVariable("gl_BoundingBox", EbvBoundingBox, symbolTable);
 9362|      6|            }
 9363|    988|        }
 9364|  2.06k|        [[fallthrough]];
 9365|       |
 9366|  3.01k|    case EShLangTessEvaluation:
  ------------------
  |  Branch (9366:5): [True: 953, False: 8.43k]
  ------------------
 9367|  3.97k|    case EShLangGeometry:
  ------------------
  |  Branch (9367:5): [True: 953, False: 8.43k]
  ------------------
 9368|  3.97k|        SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
 9369|  3.97k|        SpecialQualifier("gl_PointSize",  EvqPointSize,  EbvPointSize,  symbolTable);
 9370|       |
 9371|  3.97k|        BuiltInVariable("gl_in",  "gl_Position",     EbvPosition,     symbolTable);
 9372|  3.97k|        BuiltInVariable("gl_in",  "gl_PointSize",    EbvPointSize,    symbolTable);
 9373|       |
 9374|  3.97k|        BuiltInVariable("gl_out", "gl_Position",     EbvPosition,     symbolTable);
 9375|  3.97k|        BuiltInVariable("gl_out", "gl_PointSize",    EbvPointSize,    symbolTable);
 9376|       |
 9377|  3.97k|        SpecialQualifier("gl_ClipVertex", EvqClipVertex, EbvClipVertex, symbolTable);
 9378|       |
 9379|  3.97k|        BuiltInVariable("gl_in",  "gl_ClipDistance", EbvClipDistance, symbolTable);
 9380|  3.97k|        BuiltInVariable("gl_in",  "gl_CullDistance", EbvCullDistance, symbolTable);
 9381|       |
 9382|  3.97k|        BuiltInVariable("gl_out", "gl_ClipDistance", EbvClipDistance, symbolTable);
 9383|  3.97k|        BuiltInVariable("gl_out", "gl_CullDistance", EbvCullDistance, symbolTable);
 9384|       |
 9385|  3.97k|        BuiltInVariable("gl_ClipDistance",    EbvClipDistance,   symbolTable);
 9386|  3.97k|        BuiltInVariable("gl_CullDistance",    EbvCullDistance,   symbolTable);
 9387|  3.97k|        BuiltInVariable("gl_PrimitiveIDIn",   EbvPrimitiveId,    symbolTable);
 9388|  3.97k|        BuiltInVariable("gl_PrimitiveID",     EbvPrimitiveId,    symbolTable);
 9389|  3.97k|        BuiltInVariable("gl_InvocationID",    EbvInvocationId,   symbolTable);
 9390|  3.97k|        BuiltInVariable("gl_Layer",           EbvLayer,          symbolTable);
 9391|  3.97k|        BuiltInVariable("gl_ViewportIndex",   EbvViewportIndex,  symbolTable);
 9392|       |
 9393|  3.97k|        if (language != EShLangGeometry) {
  ------------------
  |  Branch (9393:13): [True: 3.01k, False: 953]
  ------------------
 9394|  3.01k|            symbolTable.setVariableExtensions("gl_Layer",         Num_viewportEXTs, viewportEXTs);
 9395|  3.01k|            symbolTable.setVariableExtensions("gl_ViewportIndex", Num_viewportEXTs, viewportEXTs);
 9396|  3.01k|        }
 9397|  3.97k|        symbolTable.setVariableExtensions("gl_ViewportMask",            1, &E_GL_NV_viewport_array2);
 9398|  3.97k|        symbolTable.setVariableExtensions("gl_SecondaryPositionNV",     1, &E_GL_NV_stereo_view_rendering);
 9399|  3.97k|        symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
 9400|  3.97k|        symbolTable.setVariableExtensions("gl_PositionPerViewNV",       1, &E_GL_NVX_multiview_per_view_attributes);
 9401|  3.97k|        symbolTable.setVariableExtensions("gl_ViewportMaskPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
 9402|       |
 9403|  3.97k|        if (profile != EEsProfile && language == EShLangGeometry && version < 400) {
  ------------------
  |  Branch (9403:13): [True: 1.83k, False: 2.13k]
  |  Branch (9403:38): [True: 459, False: 1.37k]
  |  Branch (9403:69): [True: 9, False: 450]
  ------------------
 9404|      9|            symbolTable.setVariableExtensions("gl_InvocationID", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9405|      9|        }
 9406|  3.97k|        BuiltInVariable("gl_ViewportMask",              EbvViewportMaskNV,          symbolTable);
 9407|  3.97k|        BuiltInVariable("gl_SecondaryPositionNV",       EbvSecondaryPositionNV,     symbolTable);
 9408|  3.97k|        BuiltInVariable("gl_SecondaryViewportMaskNV",   EbvSecondaryViewportMaskNV, symbolTable);
 9409|  3.97k|        BuiltInVariable("gl_PositionPerViewNV",         EbvPositionPerViewNV,       symbolTable);
 9410|  3.97k|        BuiltInVariable("gl_ViewportMaskPerViewNV",     EbvViewportMaskPerViewNV,   symbolTable);
 9411|       |
 9412|  3.97k|        if (language == EShLangVertex || language == EShLangGeometry) {
  ------------------
  |  Branch (9412:13): [True: 1.11k, False: 2.85k]
  |  Branch (9412:42): [True: 953, False: 1.90k]
  ------------------
 9413|  2.06k|            symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
 9414|  2.06k|            symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
 9415|       |
 9416|  2.06k|            BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
 9417|  2.06k|            BuiltInVariable("gl_in", "gl_PositionPerViewNV",   EbvPositionPerViewNV,   symbolTable);
 9418|  2.06k|        }
 9419|  3.97k|        symbolTable.setVariableExtensions("gl_out", "gl_ViewportMask",            1, &E_GL_NV_viewport_array2);
 9420|  3.97k|        symbolTable.setVariableExtensions("gl_out", "gl_SecondaryPositionNV",     1, &E_GL_NV_stereo_view_rendering);
 9421|  3.97k|        symbolTable.setVariableExtensions("gl_out", "gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
 9422|  3.97k|        symbolTable.setVariableExtensions("gl_out", "gl_PositionPerViewNV",       1, &E_GL_NVX_multiview_per_view_attributes);
 9423|  3.97k|        symbolTable.setVariableExtensions("gl_out", "gl_ViewportMaskPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
 9424|       |
 9425|  3.97k|        BuiltInVariable("gl_out", "gl_ViewportMask",            EbvViewportMaskNV,          symbolTable);
 9426|  3.97k|        BuiltInVariable("gl_out", "gl_SecondaryPositionNV",     EbvSecondaryPositionNV,     symbolTable);
 9427|  3.97k|        BuiltInVariable("gl_out", "gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable);
 9428|  3.97k|        BuiltInVariable("gl_out", "gl_PositionPerViewNV",       EbvPositionPerViewNV,       symbolTable);
 9429|  3.97k|        BuiltInVariable("gl_out", "gl_ViewportMaskPerViewNV",   EbvViewportMaskPerViewNV,   symbolTable);
 9430|       |
 9431|  3.97k|        BuiltInVariable("gl_PatchVerticesIn", EbvPatchVertices,  symbolTable);
 9432|  3.97k|        BuiltInVariable("gl_TessLevelOuter",  EbvTessLevelOuter, symbolTable);
 9433|  3.97k|        BuiltInVariable("gl_TessLevelInner",  EbvTessLevelInner, symbolTable);
 9434|  3.97k|        BuiltInVariable("gl_TessCoord",       EbvTessCoord,      symbolTable);
 9435|       |
 9436|  3.97k|        if (version < 410)
  ------------------
  |  Branch (9436:13): [True: 2.17k, False: 1.79k]
  ------------------
 9437|  2.17k|            symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_viewport_array);
 9438|       |
 9439|       |        // Compatibility variables
 9440|       |
 9441|  3.97k|        BuiltInVariable("gl_in", "gl_ClipVertex",          EbvClipVertex,          symbolTable);
 9442|  3.97k|        BuiltInVariable("gl_in", "gl_FrontColor",          EbvFrontColor,          symbolTable);
 9443|  3.97k|        BuiltInVariable("gl_in", "gl_BackColor",           EbvBackColor,           symbolTable);
 9444|  3.97k|        BuiltInVariable("gl_in", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
 9445|  3.97k|        BuiltInVariable("gl_in", "gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
 9446|  3.97k|        BuiltInVariable("gl_in", "gl_TexCoord",            EbvTexCoord,            symbolTable);
 9447|  3.97k|        BuiltInVariable("gl_in", "gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
 9448|       |
 9449|  3.97k|        BuiltInVariable("gl_out", "gl_ClipVertex",          EbvClipVertex,          symbolTable);
 9450|  3.97k|        BuiltInVariable("gl_out", "gl_FrontColor",          EbvFrontColor,          symbolTable);
 9451|  3.97k|        BuiltInVariable("gl_out", "gl_BackColor",           EbvBackColor,           symbolTable);
 9452|  3.97k|        BuiltInVariable("gl_out", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
 9453|  3.97k|        BuiltInVariable("gl_out", "gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
 9454|  3.97k|        BuiltInVariable("gl_out", "gl_TexCoord",            EbvTexCoord,            symbolTable);
 9455|  3.97k|        BuiltInVariable("gl_out", "gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
 9456|       |
 9457|  3.97k|        BuiltInVariable("gl_ClipVertex",          EbvClipVertex,          symbolTable);
 9458|  3.97k|        BuiltInVariable("gl_FrontColor",          EbvFrontColor,          symbolTable);
 9459|  3.97k|        BuiltInVariable("gl_BackColor",           EbvBackColor,           symbolTable);
 9460|  3.97k|        BuiltInVariable("gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
 9461|  3.97k|        BuiltInVariable("gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
 9462|  3.97k|        BuiltInVariable("gl_TexCoord",            EbvTexCoord,            symbolTable);
 9463|  3.97k|        BuiltInVariable("gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
 9464|       |
 9465|       |        // gl_PointSize, when it needs to be tied to an extension, is always a member of a block.
 9466|       |        // (Sometimes with an instance name, sometimes anonymous).
 9467|  3.97k|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9467:13): [True: 2.13k, False: 1.83k]
  ------------------
 9468|  2.13k|            if (language == EShLangGeometry) {
  ------------------
  |  Branch (9468:17): [True: 494, False: 1.64k]
  ------------------
 9469|    494|                symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
 9470|    494|                symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
 9471|  1.64k|            } else if (language == EShLangTessEvaluation || language == EShLangTessControl) {
  ------------------
  |  Branch (9471:24): [True: 494, False: 1.14k]
  |  Branch (9471:61): [True: 494, False: 654]
  ------------------
 9472|       |                // gl_in tessellation settings of gl_PointSize are in the context-dependent paths
 9473|    988|                symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
 9474|    988|                symbolTable.setVariableExtensions("gl_out", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
 9475|    988|            }
 9476|  2.13k|        }
 9477|       |
 9478|  3.97k|        if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (9478:14): [True: 1.83k, False: 2.13k]
  |  Branch (9478:39): [True: 1.83k, False: 0]
  ------------------
 9479|  3.81k|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (9479:14): [True: 2.13k, False: 0]
  |  Branch (9479:39): [True: 1.97k, False: 160]
  ------------------
 9480|  3.81k|            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
 9481|  3.81k|            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 9482|  3.81k|            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 9483|  3.81k|            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
 9484|  3.81k|        }
 9485|       |
 9486|  3.97k|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9486:13): [True: 1.83k, False: 2.13k]
  ------------------
 9487|  1.83k|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
 9488|  1.83k|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
 9489|  1.83k|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
 9490|  1.83k|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
 9491|  1.83k|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
 9492|  1.83k|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 9493|       |
 9494|  1.83k|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (9494:17): [True: 212, False: 1.62k]
  ------------------
 9495|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
 9496|    212|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
 9497|    212|                if (language == EShLangFragment)
  ------------------
  |  Branch (9497:21): [True: 0, False: 212]
  ------------------
 9498|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
 9499|    212|            }
 9500|  1.62k|            else
 9501|  1.62k|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
 9502|  1.83k|        }
 9503|       |
 9504|       |        // GL_ARB_gpu_shader5/GL_NV_gpu_shader5
 9505|  3.97k|        if (profile != EEsProfile && version < 400 && language == EShLangGeometry) {
  ------------------
  |  Branch (9505:13): [True: 1.83k, False: 2.13k]
  |  Branch (9505:38): [True: 36, False: 1.80k]
  |  Branch (9505:55): [True: 9, False: 27]
  ------------------
 9506|      9|            symbolTable.setFunctionExtensions("EmitStreamVertex", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9507|      9|            symbolTable.setFunctionExtensions("EndStreamPrimitive", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9508|      9|        }
 9509|       |        // GL_KHR_shader_subgroup
 9510|  3.97k|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (9510:14): [True: 2.13k, False: 1.83k]
  |  Branch (9510:39): [True: 1.97k, False: 160]
  ------------------
 9511|  3.81k|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (9511:14): [True: 1.83k, False: 160]
  |  Branch (9511:39): [True: 1.83k, False: 0]
  ------------------
 9512|  3.81k|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
 9513|  3.81k|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
 9514|  3.81k|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9515|  3.81k|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9516|  3.81k|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9517|  3.81k|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9518|  3.81k|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9519|       |
 9520|  3.81k|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
 9521|  3.81k|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
 9522|  3.81k|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
 9523|  3.81k|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
 9524|  3.81k|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
 9525|  3.81k|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
 9526|  3.81k|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
 9527|       |
 9528|       |            // GL_NV_shader_sm_builtins
 9529|  3.81k|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
 9530|  3.81k|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
 9531|  3.81k|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
 9532|  3.81k|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
 9533|  3.81k|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
 9534|  3.81k|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
 9535|  3.81k|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
 9536|  3.81k|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
 9537|       |
 9538|       |            // GL_ARM_shader_core_builtins
 9539|  3.81k|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
 9540|  3.81k|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
 9541|  3.81k|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
 9542|  3.81k|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
 9543|  3.81k|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
 9544|       |
 9545|  3.81k|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
 9546|  3.81k|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
 9547|  3.81k|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
 9548|  3.81k|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
 9549|  3.81k|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
 9550|  3.81k|        }
 9551|       |
 9552|  3.97k|        if (language == EShLangGeometry || language == EShLangVertex) {
  ------------------
  |  Branch (9552:13): [True: 953, False: 3.01k]
  |  Branch (9552:44): [True: 1.11k, False: 1.90k]
  ------------------
 9553|  2.06k|            if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (9553:18): [True: 1.14k, False: 918]
  |  Branch (9553:43): [True: 988, False: 160]
  ------------------
 9554|  1.87k|                (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (9554:18): [True: 918, False: 160]
  |  Branch (9554:43): [True: 888, False: 30]
  ------------------
 9555|  1.87k|                symbolTable.setVariableExtensions("gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9556|  1.87k|                BuiltInVariable("gl_PrimitiveShadingRateEXT", EbvPrimitiveShadingRateKHR, symbolTable);
 9557|       |
 9558|  1.87k|                symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9559|  1.87k|                symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9560|  1.87k|                symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9561|  1.87k|                symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9562|  1.87k|            }
 9563|  2.06k|        }
 9564|  3.97k|        break;
 9565|       |
 9566|    920|    case EShLangFragment:
  ------------------
  |  Branch (9566:5): [True: 920, False: 8.47k]
  ------------------
 9567|    920|        SpecialQualifier("gl_FrontFacing",      EvqFace,       EbvFace,             symbolTable);
 9568|    920|        SpecialQualifier("gl_FragCoord",        EvqFragCoord,  EbvFragCoord,        symbolTable);
 9569|    920|        SpecialQualifier("gl_PointCoord",       EvqPointCoord, EbvPointCoord,       symbolTable);
 9570|    920|        if (spvVersion.spv == 0)
  ------------------
  |  Branch (9570:13): [True: 22, False: 898]
  ------------------
 9571|     22|            SpecialQualifier("gl_FragColor",    EvqFragColor,  EbvFragColor,        symbolTable);
 9572|    898|        else {
 9573|    898|            TSymbol* symbol = symbolTable.find("gl_FragColor");
 9574|    898|            if (symbol) {
  ------------------
  |  Branch (9574:17): [True: 11, False: 887]
  ------------------
 9575|     11|                symbol->getWritableType().getQualifier().storage = EvqVaryingOut;
 9576|     11|                symbol->getWritableType().getQualifier().layoutLocation = 0;
 9577|     11|            }
 9578|    898|        }
 9579|    920|        SpecialQualifier("gl_FragDepth",        EvqFragDepth,  EbvFragDepth,        symbolTable);
 9580|    920|        SpecialQualifier("gl_FragDepthEXT",     EvqFragDepth,  EbvFragDepth,        symbolTable);
 9581|    920|        SpecialQualifier("gl_FragStencilRefARB", EvqFragStencil, EbvFragStencilRef, symbolTable);
 9582|    920|        SpecialQualifier("gl_HelperInvocation", EvqVaryingIn,  EbvHelperInvocation, symbolTable);
 9583|       |
 9584|    920|        BuiltInVariable("gl_ClipDistance",    EbvClipDistance,   symbolTable);
 9585|    920|        BuiltInVariable("gl_CullDistance",    EbvCullDistance,   symbolTable);
 9586|    920|        BuiltInVariable("gl_PrimitiveID",     EbvPrimitiveId,    symbolTable);
 9587|       |
 9588|    920|        if (profile != EEsProfile && version >= 140) {
  ------------------
  |  Branch (9588:13): [True: 406, False: 514]
  |  Branch (9588:38): [True: 406, False: 0]
  ------------------
 9589|    406|            symbolTable.setVariableExtensions("gl_FragStencilRefARB", 1, &E_GL_ARB_shader_stencil_export);
 9590|    406|            BuiltInVariable("gl_FragStencilRefARB", EbvFragStencilRef, symbolTable);
 9591|    406|        }
 9592|       |
 9593|    920|        if (profile != EEsProfile && version < 400) {
  ------------------
  |  Branch (9593:13): [True: 406, False: 514]
  |  Branch (9593:38): [True: 9, False: 397]
  ------------------
 9594|      9|            symbolTable.setFunctionExtensions("textureQueryLOD", 1, &E_GL_ARB_texture_query_lod);
 9595|      9|        }
 9596|       |
 9597|    920|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (9597:13): [True: 406, False: 514]
  |  Branch (9597:38): [True: 1, False: 405]
  ------------------
 9598|      1|            symbolTable.setFunctionExtensions("rayQueryInitializeEXT",                                            1, &E_GL_EXT_ray_query);
 9599|      1|            symbolTable.setFunctionExtensions("rayQueryTerminateEXT",                                             1, &E_GL_EXT_ray_query);
 9600|      1|            symbolTable.setFunctionExtensions("rayQueryGenerateIntersectionEXT",                                  1, &E_GL_EXT_ray_query);
 9601|      1|            symbolTable.setFunctionExtensions("rayQueryConfirmIntersectionEXT",                                   1, &E_GL_EXT_ray_query);
 9602|      1|            symbolTable.setFunctionExtensions("rayQueryProceedEXT",                                               1, &E_GL_EXT_ray_query);
 9603|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTypeEXT",                                   1, &E_GL_EXT_ray_query);
 9604|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTEXT",                                      1, &E_GL_EXT_ray_query);
 9605|      1|            symbolTable.setFunctionExtensions("rayQueryGetRayFlagsEXT",                                           1, &E_GL_EXT_ray_query);
 9606|      1|            symbolTable.setFunctionExtensions("rayQueryGetRayTMinEXT",                                            1, &E_GL_EXT_ray_query);
 9607|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceCustomIndexEXT",                    1, &E_GL_EXT_ray_query);
 9608|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceIdEXT",                             1, &E_GL_EXT_ray_query);
 9609|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT", 1, &E_GL_EXT_ray_query);
 9610|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionGeometryIndexEXT",                          1, &E_GL_EXT_ray_query);
 9611|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionPrimitiveIndexEXT",                         1, &E_GL_EXT_ray_query);
 9612|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionBarycentricsEXT",                           1, &E_GL_EXT_ray_query);
 9613|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionFrontFaceEXT",                              1, &E_GL_EXT_ray_query);
 9614|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                    1, &E_GL_EXT_ray_query);
 9615|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayDirectionEXT",                     1, &E_GL_EXT_ray_query);
 9616|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayOriginEXT",                        1, &E_GL_EXT_ray_query);
 9617|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectToWorldEXT",                          1, &E_GL_EXT_ray_query);
 9618|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionWorldToObjectEXT",                          1, &E_GL_EXT_ray_query);
 9619|      1|            symbolTable.setFunctionExtensions("rayQueryGetWorldRayOriginEXT",                                     1, &E_GL_EXT_ray_query);
 9620|      1|            symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT",                                  1, &E_GL_EXT_ray_query);
 9621|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTriangleVertexPositionsEXT",                1, &E_GL_EXT_ray_tracing_position_fetch);
 9622|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionClusterIdNV",                               1, &E_GL_NV_cluster_acceleration_structure);
 9623|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionSpherePositionNV",                          1, &E_GL_NV_linear_swept_spheres);
 9624|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionSphereRadiusNV",                            1, &E_GL_NV_linear_swept_spheres);
 9625|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSHitValueNV",                             1, &E_GL_NV_linear_swept_spheres);
 9626|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSPositionsNV",                            1, &E_GL_NV_linear_swept_spheres);
 9627|      1|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSRadiiNV",                                1, &E_GL_NV_linear_swept_spheres);
 9628|      1|            symbolTable.setFunctionExtensions("rayQueryIsSphereHitNV",                                            1, &E_GL_NV_linear_swept_spheres);
 9629|      1|            symbolTable.setFunctionExtensions("rayQueryIsLSSHitNV",                                               1, &E_GL_NV_linear_swept_spheres);
 9630|      1|            symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT",                         1, &E_GL_EXT_ray_flags_primitive_culling);
 9631|      1|            symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT",                    1, &E_GL_EXT_ray_flags_primitive_culling);
 9632|      1|            symbolTable.setVariableExtensions("gl_RayFlagsForceOpacityMicromap2StateEXT",                  1, &E_GL_EXT_opacity_micromap);
 9633|      1|            symbolTable.setVariableExtensions("gl_EnableOpacityMicromapEXT",                    1, &E_GL_EXT_opacity_micromap_ray_query_mode);
 9634|      1|        }
 9635|       |
 9636|    920|        if ((profile != EEsProfile && version >= 130) ||
  ------------------
  |  Branch (9636:14): [True: 406, False: 514]
  |  Branch (9636:39): [True: 406, False: 0]
  ------------------
 9637|    900|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (9637:14): [True: 514, False: 0]
  |  Branch (9637:39): [True: 494, False: 20]
  ------------------
 9638|    900|            BuiltInVariable("gl_SampleID",           EbvSampleId,       symbolTable);
 9639|    900|            BuiltInVariable("gl_SamplePosition",     EbvSamplePosition, symbolTable);
 9640|    900|            BuiltInVariable("gl_SampleMask",         EbvSampleMask,     symbolTable);
 9641|       |
 9642|    900|            if (profile != EEsProfile && version < 400) {
  ------------------
  |  Branch (9642:17): [True: 406, False: 494]
  |  Branch (9642:42): [True: 9, False: 397]
  ------------------
 9643|      9|                BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
 9644|      9|                symbolTable.setVariableExtensions("gl_SampleMaskIn", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9645|       |
 9646|      9|                BuiltInVariable("gl_NumSamples",     EbvSampleMask,     symbolTable);
 9647|       |
 9648|      9|                symbolTable.setVariableExtensions("gl_SampleMask",     1, &E_GL_ARB_sample_shading);
 9649|      9|                symbolTable.setVariableExtensions("gl_SampleID",       1, &E_GL_ARB_sample_shading);
 9650|      9|                symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_ARB_sample_shading);
 9651|      9|                symbolTable.setVariableExtensions("gl_NumSamples",     1, &E_GL_ARB_sample_shading);
 9652|    891|            } else {
 9653|    891|                BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
 9654|       |
 9655|    891|                if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9655:21): [True: 494, False: 397]
  |  Branch (9655:46): [True: 491, False: 3]
  ------------------
 9656|    491|                    symbolTable.setVariableExtensions("gl_SampleID", 1, &E_GL_OES_sample_variables);
 9657|    491|                    symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_OES_sample_variables);
 9658|    491|                    symbolTable.setVariableExtensions("gl_SampleMaskIn", 1, &E_GL_OES_sample_variables);
 9659|    491|                    symbolTable.setVariableExtensions("gl_SampleMask", 1, &E_GL_OES_sample_variables);
 9660|    491|                    symbolTable.setVariableExtensions("gl_NumSamples", 1, &E_GL_OES_sample_variables);
 9661|    491|                }
 9662|    891|            }
 9663|    900|        }
 9664|       |
 9665|    920|        BuiltInVariable("gl_Layer",           EbvLayer,          symbolTable);
 9666|    920|        BuiltInVariable("gl_ViewportIndex",   EbvViewportIndex,  symbolTable);
 9667|       |
 9668|       |        // Compatibility variables
 9669|       |
 9670|    920|        BuiltInVariable("gl_in", "gl_FogFragCoord",   EbvFogFragCoord,   symbolTable);
 9671|    920|        BuiltInVariable("gl_in", "gl_TexCoord",       EbvTexCoord,       symbolTable);
 9672|    920|        BuiltInVariable("gl_in", "gl_Color",          EbvColor,          symbolTable);
 9673|    920|        BuiltInVariable("gl_in", "gl_SecondaryColor", EbvSecondaryColor, symbolTable);
 9674|       |
 9675|    920|        BuiltInVariable("gl_FogFragCoord",   EbvFogFragCoord,   symbolTable);
 9676|    920|        BuiltInVariable("gl_TexCoord",       EbvTexCoord,       symbolTable);
 9677|    920|        BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
 9678|    920|        BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable);
 9679|       |
 9680|       |        // built-in functions
 9681|       |
 9682|    920|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9682:13): [True: 514, False: 406]
  ------------------
 9683|    514|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9683:17): [True: 20, False: 494]
  ------------------
 9684|     20|                symbolTable.setFunctionExtensions("texture2DLodEXT",      1, &E_GL_EXT_shader_texture_lod);
 9685|     20|                symbolTable.setFunctionExtensions("texture2DProjLodEXT",  1, &E_GL_EXT_shader_texture_lod);
 9686|     20|                symbolTable.setFunctionExtensions("textureCubeLodEXT",    1, &E_GL_EXT_shader_texture_lod);
 9687|     20|                symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
 9688|     20|                symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
 9689|     20|                symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
 9690|     20|                if (version < 320)
  ------------------
  |  Branch (9690:21): [True: 20, False: 0]
  ------------------
 9691|     20|                    symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9692|     20|            }
 9693|    514|            if (version == 100) {
  ------------------
  |  Branch (9693:17): [True: 20, False: 494]
  ------------------
 9694|     20|                symbolTable.setFunctionExtensions("dFdx",   1, &E_GL_OES_standard_derivatives);
 9695|     20|                symbolTable.setFunctionExtensions("dFdy",   1, &E_GL_OES_standard_derivatives);
 9696|     20|                symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_OES_standard_derivatives);
 9697|     20|            }
 9698|    514|            if (version == 310) {
  ------------------
  |  Branch (9698:17): [True: 491, False: 23]
  ------------------
 9699|    491|                symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9700|    491|                symbolTable.setFunctionExtensions("interpolateAtCentroid", 1, &E_GL_OES_shader_multisample_interpolation);
 9701|    491|                symbolTable.setFunctionExtensions("interpolateAtSample",   1, &E_GL_OES_shader_multisample_interpolation);
 9702|    491|                symbolTable.setFunctionExtensions("interpolateAtOffset",   1, &E_GL_OES_shader_multisample_interpolation);
 9703|    491|            }
 9704|    514|        } else if (version < 130) {
  ------------------
  |  Branch (9704:20): [True: 0, False: 406]
  ------------------
 9705|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9705:17): [True: 0, False: 0]
  ------------------
 9706|      0|                symbolTable.setFunctionExtensions("texture1DLod",        1, &E_GL_ARB_shader_texture_lod);
 9707|      0|                symbolTable.setFunctionExtensions("texture2DLod",        1, &E_GL_ARB_shader_texture_lod);
 9708|      0|                symbolTable.setFunctionExtensions("texture3DLod",        1, &E_GL_ARB_shader_texture_lod);
 9709|      0|                symbolTable.setFunctionExtensions("textureCubeLod",      1, &E_GL_ARB_shader_texture_lod);
 9710|      0|                symbolTable.setFunctionExtensions("texture1DProjLod",    1, &E_GL_ARB_shader_texture_lod);
 9711|      0|                symbolTable.setFunctionExtensions("texture2DProjLod",    1, &E_GL_ARB_shader_texture_lod);
 9712|      0|                symbolTable.setFunctionExtensions("texture3DProjLod",    1, &E_GL_ARB_shader_texture_lod);
 9713|      0|                symbolTable.setFunctionExtensions("shadow1DLod",         1, &E_GL_ARB_shader_texture_lod);
 9714|      0|                symbolTable.setFunctionExtensions("shadow2DLod",         1, &E_GL_ARB_shader_texture_lod);
 9715|      0|                symbolTable.setFunctionExtensions("shadow1DProjLod",     1, &E_GL_ARB_shader_texture_lod);
 9716|      0|                symbolTable.setFunctionExtensions("shadow2DProjLod",     1, &E_GL_ARB_shader_texture_lod);
 9717|      0|            }
 9718|      0|        }
 9719|       |
 9720|       |        // E_GL_ARB_shader_texture_lod functions usable only with the extension enabled
 9721|    920|        if (profile != EEsProfile && spvVersion.spv == 0) {
  ------------------
  |  Branch (9721:13): [True: 406, False: 514]
  |  Branch (9721:38): [True: 2, False: 404]
  ------------------
 9722|      2|            symbolTable.setFunctionExtensions("texture1DGradARB",         1, &E_GL_ARB_shader_texture_lod);
 9723|      2|            symbolTable.setFunctionExtensions("texture1DProjGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9724|      2|            symbolTable.setFunctionExtensions("texture2DGradARB",         1, &E_GL_ARB_shader_texture_lod);
 9725|      2|            symbolTable.setFunctionExtensions("texture2DProjGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9726|      2|            symbolTable.setFunctionExtensions("texture3DGradARB",         1, &E_GL_ARB_shader_texture_lod);
 9727|      2|            symbolTable.setFunctionExtensions("texture3DProjGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9728|      2|            symbolTable.setFunctionExtensions("textureCubeGradARB",       1, &E_GL_ARB_shader_texture_lod);
 9729|      2|            symbolTable.setFunctionExtensions("shadow1DGradARB",          1, &E_GL_ARB_shader_texture_lod);
 9730|      2|            symbolTable.setFunctionExtensions("shadow1DProjGradARB",      1, &E_GL_ARB_shader_texture_lod);
 9731|      2|            symbolTable.setFunctionExtensions("shadow2DGradARB",          1, &E_GL_ARB_shader_texture_lod);
 9732|      2|            symbolTable.setFunctionExtensions("shadow2DProjGradARB",      1, &E_GL_ARB_shader_texture_lod);
 9733|      2|            symbolTable.setFunctionExtensions("texture2DRectGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9734|      2|            symbolTable.setFunctionExtensions("texture2DRectProjGradARB", 1, &E_GL_ARB_shader_texture_lod);
 9735|      2|            symbolTable.setFunctionExtensions("shadow2DRectGradARB",      1, &E_GL_ARB_shader_texture_lod);
 9736|      2|            symbolTable.setFunctionExtensions("shadow2DRectProjGradARB",  1, &E_GL_ARB_shader_texture_lod);
 9737|      2|        }
 9738|       |
 9739|       |        // E_GL_ARB_shader_image_load_store
 9740|    920|        if (profile != EEsProfile && version < 420)
  ------------------
  |  Branch (9740:13): [True: 406, False: 514]
  |  Branch (9740:38): [True: 11, False: 395]
  ------------------
 9741|     11|            symbolTable.setFunctionExtensions("memoryBarrier", 1, &E_GL_ARB_shader_image_load_store);
 9742|       |        // All the image access functions are protected by checks on the type of the first argument.
 9743|       |
 9744|       |        // E_GL_ARB_shader_atomic_counters
 9745|    920|        if (profile != EEsProfile && version < 420) {
  ------------------
  |  Branch (9745:13): [True: 406, False: 514]
  |  Branch (9745:38): [True: 11, False: 395]
  ------------------
 9746|     11|            symbolTable.setFunctionExtensions("atomicCounterIncrement", 1, &E_GL_ARB_shader_atomic_counters);
 9747|     11|            symbolTable.setFunctionExtensions("atomicCounterDecrement", 1, &E_GL_ARB_shader_atomic_counters);
 9748|     11|            symbolTable.setFunctionExtensions("atomicCounter"         , 1, &E_GL_ARB_shader_atomic_counters);
 9749|     11|        }
 9750|       |
 9751|       |        // E_GL_ARB_gpu_shader5/E_GL_NV_gpu_shader5 
 9752|    920|        if (profile != EEsProfile && version < 400) {
  ------------------
  |  Branch (9752:13): [True: 406, False: 514]
  |  Branch (9752:38): [True: 9, False: 397]
  ------------------
 9753|      9|            symbolTable.setFunctionExtensions("bitfieldExtract", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9754|      9|            symbolTable.setFunctionExtensions("bitfieldInsert", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9755|      9|            symbolTable.setFunctionExtensions("bitfieldReverse", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9756|      9|            symbolTable.setFunctionExtensions("bitCount", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9757|      9|            symbolTable.setFunctionExtensions("findLSB", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9758|      9|            symbolTable.setFunctionExtensions("findMSB", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9759|      9|            symbolTable.setFunctionExtensions("uaddCarry", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9760|      9|            symbolTable.setFunctionExtensions("usubBorrow", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9761|      9|            symbolTable.setFunctionExtensions("umulExtended", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9762|      9|            symbolTable.setFunctionExtensions("imulExtended", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9763|      9|            symbolTable.setFunctionExtensions("interpolateAtCentroid", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9764|      9|            symbolTable.setFunctionExtensions("interpolateAtSample", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9765|      9|            symbolTable.setFunctionExtensions("interpolateAtOffset", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9766|      9|        }
 9767|       |
 9768|       |        // E_GL_NV_gpu_shader5
 9769|    920|        if (profile != EEsProfile && version < 450) {
  ------------------
  |  Branch (9769:13): [True: 406, False: 514]
  |  Branch (9769:38): [True: 15, False: 391]
  ------------------
 9770|     15|            symbolTable.setFunctionExtensions("packInt2x32",     1, &E_GL_NV_gpu_shader5);
 9771|     15|            symbolTable.setFunctionExtensions("packUint2x32",     1, &E_GL_NV_gpu_shader5);
 9772|     15|            symbolTable.setFunctionExtensions("unpackInt2x32",     1, &E_GL_NV_gpu_shader5);
 9773|     15|            symbolTable.setFunctionExtensions("unpackUint2x32",     1, &E_GL_NV_gpu_shader5);
 9774|     15|            symbolTable.setFunctionExtensions("packFloat2x16",     1, &E_GL_NV_gpu_shader5);
 9775|     15|            symbolTable.setFunctionExtensions("unpackFloat2x16",     1, &E_GL_NV_gpu_shader5);
 9776|     15|            symbolTable.setFunctionExtensions("doubleBitsToInt64",     1, &E_GL_NV_gpu_shader5);
 9777|     15|            symbolTable.setFunctionExtensions("doubleBitsToUint64",     1, &E_GL_NV_gpu_shader5);
 9778|     15|            symbolTable.setFunctionExtensions("int64BitsToDouble",     1, &E_GL_NV_gpu_shader5);
 9779|     15|            symbolTable.setFunctionExtensions("uint64BitsToDouble",     1, &E_GL_NV_gpu_shader5);
 9780|     15|        }
 9781|       |
 9782|       |        // E_GL_ARB_shader_atomic_counter_ops
 9783|    920|        if (profile != EEsProfile && version == 450) {
  ------------------
  |  Branch (9783:13): [True: 406, False: 514]
  |  Branch (9783:38): [True: 390, False: 16]
  ------------------
 9784|    390|            symbolTable.setFunctionExtensions("atomicCounterAddARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9785|    390|            symbolTable.setFunctionExtensions("atomicCounterSubtractARB", 1, &E_GL_ARB_shader_atomic_counter_ops);
 9786|    390|            symbolTable.setFunctionExtensions("atomicCounterMinARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9787|    390|            symbolTable.setFunctionExtensions("atomicCounterMaxARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9788|    390|            symbolTable.setFunctionExtensions("atomicCounterAndARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9789|    390|            symbolTable.setFunctionExtensions("atomicCounterOrARB"      , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9790|    390|            symbolTable.setFunctionExtensions("atomicCounterXorARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9791|    390|            symbolTable.setFunctionExtensions("atomicCounterExchangeARB", 1, &E_GL_ARB_shader_atomic_counter_ops);
 9792|    390|            symbolTable.setFunctionExtensions("atomicCounterCompSwapARB", 1, &E_GL_ARB_shader_atomic_counter_ops);
 9793|    390|        }
 9794|       |
 9795|       |        // E_GL_ARB_derivative_control
 9796|    920|        if (profile != EEsProfile && version < 450) {
  ------------------
  |  Branch (9796:13): [True: 406, False: 514]
  |  Branch (9796:38): [True: 15, False: 391]
  ------------------
 9797|     15|            symbolTable.setFunctionExtensions("dFdxFine",     1, &E_GL_ARB_derivative_control);
 9798|     15|            symbolTable.setFunctionExtensions("dFdyFine",     1, &E_GL_ARB_derivative_control);
 9799|     15|            symbolTable.setFunctionExtensions("fwidthFine",   1, &E_GL_ARB_derivative_control);
 9800|     15|            symbolTable.setFunctionExtensions("dFdxCoarse",   1, &E_GL_ARB_derivative_control);
 9801|     15|            symbolTable.setFunctionExtensions("dFdyCoarse",   1, &E_GL_ARB_derivative_control);
 9802|     15|            symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_ARB_derivative_control);
 9803|     15|        }
 9804|       |
 9805|       |        // E_GL_ARB_sparse_texture2
 9806|    920|        if (profile != EEsProfile)
  ------------------
  |  Branch (9806:13): [True: 406, False: 514]
  ------------------
 9807|    406|        {
 9808|    406|            symbolTable.setFunctionExtensions("sparseTextureARB",              1, &E_GL_ARB_sparse_texture2);
 9809|    406|            symbolTable.setFunctionExtensions("sparseTextureLodARB",           1, &E_GL_ARB_sparse_texture2);
 9810|    406|            symbolTable.setFunctionExtensions("sparseTextureOffsetARB",        1, &E_GL_ARB_sparse_texture2);
 9811|    406|            symbolTable.setFunctionExtensions("sparseTexelFetchARB",           1, &E_GL_ARB_sparse_texture2);
 9812|    406|            symbolTable.setFunctionExtensions("sparseTexelFetchOffsetARB",     1, &E_GL_ARB_sparse_texture2);
 9813|    406|            symbolTable.setFunctionExtensions("sparseTextureLodOffsetARB",     1, &E_GL_ARB_sparse_texture2);
 9814|    406|            symbolTable.setFunctionExtensions("sparseTextureGradARB",          1, &E_GL_ARB_sparse_texture2);
 9815|    406|            symbolTable.setFunctionExtensions("sparseTextureGradOffsetARB",    1, &E_GL_ARB_sparse_texture2);
 9816|    406|            symbolTable.setFunctionExtensions("sparseTextureGatherARB",        1, &E_GL_ARB_sparse_texture2);
 9817|    406|            symbolTable.setFunctionExtensions("sparseTextureGatherOffsetARB",  1, &E_GL_ARB_sparse_texture2);
 9818|    406|            symbolTable.setFunctionExtensions("sparseTextureGatherOffsetsARB", 1, &E_GL_ARB_sparse_texture2);
 9819|    406|            symbolTable.setFunctionExtensions("sparseImageLoadARB",            1, &E_GL_ARB_sparse_texture2);
 9820|    406|            symbolTable.setFunctionExtensions("sparseTexelsResident",          1, &E_GL_ARB_sparse_texture2);
 9821|    406|        }
 9822|       |
 9823|       |        // E_GL_ARB_sparse_texture_clamp
 9824|    920|        if (profile != EEsProfile)
  ------------------
  |  Branch (9824:13): [True: 406, False: 514]
  ------------------
 9825|    406|        {
 9826|    406|            symbolTable.setFunctionExtensions("sparseTextureClampARB",              1, &E_GL_ARB_sparse_texture_clamp);
 9827|    406|            symbolTable.setFunctionExtensions("sparseTextureOffsetClampARB",        1, &E_GL_ARB_sparse_texture_clamp);
 9828|    406|            symbolTable.setFunctionExtensions("sparseTextureGradClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
 9829|    406|            symbolTable.setFunctionExtensions("sparseTextureGradOffsetClampARB",    1, &E_GL_ARB_sparse_texture_clamp);
 9830|    406|            symbolTable.setFunctionExtensions("textureClampARB",                    1, &E_GL_ARB_sparse_texture_clamp);
 9831|    406|            symbolTable.setFunctionExtensions("textureOffsetClampARB",              1, &E_GL_ARB_sparse_texture_clamp);
 9832|    406|            symbolTable.setFunctionExtensions("textureGradClampARB",                1, &E_GL_ARB_sparse_texture_clamp);
 9833|    406|            symbolTable.setFunctionExtensions("textureGradOffsetClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
 9834|    406|        }
 9835|       |
 9836|       |        // E_GL_AMD_shader_explicit_vertex_parameter
 9837|    920|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9837:13): [True: 406, False: 514]
  ------------------
 9838|    406|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspAMD",         1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9839|    406|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspCentroidAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9840|    406|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspSampleAMD",   1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9841|    406|            symbolTable.setVariableExtensions("gl_BaryCoordSmoothAMD",          1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9842|    406|            symbolTable.setVariableExtensions("gl_BaryCoordSmoothCentroidAMD",  1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9843|    406|            symbolTable.setVariableExtensions("gl_BaryCoordSmoothSampleAMD",    1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9844|    406|            symbolTable.setVariableExtensions("gl_BaryCoordPullModelAMD",       1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9845|       |
 9846|    406|            symbolTable.setFunctionExtensions("interpolateAtVertexAMD",         1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9847|       |
 9848|    406|            BuiltInVariable("gl_BaryCoordNoPerspAMD",           EbvBaryCoordNoPersp,         symbolTable);
 9849|    406|            BuiltInVariable("gl_BaryCoordNoPerspCentroidAMD",   EbvBaryCoordNoPerspCentroid, symbolTable);
 9850|    406|            BuiltInVariable("gl_BaryCoordNoPerspSampleAMD",     EbvBaryCoordNoPerspSample,   symbolTable);
 9851|    406|            BuiltInVariable("gl_BaryCoordSmoothAMD",            EbvBaryCoordSmooth,          symbolTable);
 9852|    406|            BuiltInVariable("gl_BaryCoordSmoothCentroidAMD",    EbvBaryCoordSmoothCentroid,  symbolTable);
 9853|    406|            BuiltInVariable("gl_BaryCoordSmoothSampleAMD",      EbvBaryCoordSmoothSample,    symbolTable);
 9854|    406|            BuiltInVariable("gl_BaryCoordPullModelAMD",         EbvBaryCoordPullModel,       symbolTable);
 9855|    406|        }
 9856|       |
 9857|       |        // E_GL_AMD_texture_gather_bias_lod
 9858|    920|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9858:13): [True: 406, False: 514]
  ------------------
 9859|    406|            symbolTable.setFunctionExtensions("textureGatherLodAMD",                1, &E_GL_AMD_texture_gather_bias_lod);
 9860|    406|            symbolTable.setFunctionExtensions("textureGatherLodOffsetAMD",          1, &E_GL_AMD_texture_gather_bias_lod);
 9861|    406|            symbolTable.setFunctionExtensions("textureGatherLodOffsetsAMD",         1, &E_GL_AMD_texture_gather_bias_lod);
 9862|    406|            symbolTable.setFunctionExtensions("sparseTextureGatherLodAMD",          1, &E_GL_AMD_texture_gather_bias_lod);
 9863|    406|            symbolTable.setFunctionExtensions("sparseTextureGatherLodOffsetAMD",    1, &E_GL_AMD_texture_gather_bias_lod);
 9864|    406|            symbolTable.setFunctionExtensions("sparseTextureGatherLodOffsetsAMD",   1, &E_GL_AMD_texture_gather_bias_lod);
 9865|    406|        }
 9866|       |
 9867|       |        // E_GL_AMD_shader_image_load_store_lod
 9868|    920|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9868:13): [True: 406, False: 514]
  ------------------
 9869|    406|            symbolTable.setFunctionExtensions("imageLoadLodAMD",        1, &E_GL_AMD_shader_image_load_store_lod);
 9870|    406|            symbolTable.setFunctionExtensions("imageStoreLodAMD",       1, &E_GL_AMD_shader_image_load_store_lod);
 9871|    406|            symbolTable.setFunctionExtensions("sparseImageLoadLodAMD",  1, &E_GL_AMD_shader_image_load_store_lod);
 9872|    406|        }
 9873|    920|        if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (9873:13): [True: 406, False: 514]
  |  Branch (9873:38): [True: 394, False: 12]
  ------------------
 9874|    394|            symbolTable.setVariableExtensions("gl_FragFullyCoveredNV", 1, &E_GL_NV_conservative_raster_underestimation);
 9875|    394|            BuiltInVariable("gl_FragFullyCoveredNV", EbvFragFullyCoveredNV, symbolTable);
 9876|    394|        }
 9877|    920|        if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (9877:14): [True: 406, False: 514]
  |  Branch (9877:39): [True: 391, False: 15]
  ------------------
 9878|    529|            (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (9878:14): [True: 514, False: 15]
  |  Branch (9878:39): [True: 3, False: 511]
  ------------------
 9879|    394|            symbolTable.setVariableExtensions("gl_FragmentSizeNV",        1, &E_GL_NV_shading_rate_image);
 9880|    394|            symbolTable.setVariableExtensions("gl_InvocationsPerPixelNV", 1, &E_GL_NV_shading_rate_image);
 9881|    394|            BuiltInVariable("gl_FragmentSizeNV",        EbvFragmentSizeNV, symbolTable);
 9882|    394|            BuiltInVariable("gl_InvocationsPerPixelNV", EbvInvocationsPerPixelNV, symbolTable);
 9883|    394|            symbolTable.setVariableExtensions("gl_BaryCoordNV",        1, &E_GL_NV_fragment_shader_barycentric);
 9884|    394|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspNV", 1, &E_GL_NV_fragment_shader_barycentric);
 9885|    394|            BuiltInVariable("gl_BaryCoordNV",        EbvBaryCoordNV,        symbolTable);
 9886|    394|            BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable);
 9887|    394|            symbolTable.setVariableExtensions("gl_BaryCoordEXT",        1, &E_GL_EXT_fragment_shader_barycentric);
 9888|    394|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspEXT", 1, &E_GL_EXT_fragment_shader_barycentric);
 9889|    394|            BuiltInVariable("gl_BaryCoordEXT",        EbvBaryCoordEXT,        symbolTable);
 9890|    394|            BuiltInVariable("gl_BaryCoordNoPerspEXT", EbvBaryCoordNoPerspEXT, symbolTable);
 9891|    394|        }
 9892|       |
 9893|    920|        if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (9893:14): [True: 406, False: 514]
  |  Branch (9893:39): [True: 391, False: 15]
  ------------------
 9894|    885|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (9894:14): [True: 514, False: 15]
  |  Branch (9894:39): [True: 494, False: 20]
  ------------------
 9895|    885|            symbolTable.setVariableExtensions("gl_FragSizeEXT",            1, &E_GL_EXT_fragment_invocation_density);
 9896|    885|            symbolTable.setVariableExtensions("gl_FragInvocationCountEXT", 1, &E_GL_EXT_fragment_invocation_density);
 9897|    885|            BuiltInVariable("gl_FragSizeEXT",            EbvFragSizeEXT, symbolTable);
 9898|    885|            BuiltInVariable("gl_FragInvocationCountEXT", EbvFragInvocationCountEXT, symbolTable);
 9899|    885|        }
 9900|       |
 9901|    920|        symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
 9902|       |
 9903|    920|        symbolTable.setFunctionExtensions("clockARB",     1, &E_GL_ARB_shader_clock);
 9904|    920|        symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock);
 9905|       |
 9906|    920|        symbolTable.setFunctionExtensions("clockRealtimeEXT", 1, &E_GL_EXT_shader_realtime_clock);
 9907|    920|        symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock);
 9908|       |
 9909|    920|        if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9909:13): [True: 514, False: 406]
  |  Branch (9909:38): [True: 511, False: 3]
  ------------------
 9910|    511|            symbolTable.setVariableExtensions("gl_PrimitiveID",  Num_AEP_geometry_shader, AEP_geometry_shader);
 9911|    511|            symbolTable.setVariableExtensions("gl_Layer",        Num_AEP_geometry_shader, AEP_geometry_shader);
 9912|    511|        }
 9913|       |
 9914|    920|        if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9914:13): [True: 514, False: 406]
  |  Branch (9914:38): [True: 511, False: 3]
  ------------------
 9915|    511|            symbolTable.setFunctionExtensions("imageAtomicAdd",      1, &E_GL_OES_shader_image_atomic);
 9916|    511|            symbolTable.setFunctionExtensions("imageAtomicMin",      1, &E_GL_OES_shader_image_atomic);
 9917|    511|            symbolTable.setFunctionExtensions("imageAtomicMax",      1, &E_GL_OES_shader_image_atomic);
 9918|    511|            symbolTable.setFunctionExtensions("imageAtomicAnd",      1, &E_GL_OES_shader_image_atomic);
 9919|    511|            symbolTable.setFunctionExtensions("imageAtomicOr",       1, &E_GL_OES_shader_image_atomic);
 9920|    511|            symbolTable.setFunctionExtensions("imageAtomicXor",      1, &E_GL_OES_shader_image_atomic);
 9921|    511|            symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic);
 9922|    511|            symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
 9923|    511|        }
 9924|       |
 9925|    920|        if (profile != EEsProfile && version < 330 ) {
  ------------------
  |  Branch (9925:13): [True: 406, False: 514]
  |  Branch (9925:38): [True: 0, False: 406]
  ------------------
 9926|      0|            const int numBitEncodingExts = 3;
 9927|      0|            const char* bitEncodingExts[numBitEncodingExts] = { E_GL_ARB_shader_bit_encoding,
 9928|      0|                                                                E_GL_ARB_gpu_shader5,
 9929|      0|                                                                E_GL_NV_gpu_shader5};
 9930|      0|            symbolTable.setFunctionExtensions("floatBitsToInt", numBitEncodingExts, bitEncodingExts);
 9931|      0|            symbolTable.setFunctionExtensions("floatBitsToUint", numBitEncodingExts, bitEncodingExts);
 9932|      0|            symbolTable.setFunctionExtensions("intBitsToFloat", numBitEncodingExts, bitEncodingExts);
 9933|      0|            symbolTable.setFunctionExtensions("uintBitsToFloat", numBitEncodingExts, bitEncodingExts);
 9934|       |
 9935|      0|        }
 9936|       |
 9937|    920|        if (profile != EEsProfile && version < 430 ) {
  ------------------
  |  Branch (9937:13): [True: 406, False: 514]
  |  Branch (9937:38): [True: 12, False: 394]
  ------------------
 9938|     12|            symbolTable.setFunctionExtensions("imageSize", 1, &E_GL_ARB_shader_image_size);
 9939|     12|        }
 9940|       |
 9941|       |        // GL_ARB_shader_storage_buffer_object
 9942|    920|        if (profile != EEsProfile && version < 430 ) {
  ------------------
  |  Branch (9942:13): [True: 406, False: 514]
  |  Branch (9942:38): [True: 12, False: 394]
  ------------------
 9943|     12|            symbolTable.setFunctionExtensions("atomicAdd", 1, &E_GL_ARB_shader_storage_buffer_object);
 9944|     12|            symbolTable.setFunctionExtensions("atomicMin", 1, &E_GL_ARB_shader_storage_buffer_object);
 9945|     12|            symbolTable.setFunctionExtensions("atomicMax", 1, &E_GL_ARB_shader_storage_buffer_object);
 9946|     12|            symbolTable.setFunctionExtensions("atomicAnd", 1, &E_GL_ARB_shader_storage_buffer_object);
 9947|     12|            symbolTable.setFunctionExtensions("atomicOr", 1, &E_GL_ARB_shader_storage_buffer_object);
 9948|     12|            symbolTable.setFunctionExtensions("atomicXor", 1, &E_GL_ARB_shader_storage_buffer_object);
 9949|     12|            symbolTable.setFunctionExtensions("atomicExchange", 1, &E_GL_ARB_shader_storage_buffer_object);
 9950|     12|            symbolTable.setFunctionExtensions("atomicCompSwap", 1, &E_GL_ARB_shader_storage_buffer_object);
 9951|     12|        }
 9952|       |
 9953|       |        // GL_ARB_shading_language_packing
 9954|    920|        if (profile != EEsProfile && version < 400 ) {
  ------------------
  |  Branch (9954:13): [True: 406, False: 514]
  |  Branch (9954:38): [True: 9, False: 397]
  ------------------
 9955|      9|            const int numPackingExts = 3;
 9956|      9|            const char* packingExts[numPackingExts] = { E_GL_ARB_shading_language_packing,
 9957|      9|                                                                E_GL_ARB_gpu_shader5,
 9958|      9|                                                                E_GL_NV_gpu_shader5};
 9959|      9|            symbolTable.setFunctionExtensions("packUnorm2x16", numPackingExts, packingExts);
 9960|      9|            symbolTable.setFunctionExtensions("unpackUnorm2x16", numPackingExts, packingExts);
 9961|      9|            symbolTable.setFunctionExtensions("packSnorm4x8", numPackingExts, packingExts);
 9962|      9|            symbolTable.setFunctionExtensions("packUnorm4x8", numPackingExts, packingExts);
 9963|      9|            symbolTable.setFunctionExtensions("unpackSnorm4x8", numPackingExts, packingExts);
 9964|      9|            symbolTable.setFunctionExtensions("unpackUnorm4x8", numPackingExts, packingExts);
 9965|      9|        }
 9966|    920|        if (profile != EEsProfile && version < 420 ) {
  ------------------
  |  Branch (9966:13): [True: 406, False: 514]
  |  Branch (9966:38): [True: 11, False: 395]
  ------------------
 9967|     11|            symbolTable.setFunctionExtensions("packSnorm2x16", 1, &E_GL_ARB_shading_language_packing);
 9968|     11|            symbolTable.setFunctionExtensions("unpackSnorm2x16", 1, &E_GL_ARB_shading_language_packing);
 9969|     11|            symbolTable.setFunctionExtensions("unpackHalf2x16", 1, &E_GL_ARB_shading_language_packing);
 9970|     11|            symbolTable.setFunctionExtensions("packHalf2x16", 1, &E_GL_ARB_shading_language_packing);
 9971|     11|        }
 9972|       |
 9973|    920|        symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
 9974|    920|        BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 9975|    920|        symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 9976|    920|        BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
 9977|    920|        if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (9977:13): [True: 900, False: 20]
  ------------------
 9978|    900|            symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
 9979|    900|            BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
 9980|    900|        }
 9981|       |
 9982|       |        // GL_ARB_shader_ballot
 9983|    920|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9983:13): [True: 406, False: 514]
  ------------------
 9984|    406|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
 9985|    406|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
 9986|    406|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
 9987|    406|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9988|    406|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9989|    406|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9990|    406|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9991|       |
 9992|    406|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
 9993|    406|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
 9994|    406|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
 9995|    406|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
 9996|    406|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
 9997|    406|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 9998|       |
 9999|    406|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (9999:17): [True: 0, False: 406]
  ------------------
10000|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10001|      0|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10002|      0|                if (language == EShLangFragment)
  ------------------
  |  Branch (10002:21): [True: 0, False: 0]
  ------------------
10003|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10004|      0|            }
10005|    406|            else
10006|    406|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10007|    406|        }
10008|       |
10009|       |        // GL_EXT_expect_assume
10010|    920|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10010:14): [True: 514, False: 406]
  |  Branch (10010:39): [True: 494, False: 20]
  ------------------
10011|    900|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10011:14): [True: 406, False: 20]
  |  Branch (10011:39): [True: 406, False: 0]
  ------------------
10012|    900|            symbolTable.setFunctionExtensions("assumeEXT", 1, &E_GL_EXT_expect_assume);
10013|    900|            symbolTable.setFunctionExtensions("expectEXT", 1, &E_GL_EXT_expect_assume);
10014|    900|        }
10015|       |
10016|       |        // GL_KHR_shader_subgroup
10017|    920|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10017:14): [True: 514, False: 406]
  |  Branch (10017:39): [True: 494, False: 20]
  ------------------
10018|    900|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10018:14): [True: 406, False: 20]
  |  Branch (10018:39): [True: 406, False: 0]
  ------------------
10019|    900|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
10020|    900|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
10021|    900|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10022|    900|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10023|    900|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10024|    900|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10025|    900|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10026|       |
10027|    900|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
10028|    900|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
10029|    900|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
10030|    900|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
10031|    900|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
10032|    900|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
10033|    900|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
10034|       |
10035|    900|            symbolTable.setFunctionExtensions("subgroupBarrier",                 1, &E_GL_KHR_shader_subgroup_basic);
10036|    900|            symbolTable.setFunctionExtensions("subgroupMemoryBarrier",           1, &E_GL_KHR_shader_subgroup_basic);
10037|    900|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierBuffer",     1, &E_GL_KHR_shader_subgroup_basic);
10038|    900|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierImage",      1, &E_GL_KHR_shader_subgroup_basic);
10039|    900|            symbolTable.setFunctionExtensions("subgroupElect",                   1, &E_GL_KHR_shader_subgroup_basic);
10040|    900|            symbolTable.setFunctionExtensions("subgroupAll",                     1, &E_GL_KHR_shader_subgroup_vote);
10041|    900|            symbolTable.setFunctionExtensions("subgroupAny",                     1, &E_GL_KHR_shader_subgroup_vote);
10042|    900|            symbolTable.setFunctionExtensions("subgroupAllEqual",                1, &E_GL_KHR_shader_subgroup_vote);
10043|    900|            symbolTable.setFunctionExtensions("subgroupBroadcast",               1, &E_GL_KHR_shader_subgroup_ballot);
10044|    900|            symbolTable.setFunctionExtensions("subgroupBroadcastFirst",          1, &E_GL_KHR_shader_subgroup_ballot);
10045|    900|            symbolTable.setFunctionExtensions("subgroupBallot",                  1, &E_GL_KHR_shader_subgroup_ballot);
10046|    900|            symbolTable.setFunctionExtensions("subgroupInverseBallot",           1, &E_GL_KHR_shader_subgroup_ballot);
10047|    900|            symbolTable.setFunctionExtensions("subgroupBallotBitExtract",        1, &E_GL_KHR_shader_subgroup_ballot);
10048|    900|            symbolTable.setFunctionExtensions("subgroupBallotBitCount",          1, &E_GL_KHR_shader_subgroup_ballot);
10049|    900|            symbolTable.setFunctionExtensions("subgroupBallotInclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
10050|    900|            symbolTable.setFunctionExtensions("subgroupBallotExclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
10051|    900|            symbolTable.setFunctionExtensions("subgroupBallotFindLSB",           1, &E_GL_KHR_shader_subgroup_ballot);
10052|    900|            symbolTable.setFunctionExtensions("subgroupBallotFindMSB",           1, &E_GL_KHR_shader_subgroup_ballot);
10053|    900|            symbolTable.setFunctionExtensions("subgroupShuffle",                 1, &E_GL_KHR_shader_subgroup_shuffle);
10054|    900|            symbolTable.setFunctionExtensions("subgroupShuffleXor",              1, &E_GL_KHR_shader_subgroup_shuffle);
10055|    900|            symbolTable.setFunctionExtensions("subgroupShuffleUp",               1, &E_GL_KHR_shader_subgroup_shuffle_relative);
10056|    900|            symbolTable.setFunctionExtensions("subgroupShuffleDown",             1, &E_GL_KHR_shader_subgroup_shuffle_relative);
10057|    900|            symbolTable.setFunctionExtensions("subgroupRotate",                  1, &E_GL_KHR_shader_subgroup_rotate);
10058|    900|            symbolTable.setFunctionExtensions("subgroupClusteredRotate",         1, &E_GL_KHR_shader_subgroup_rotate);
10059|    900|            symbolTable.setFunctionExtensions("subgroupAdd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
10060|    900|            symbolTable.setFunctionExtensions("subgroupMul",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
10061|    900|            symbolTable.setFunctionExtensions("subgroupMin",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
10062|    900|            symbolTable.setFunctionExtensions("subgroupMax",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
10063|    900|            symbolTable.setFunctionExtensions("subgroupAnd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
10064|    900|            symbolTable.setFunctionExtensions("subgroupOr",                      1, &E_GL_KHR_shader_subgroup_arithmetic);
10065|    900|            symbolTable.setFunctionExtensions("subgroupXor",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
10066|    900|            symbolTable.setFunctionExtensions("subgroupInclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10067|    900|            symbolTable.setFunctionExtensions("subgroupInclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10068|    900|            symbolTable.setFunctionExtensions("subgroupInclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10069|    900|            symbolTable.setFunctionExtensions("subgroupInclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10070|    900|            symbolTable.setFunctionExtensions("subgroupInclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10071|    900|            symbolTable.setFunctionExtensions("subgroupInclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
10072|    900|            symbolTable.setFunctionExtensions("subgroupInclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10073|    900|            symbolTable.setFunctionExtensions("subgroupExclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10074|    900|            symbolTable.setFunctionExtensions("subgroupExclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10075|    900|            symbolTable.setFunctionExtensions("subgroupExclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10076|    900|            symbolTable.setFunctionExtensions("subgroupExclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10077|    900|            symbolTable.setFunctionExtensions("subgroupExclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10078|    900|            symbolTable.setFunctionExtensions("subgroupExclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
10079|    900|            symbolTable.setFunctionExtensions("subgroupExclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
10080|    900|            symbolTable.setFunctionExtensions("subgroupClusteredAdd",            1, &E_GL_KHR_shader_subgroup_clustered);
10081|    900|            symbolTable.setFunctionExtensions("subgroupClusteredMul",            1, &E_GL_KHR_shader_subgroup_clustered);
10082|    900|            symbolTable.setFunctionExtensions("subgroupClusteredMin",            1, &E_GL_KHR_shader_subgroup_clustered);
10083|    900|            symbolTable.setFunctionExtensions("subgroupClusteredMax",            1, &E_GL_KHR_shader_subgroup_clustered);
10084|    900|            symbolTable.setFunctionExtensions("subgroupClusteredAnd",            1, &E_GL_KHR_shader_subgroup_clustered);
10085|    900|            symbolTable.setFunctionExtensions("subgroupClusteredOr",             1, &E_GL_KHR_shader_subgroup_clustered);
10086|    900|            symbolTable.setFunctionExtensions("subgroupClusteredXor",            1, &E_GL_KHR_shader_subgroup_clustered);
10087|    900|            symbolTable.setFunctionExtensions("subgroupQuadBroadcast",           1, &E_GL_KHR_shader_subgroup_quad);
10088|    900|            symbolTable.setFunctionExtensions("subgroupQuadSwapHorizontal",      1, &E_GL_KHR_shader_subgroup_quad);
10089|    900|            symbolTable.setFunctionExtensions("subgroupQuadSwapVertical",        1, &E_GL_KHR_shader_subgroup_quad);
10090|    900|            symbolTable.setFunctionExtensions("subgroupQuadSwapDiagonal",        1, &E_GL_KHR_shader_subgroup_quad);
10091|    900|            symbolTable.setFunctionExtensions("subgroupPartitionNV",                          1, &E_GL_NV_shader_subgroup_partitioned);
10092|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedAddNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
10093|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedMulNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
10094|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedMinNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
10095|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedMaxNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
10096|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedAndNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
10097|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedOrNV",                      1, &E_GL_NV_shader_subgroup_partitioned);
10098|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedXorNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
10099|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10100|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10101|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10102|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10103|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10104|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
10105|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10106|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10107|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10108|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10109|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10110|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10111|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
10112|    900|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
10113|       |
10114|       |            // GL_NV_shader_sm_builtins
10115|    900|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
10116|    900|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
10117|    900|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
10118|    900|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
10119|    900|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
10120|    900|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
10121|    900|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
10122|    900|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
10123|       |
10124|       |            // GL_ARM_shader_core_builtins
10125|    900|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
10126|    900|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
10127|    900|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10128|    900|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
10129|    900|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10130|       |
10131|    900|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
10132|    900|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
10133|    900|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
10134|    900|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
10135|    900|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
10136|    900|        }
10137|       |
10138|    920|        if (profile == EEsProfile) {
  ------------------
  |  Branch (10138:13): [True: 514, False: 406]
  ------------------
10139|    514|            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
10140|    514|            symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
10141|    514|        }
10142|       |
10143|    920|        if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10143:13): [True: 0, False: 920]
  ------------------
10144|      0|            symbolTable.setVariableExtensions("gl_ScopeDevice",             1, &E_GL_KHR_memory_scope_semantics);
10145|      0|            symbolTable.setVariableExtensions("gl_ScopeWorkgroup",          1, &E_GL_KHR_memory_scope_semantics);
10146|      0|            symbolTable.setVariableExtensions("gl_ScopeSubgroup",           1, &E_GL_KHR_memory_scope_semantics);
10147|      0|            symbolTable.setVariableExtensions("gl_ScopeInvocation",         1, &E_GL_KHR_memory_scope_semantics);
10148|       |
10149|      0|            symbolTable.setVariableExtensions("gl_SemanticsRelaxed",        1, &E_GL_KHR_memory_scope_semantics);
10150|      0|            symbolTable.setVariableExtensions("gl_SemanticsAcquire",        1, &E_GL_KHR_memory_scope_semantics);
10151|      0|            symbolTable.setVariableExtensions("gl_SemanticsRelease",        1, &E_GL_KHR_memory_scope_semantics);
10152|      0|            symbolTable.setVariableExtensions("gl_SemanticsAcquireRelease", 1, &E_GL_KHR_memory_scope_semantics);
10153|      0|            symbolTable.setVariableExtensions("gl_SemanticsMakeAvailable",  1, &E_GL_KHR_memory_scope_semantics);
10154|      0|            symbolTable.setVariableExtensions("gl_SemanticsMakeVisible",    1, &E_GL_KHR_memory_scope_semantics);
10155|      0|            symbolTable.setVariableExtensions("gl_SemanticsVolatile",       1, &E_GL_KHR_memory_scope_semantics);
10156|       |
10157|      0|            symbolTable.setVariableExtensions("gl_StorageSemanticsNone",    1, &E_GL_KHR_memory_scope_semantics);
10158|      0|            symbolTable.setVariableExtensions("gl_StorageSemanticsBuffer",  1, &E_GL_KHR_memory_scope_semantics);
10159|      0|            symbolTable.setVariableExtensions("gl_StorageSemanticsShared",  1, &E_GL_KHR_memory_scope_semantics);
10160|      0|            symbolTable.setVariableExtensions("gl_StorageSemanticsImage",   1, &E_GL_KHR_memory_scope_semantics);
10161|      0|            symbolTable.setVariableExtensions("gl_StorageSemanticsOutput",  1, &E_GL_KHR_memory_scope_semantics);
10162|      0|        }
10163|       |
10164|    920|        symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
10165|       |
10166|    920|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10166:14): [True: 514, False: 406]
  |  Branch (10166:39): [True: 494, False: 20]
  ------------------
10167|    885|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10167:14): [True: 406, False: 20]
  |  Branch (10167:39): [True: 391, False: 15]
  ------------------
10168|    885|            symbolTable.setVariableExtensions("gl_ShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
10169|    885|            BuiltInVariable("gl_ShadingRateEXT", EbvShadingRateKHR, symbolTable);
10170|       |
10171|    885|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10172|    885|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10173|    885|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10174|    885|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10175|    885|        }
10176|       |
10177|       |        // GL_EXT_shader_quad_control
10178|    920|        if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (10178:14): [True: 406, False: 514]
  |  Branch (10178:39): [True: 406, False: 0]
  ------------------
10179|    900|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (10179:14): [True: 514, False: 0]
  |  Branch (10179:39): [True: 494, False: 20]
  ------------------
10180|    900|            symbolTable.setFunctionExtensions("subgroupQuadAll",                     1,  &E_GL_KHR_shader_subgroup_vote);
10181|    900|            symbolTable.setFunctionExtensions("subgroupQuadAny",                     1,  &E_GL_KHR_shader_subgroup_vote);
10182|    900|        }
10183|       |
10184|       |        // GL_EXT_shader_tile_image
10185|    920|        symbolTable.setFunctionExtensions("stencilAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
10186|    920|        symbolTable.setFunctionExtensions("depthAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
10187|    920|        symbolTable.setFunctionExtensions("colorAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
10188|       |
10189|    920|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10189:14): [True: 514, False: 406]
  |  Branch (10189:39): [True: 494, False: 20]
  ------------------
10190|    900|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10190:14): [True: 406, False: 20]
  |  Branch (10190:39): [True: 406, False: 0]
  ------------------
10191|       |
10192|    900|            symbolTable.setFunctionExtensions("textureWeightedQCOM",      1, &E_GL_QCOM_image_processing);
10193|    900|            symbolTable.setFunctionExtensions("textureBoxFilterQCOM",     1, &E_GL_QCOM_image_processing);
10194|    900|            symbolTable.setFunctionExtensions("textureBlockMatchSADQCOM", 1, &E_GL_QCOM_image_processing);
10195|    900|            symbolTable.setFunctionExtensions("textureBlockMatchSSDQCOM", 1, &E_GL_QCOM_image_processing);
10196|       |
10197|    900|            symbolTable.setFunctionExtensions("textureBlockMatchWindowSSDQCOM", 1, &E_GL_QCOM_image_processing2);
10198|    900|            symbolTable.setFunctionExtensions("textureBlockMatchWindowSADQCOM", 1, &E_GL_QCOM_image_processing2);
10199|    900|            symbolTable.setFunctionExtensions("textureBlockMatchGatherSSDQCOM", 1, &E_GL_QCOM_image_processing2);
10200|    900|            symbolTable.setFunctionExtensions("textureBlockMatchGatherSADQCOM", 1, &E_GL_QCOM_image_processing2);
10201|    900|        }
10202|       |
10203|    920|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10203:14): [True: 514, False: 406]
  |  Branch (10203:39): [True: 494, False: 20]
  ------------------
10204|    495|            (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (10204:14): [True: 406, False: 20]
  |  Branch (10204:39): [True: 1, False: 405]
  ------------------
10205|    495|            BuiltInVariable("gl_TileOffsetQCOM",    EbvTileOffsetQCOM,      symbolTable);
10206|    495|            BuiltInVariable("gl_TileDimensionQCOM", EbvTileDimensionQCOM,   symbolTable);
10207|    495|            BuiltInVariable("gl_TileApronSizeQCOM", EbvTileApronSizeQCOM,   symbolTable);
10208|       |
10209|    495|            symbolTable.setVariableExtensions("gl_TileOffsetQCOM",        1, &E_GL_QCOM_tile_shading);
10210|    495|            symbolTable.setVariableExtensions("gl_TileDimensionQCOM",     1, &E_GL_QCOM_tile_shading);
10211|    495|            symbolTable.setVariableExtensions("gl_TileApronSizeQCOM",     1, &E_GL_QCOM_tile_shading);
10212|    495|        }
10213|       |
10214|    920|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10214:14): [True: 514, False: 406]
  |  Branch (10214:39): [True: 494, False: 20]
  ------------------
10215|    900|            (profile != EEsProfile && version >= 130)) {
  ------------------
  |  Branch (10215:14): [True: 406, False: 20]
  |  Branch (10215:39): [True: 406, False: 0]
  ------------------
10216|    900|            symbolTable.setFunctionExtensions("textureGather4x1QCOM", 1, &E_GL_QCOM_image_processing3);
10217|    900|            symbolTable.setFunctionExtensions("textureGatherV2QCOM", 1, &E_GL_QCOM_image_processing3);
10218|    900|            symbolTable.setFunctionExtensions("textureGatherH2QCOM", 1, &E_GL_QCOM_image_processing3);
10219|    900|            symbolTable.setFunctionExtensions("textureGatherDQCOM", 1, &E_GL_QCOM_image_processing3);
10220|    900|            symbolTable.setFunctionExtensions("textureGather4x1OffsetQCOM", 1, &E_GL_QCOM_image_processing3);
10221|    900|            symbolTable.setFunctionExtensions("textureGatherV2OffsetQCOM", 1, &E_GL_QCOM_image_processing3);
10222|    900|            symbolTable.setFunctionExtensions("textureGatherH2OffsetQCOM", 1, &E_GL_QCOM_image_processing3);
10223|    900|            symbolTable.setFunctionExtensions("textureGatherDOffsetQCOM", 1, &E_GL_QCOM_image_processing3);
10224|    900|        }
10225|       |
10226|    920|        break;
10227|       |
10228|    942|    case EShLangCompute:
  ------------------
  |  Branch (10228:5): [True: 942, False: 8.45k]
  ------------------
10229|    942|        BuiltInVariable("gl_NumWorkGroups",         EbvNumWorkGroups,        symbolTable);
10230|    942|        BuiltInVariable("gl_WorkGroupSize",         EbvWorkGroupSize,        symbolTable);
10231|    942|        BuiltInVariable("gl_WorkGroupID",           EbvWorkGroupId,          symbolTable);
10232|    942|        BuiltInVariable("gl_LocalInvocationID",     EbvLocalInvocationId,    symbolTable);
10233|    942|        BuiltInVariable("gl_GlobalInvocationID",    EbvGlobalInvocationId,   symbolTable);
10234|    942|        BuiltInVariable("gl_LocalInvocationIndex",  EbvLocalInvocationIndex, symbolTable);
10235|    942|        BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
10236|    942|        BuiltInVariable("gl_ViewIndex",             EbvViewIndex,            symbolTable);
10237|       |
10238|    942|        if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (10238:14): [True: 448, False: 494]
  |  Branch (10238:39): [True: 448, False: 0]
  ------------------
10239|    942|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (10239:14): [True: 494, False: 0]
  |  Branch (10239:39): [True: 494, False: 0]
  ------------------
10240|    942|            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
10241|    942|            symbolTable.setVariableExtensions("gl_ViewIndex",    1, &E_GL_EXT_multiview);
10242|    942|        }
10243|       |
10244|    942|        if (profile != EEsProfile && version < 430) {
  ------------------
  |  Branch (10244:13): [True: 448, False: 494]
  |  Branch (10244:38): [True: 1, False: 447]
  ------------------
10245|      1|            symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_ARB_compute_shader);
10246|      1|            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_ARB_compute_shader);
10247|      1|            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_ARB_compute_shader);
10248|      1|            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_ARB_compute_shader);
10249|      1|            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_ARB_compute_shader);
10250|      1|            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_ARB_compute_shader);
10251|       |
10252|      1|            symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupCount",       1, &E_GL_ARB_compute_shader);
10253|      1|            symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupSize",        1, &E_GL_ARB_compute_shader);
10254|      1|            symbolTable.setVariableExtensions("gl_MaxComputeUniformComponents",    1, &E_GL_ARB_compute_shader);
10255|      1|            symbolTable.setVariableExtensions("gl_MaxComputeTextureImageUnits",    1, &E_GL_ARB_compute_shader);
10256|      1|            symbolTable.setVariableExtensions("gl_MaxComputeImageUniforms",        1, &E_GL_ARB_compute_shader);
10257|      1|            symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounters",       1, &E_GL_ARB_compute_shader);
10258|      1|            symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounterBuffers", 1, &E_GL_ARB_compute_shader);
10259|       |
10260|      1|            symbolTable.setFunctionExtensions("barrier",                    1, &E_GL_ARB_compute_shader);
10261|      1|            symbolTable.setFunctionExtensions("memoryBarrierAtomicCounter", 1, &E_GL_ARB_compute_shader);
10262|      1|            symbolTable.setFunctionExtensions("memoryBarrierBuffer",        1, &E_GL_ARB_compute_shader);
10263|      1|            symbolTable.setFunctionExtensions("memoryBarrierImage",         1, &E_GL_ARB_compute_shader);
10264|      1|            symbolTable.setFunctionExtensions("memoryBarrierShared",        1, &E_GL_ARB_compute_shader);
10265|      1|            symbolTable.setFunctionExtensions("groupMemoryBarrier",         1, &E_GL_ARB_compute_shader);
10266|      1|        }
10267|       |
10268|    942|        symbolTable.setFunctionExtensions("controlBarrier",                 1, &E_GL_KHR_memory_scope_semantics);
10269|    942|        symbolTable.setFunctionExtensions("debugPrintfEXT",                 1, &E_GL_EXT_debug_printf);
10270|    942|        symbolTable.setFunctionExtensions("abortEXT",                       1, &E_GL_EXT_abort);
10271|    942|        symbolTable.setFunctionExtensions("controlBarrierArrive",           1, &E_GL_EXT_split_barrier);
10272|    942|        symbolTable.setFunctionExtensions("controlBarrierWait",             1, &E_GL_EXT_split_barrier);
10273|       |
10274|       |        // GL_ARB_shader_ballot
10275|    942|        if (profile != EEsProfile) {
  ------------------
  |  Branch (10275:13): [True: 448, False: 494]
  ------------------
10276|    448|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
10277|    448|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
10278|    448|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
10279|    448|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
10280|    448|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
10281|    448|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
10282|    448|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
10283|       |
10284|    448|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
10285|    448|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
10286|    448|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
10287|    448|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
10288|    448|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
10289|    448|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
10290|       |
10291|    448|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10291:17): [True: 53, False: 395]
  ------------------
10292|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10293|     53|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10294|     53|                if (language == EShLangFragment)
  ------------------
  |  Branch (10294:21): [True: 0, False: 53]
  ------------------
10295|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10296|     53|            }
10297|    395|            else
10298|    395|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10299|    448|        }
10300|       |
10301|       |        // GL_KHR_shader_subgroup
10302|    942|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10302:14): [True: 494, False: 448]
  |  Branch (10302:39): [True: 494, False: 0]
  ------------------
10303|    942|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10303:14): [True: 448, False: 0]
  |  Branch (10303:39): [True: 448, False: 0]
  ------------------
10304|    942|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
10305|    942|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
10306|    942|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10307|    942|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10308|    942|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10309|    942|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10310|    942|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10311|       |
10312|    942|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
10313|    942|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
10314|    942|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
10315|    942|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
10316|    942|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
10317|    942|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
10318|    942|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
10319|       |
10320|       |            // GL_NV_shader_sm_builtins
10321|    942|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
10322|    942|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
10323|    942|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
10324|    942|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
10325|    942|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
10326|    942|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
10327|    942|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
10328|    942|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
10329|       |
10330|       |            // GL_ARM_shader_core_builtins
10331|    942|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
10332|    942|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
10333|    942|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10334|    942|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
10335|    942|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10336|       |
10337|    942|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
10338|    942|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
10339|    942|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
10340|    942|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
10341|    942|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
10342|    942|        }
10343|       |
10344|       |        // GL_KHR_shader_subgroup
10345|    942|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10345:14): [True: 494, False: 448]
  |  Branch (10345:39): [True: 494, False: 0]
  ------------------
10346|    942|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10346:14): [True: 448, False: 0]
  |  Branch (10346:39): [True: 448, False: 0]
  ------------------
10347|    942|            symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
10348|    942|            symbolTable.setVariableExtensions("gl_SubgroupID",   1, &E_GL_KHR_shader_subgroup_basic);
10349|       |
10350|    942|            BuiltInVariable("gl_NumSubgroups", EbvNumSubgroups, symbolTable);
10351|    942|            BuiltInVariable("gl_SubgroupID",   EbvSubgroupID,   symbolTable);
10352|       |
10353|    942|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
10354|    942|        }
10355|       |
10356|    942|        {
10357|    942|            const char *coopExt[2] = { E_GL_NV_cooperative_matrix, E_GL_NV_integer_cooperative_matrix };
10358|    942|            symbolTable.setFunctionExtensions("coopMatLoadNV",   2, coopExt);
10359|    942|            symbolTable.setFunctionExtensions("coopMatStoreNV",  2, coopExt);
10360|    942|            symbolTable.setFunctionExtensions("coopMatMulAddNV", 2, coopExt);
10361|    942|        }
10362|       |
10363|    942|        {
10364|    942|            auto coopMatKHRCallback = [](const char *name) -> std::vector<const char *> {
10365|    942|                std::vector<const char *> ret;
10366|    942|                if (strstr(name, "u64") != nullptr) {
10367|    942|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10368|    942|                } else {
10369|    942|                    ret.push_back(E_GL_KHR_cooperative_matrix);
10370|    942|                }
10371|    942|                return ret;
10372|    942|            };
10373|    942|            auto coopMat2NVCallback = [](const char *name) -> std::vector<const char *> {
10374|    942|                std::vector<const char *> ret;
10375|    942|                if (strstr(name, "u64") != nullptr) {
10376|    942|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10377|    942|                } else {
10378|    942|                    ret.push_back(E_GL_NV_cooperative_matrix2);
10379|    942|                }
10380|    942|                return ret;
10381|    942|            };
10382|       |
10383|    942|            symbolTable.setFunctionExtensionsCallback("coopMatLoad",   coopMatKHRCallback);
10384|    942|            symbolTable.setFunctionExtensionsCallback("coopMatStore",  coopMatKHRCallback);
10385|    942|            symbolTable.setFunctionExtensions("coopMatMulAdd", 1, &E_GL_KHR_cooperative_matrix);
10386|       |
10387|    942|            symbolTable.setFunctionExtensionsCallback("coopMatLoadTensorNV",   coopMat2NVCallback);
10388|    942|            symbolTable.setFunctionExtensionsCallback("coopMatStoreTensorNV",   coopMat2NVCallback);
10389|       |
10390|    942|            symbolTable.setFunctionExtensions("coopMatReduceNV",   1, &E_GL_NV_cooperative_matrix2);
10391|    942|            symbolTable.setFunctionExtensions("coopMatPerElementNV",  1, &E_GL_NV_cooperative_matrix2);
10392|    942|            symbolTable.setFunctionExtensions("coopMatTransposeNV",   1, &E_GL_NV_cooperative_matrix2);
10393|       |            
10394|    942|            symbolTable.setFunctionExtensions("createTensorLayoutNV",           1, &E_GL_NV_cooperative_matrix2);
10395|    942|            symbolTable.setFunctionExtensions("setTensorLayoutBlockSizeNV",     1, &E_GL_NV_cooperative_matrix2);
10396|    942|            symbolTable.setFunctionExtensions("setTensorLayoutDimensionNV",     1, &E_GL_NV_cooperative_matrix2);
10397|    942|            symbolTable.setFunctionExtensions("setTensorLayoutStrideNV",        1, &E_GL_NV_cooperative_matrix2);
10398|    942|            symbolTable.setFunctionExtensions("sliceTensorLayoutNV",            1, &E_GL_NV_cooperative_matrix2);
10399|    942|            symbolTable.setFunctionExtensions("setTensorLayoutClampValueNV",    1, &E_GL_NV_cooperative_matrix2);
10400|       |
10401|    942|            symbolTable.setFunctionExtensions("createTensorViewNV",             1, &E_GL_NV_cooperative_matrix2);
10402|    942|            symbolTable.setFunctionExtensions("setTensorViewDimensionsNV",      1, &E_GL_NV_cooperative_matrix2);
10403|    942|            symbolTable.setFunctionExtensions("setTensorViewStrideNV",          1, &E_GL_NV_cooperative_matrix2);
10404|    942|            symbolTable.setFunctionExtensions("setTensorViewClipNV",            1, &E_GL_NV_cooperative_matrix2);
10405|    942|        }
10406|       |
10407|    942|        {
10408|    942|            symbolTable.setFunctionExtensions("coopMatReduceEXT",           1, &E_GL_EXT_cooperative_matrix_maintenance1);
10409|    942|            symbolTable.setFunctionExtensions("coopMatPerElementEXT",       1, &E_GL_EXT_cooperative_matrix_maintenance1);
10410|    942|            symbolTable.setFunctionExtensions("coopMatTransposeEXT",        1, &E_GL_EXT_cooperative_matrix_maintenance1);
10411|    942|            symbolTable.setFunctionExtensions("coopMatGetCoordinateEXT",    1, &E_GL_EXT_cooperative_matrix_maintenance1);
10412|    942|        }
10413|       |
10414|    942|        {
10415|    942|            symbolTable.setFunctionExtensions("tensorReadARM",   1, &E_GL_ARM_tensors);
10416|    942|            symbolTable.setFunctionExtensions("tensorWriteARM",  1, &E_GL_ARM_tensors);
10417|    942|            symbolTable.setFunctionExtensions("tensorSizeARM",   1, &E_GL_ARM_tensors);
10418|    942|        }
10419|    942|        {
10420|    942|            auto coopVecCallback = [](const char *name) -> std::vector<const char *> {
10421|    942|                std::vector<const char *> ret;
10422|       |                // This looks for u64 as the last parameter (the offset)
10423|    942|                if (strstr(name, "u641;") != nullptr) {
10424|    942|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10425|    942|                } else {
10426|    942|                    ret.push_back(E_GL_NV_cooperative_vector);
10427|    942|                }
10428|    942|                return ret;
10429|    942|            };
10430|    942|            symbolTable.setFunctionExtensionsCallback("coopVecMatMulNV", coopVecCallback);
10431|    942|            symbolTable.setFunctionExtensionsCallback("coopVecMatMulAddNV", coopVecCallback);
10432|    942|            symbolTable.setFunctionExtensionsCallback("coopVecLoadNV", coopVecCallback);
10433|    942|            symbolTable.setFunctionExtensionsCallback("coopVecStoreNV", coopVecCallback);
10434|    942|            symbolTable.setFunctionExtensionsCallback("coopVecOuterProductAccumulateNV", coopVecCallback);
10435|    942|            symbolTable.setFunctionExtensionsCallback("coopVecReduceSumAccumulateNV", coopVecCallback);
10436|    942|        }
10437|       |
10438|    942|        {
10439|    942|          symbolTable.setFunctionExtensions("bitcastQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10440|    942|          symbolTable.setFunctionExtensions("extractSubArrayQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10441|    942|          symbolTable.setFunctionExtensions("vectorToCoopmatQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10442|    942|          symbolTable.setFunctionExtensions("coopmatToVectorQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10443|    942|        }
10444|       |
10445|    942|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (10445:14): [True: 448, False: 494]
  |  Branch (10445:39): [True: 444, False: 4]
  |  Branch (10445:59): [True: 494, False: 4]
  |  Branch (10445:84): [True: 3, False: 491]
  ------------------
10446|    447|            const char* const derivativeExts[] = { E_GL_NV_compute_shader_derivatives, E_GL_KHR_compute_shader_derivatives };
10447|    447|            if (language == EShLangCompute) {
  ------------------
  |  Branch (10447:17): [True: 447, False: 0]
  ------------------
10448|    447|                symbolTable.setFunctionExtensions("dFdx",                   2, derivativeExts);
10449|    447|                symbolTable.setFunctionExtensions("dFdy",                   2, derivativeExts);
10450|    447|                symbolTable.setFunctionExtensions("fwidth",                 2, derivativeExts);
10451|    447|                symbolTable.setFunctionExtensions("dFdxFine",               2, derivativeExts);
10452|    447|                symbolTable.setFunctionExtensions("dFdyFine",               2, derivativeExts);
10453|    447|                symbolTable.setFunctionExtensions("fwidthFine",             2, derivativeExts);
10454|    447|                symbolTable.setFunctionExtensions("dFdxCoarse",             2, derivativeExts);
10455|    447|                symbolTable.setFunctionExtensions("dFdyCoarse",             2, derivativeExts);
10456|    447|                symbolTable.setFunctionExtensions("fwidthCoarse",           2, derivativeExts);
10457|    447|            } else if (language == EShLangTask || language == EShLangMesh) {
  ------------------
  |  Branch (10457:24): [True: 0, False: 0]
  |  Branch (10457:51): [True: 0, False: 0]
  ------------------
10458|      0|                symbolTable.setFunctionExtensions("dFdx",                   1, &E_GL_KHR_compute_shader_derivatives);
10459|      0|                symbolTable.setFunctionExtensions("dFdy",                   1, &E_GL_KHR_compute_shader_derivatives);
10460|      0|                symbolTable.setFunctionExtensions("fwidth",                 1, &E_GL_KHR_compute_shader_derivatives);
10461|      0|                symbolTable.setFunctionExtensions("dFdxFine",               1, &E_GL_KHR_compute_shader_derivatives);
10462|      0|                symbolTable.setFunctionExtensions("dFdyFine",               1, &E_GL_KHR_compute_shader_derivatives);
10463|      0|                symbolTable.setFunctionExtensions("fwidthFine",             1, &E_GL_KHR_compute_shader_derivatives);
10464|      0|                symbolTable.setFunctionExtensions("dFdxCoarse",             1, &E_GL_KHR_compute_shader_derivatives);
10465|      0|                symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_KHR_compute_shader_derivatives);
10466|      0|                symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_KHR_compute_shader_derivatives);
10467|      0|            }
10468|    447|        }
10469|       |
10470|    942|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10470:14): [True: 494, False: 448]
  |  Branch (10470:39): [True: 494, False: 0]
  ------------------
10471|    938|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10471:14): [True: 448, False: 0]
  |  Branch (10471:39): [True: 444, False: 4]
  ------------------
10472|    938|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10473|    938|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10474|    938|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10475|    938|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10476|    938|        }
10477|       |
10478|    942|        if ((profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (10478:14): [True: 448, False: 494]
  |  Branch (10478:39): [True: 1, False: 447]
  ------------------
10479|      1|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap);
10480|      1|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap);
10481|      1|        }
10482|       |
10483|       |        // GL_EXT_integer_dot_product
10484|    942|        if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (10484:14): [True: 494, False: 448]
  |  Branch (10484:39): [True: 494, False: 0]
  ------------------
10485|    938|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10485:14): [True: 448, False: 0]
  |  Branch (10485:39): [True: 444, False: 4]
  ------------------
10486|    938|            symbolTable.setFunctionExtensions("dotEXT", 1, &E_GL_EXT_integer_dot_product);
10487|    938|            symbolTable.setFunctionExtensions("dotPacked4x8EXT", 1, &E_GL_EXT_integer_dot_product);
10488|    938|            symbolTable.setFunctionExtensions("dotAccSatEXT", 1, &E_GL_EXT_integer_dot_product);
10489|    938|            symbolTable.setFunctionExtensions("dotPacked4x8AccSatEXT", 1, &E_GL_EXT_integer_dot_product);
10490|    938|        }
10491|       |
10492|    942|        {
10493|    942|            symbolTable.setFunctionExtensions("bfloat16BitsToIntEXT", 1, &E_GL_EXT_bfloat16);
10494|    942|            symbolTable.setFunctionExtensions("bfloat16BitsToUintEXT", 1, &E_GL_EXT_bfloat16);
10495|    942|            symbolTable.setFunctionExtensions("intBitsToBFloat16EXT", 1, &E_GL_EXT_bfloat16);
10496|    942|            symbolTable.setFunctionExtensions("uintBitsToBFloat16EXT", 1, &E_GL_EXT_bfloat16);
10497|       |
10498|    942|            symbolTable.setFunctionExtensions("floate5m2BitsToIntEXT", 1, &E_GL_EXT_float_e5m2);
10499|    942|            symbolTable.setFunctionExtensions("floate5m2BitsToUintEXT", 1, &E_GL_EXT_float_e5m2);
10500|    942|            symbolTable.setFunctionExtensions("intBitsToFloate5m2EXT", 1, &E_GL_EXT_float_e5m2);
10501|    942|            symbolTable.setFunctionExtensions("uintBitsToFloate5m2EXT", 1, &E_GL_EXT_float_e5m2);
10502|       |
10503|    942|            symbolTable.setFunctionExtensions("floate4m3BitsToIntEXT", 1, &E_GL_EXT_float_e4m3);
10504|    942|            symbolTable.setFunctionExtensions("floate4m3BitsToUintEXT", 1, &E_GL_EXT_float_e4m3);
10505|    942|            symbolTable.setFunctionExtensions("intBitsToFloate4m3EXT", 1, &E_GL_EXT_float_e4m3);
10506|    942|            symbolTable.setFunctionExtensions("uintBitsToFloate4m3EXT", 1, &E_GL_EXT_float_e4m3);
10507|       |
10508|    942|            const char *float8exts[] = {E_GL_EXT_float_e5m2, E_GL_EXT_float_e4m3};
10509|    942|            symbolTable.setFunctionExtensions("saturatedConvertEXT", 2, float8exts);
10510|       |
10511|    942|            symbolTable.setFunctionExtensions("floatue8m0BitsToIntEXT", 1, &E_GL_EXT_float_ue8m0);
10512|    942|            symbolTable.setFunctionExtensions("floatue8m0BitsToUintEXT", 1, &E_GL_EXT_float_ue8m0);
10513|    942|            symbolTable.setFunctionExtensions("intBitsToFloatue8m0EXT", 1, &E_GL_EXT_float_ue8m0);
10514|    942|            symbolTable.setFunctionExtensions("uintBitsToFloatue8m0EXT", 1, &E_GL_EXT_float_ue8m0);
10515|       |
10516|    942|            symbolTable.setFunctionExtensions("floatmxint8BitsToIntEXT", 1, &E_GL_EXT_float_mxint8);
10517|    942|            symbolTable.setFunctionExtensions("floatmxint8BitsToUintEXT", 1, &E_GL_EXT_float_mxint8);
10518|    942|            symbolTable.setFunctionExtensions("intBitsToFloatmxint8EXT", 1, &E_GL_EXT_float_mxint8);
10519|    942|            symbolTable.setFunctionExtensions("uintBitsToFloatmxint8EXT", 1, &E_GL_EXT_float_mxint8);
10520|       |
10521|    942|            symbolTable.setFunctionExtensions("unpackFloat2xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10522|    942|            symbolTable.setFunctionExtensions("unpackFloat4xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10523|    942|            symbolTable.setFunctionExtensions("unpackFloat8xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10524|    942|            symbolTable.setFunctionExtensions("unpackFloat16xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10525|    942|            symbolTable.setFunctionExtensions("packFloat2xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10526|    942|            symbolTable.setFunctionExtensions("packFloat4xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10527|    942|            symbolTable.setFunctionExtensions("packFloat8xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10528|    942|            symbolTable.setFunctionExtensions("packFloat16xfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10529|       |
10530|    942|            symbolTable.setFunctionExtensions("unpackFloat4xfe3m2EXT", 1, &E_GL_EXT_float_e3m2);
10531|    942|            symbolTable.setFunctionExtensions("unpackFloat8xfe3m2EXT", 1, &E_GL_EXT_float_e3m2);
10532|    942|            symbolTable.setFunctionExtensions("unpackFloat16xfe3m2EXT", 1, &E_GL_EXT_float_e3m2);
10533|    942|            symbolTable.setFunctionExtensions("packFloat4xfe3m2EXT", 1, &E_GL_EXT_float_e3m2);
10534|    942|            symbolTable.setFunctionExtensions("packFloat8xfe3m2EXT", 1, &E_GL_EXT_float_e3m2);
10535|    942|            symbolTable.setFunctionExtensions("packFloat16xfe3m2EXT", 1, &E_GL_EXT_float_e3m2);
10536|       |
10537|    942|            symbolTable.setFunctionExtensions("unpackFloat4xfe2m3EXT", 1, &E_GL_EXT_float_e2m3);
10538|    942|            symbolTable.setFunctionExtensions("unpackFloat8xfe2m3EXT", 1, &E_GL_EXT_float_e2m3);
10539|    942|            symbolTable.setFunctionExtensions("unpackFloat16xfe2m3EXT", 1, &E_GL_EXT_float_e2m3);
10540|    942|            symbolTable.setFunctionExtensions("packFloat4xfe2m3EXT", 1, &E_GL_EXT_float_e2m3);
10541|    942|            symbolTable.setFunctionExtensions("packFloat8xfe2m3EXT", 1, &E_GL_EXT_float_e2m3);
10542|    942|            symbolTable.setFunctionExtensions("packFloat16xfe2m3EXT", 1, &E_GL_EXT_float_e2m3);
10543|       |
10544|    942|            symbolTable.setFunctionExtensions("bitcastExtractfe2m1EXT", 1, &E_GL_EXT_float_e2m1);
10545|    942|            symbolTable.setFunctionExtensions("bitcastExtractfe3m2EXT", 1, &E_GL_EXT_float_e3m2);
10546|    942|            symbolTable.setFunctionExtensions("bitcastExtractfe2m3EXT", 1, &E_GL_EXT_float_e2m3);
10547|    942|        }
10548|       |
10549|       |        // E_SPV_QCOM_tile_shading
10550|    942|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10550:14): [True: 494, False: 448]
  |  Branch (10550:39): [True: 494, False: 0]
  ------------------
10551|    495|            (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (10551:14): [True: 448, False: 0]
  |  Branch (10551:39): [True: 1, False: 447]
  ------------------
10552|    495|            BuiltInVariable("gl_TileOffsetQCOM",        EbvTileOffsetQCOM,      symbolTable);
10553|    495|            BuiltInVariable("gl_TileDimensionQCOM",     EbvTileDimensionQCOM,   symbolTable);
10554|    495|            BuiltInVariable("gl_TileApronSizeQCOM",     EbvTileApronSizeQCOM,   symbolTable);
10555|       |
10556|    495|            symbolTable.setVariableExtensions("gl_TileOffsetQCOM",        1, &E_GL_QCOM_tile_shading);
10557|    495|            symbolTable.setVariableExtensions("gl_TileDimensionQCOM",     1, &E_GL_QCOM_tile_shading);
10558|    495|            symbolTable.setVariableExtensions("gl_TileApronSizeQCOM",     1, &E_GL_QCOM_tile_shading);
10559|    495|        }
10560|    942|        break;
10561|       |
10562|    444|    case EShLangRayGen:
  ------------------
  |  Branch (10562:5): [True: 444, False: 8.94k]
  ------------------
10563|    888|    case EShLangIntersect:
  ------------------
  |  Branch (10563:5): [True: 444, False: 8.94k]
  ------------------
10564|  1.33k|    case EShLangAnyHit:
  ------------------
  |  Branch (10564:5): [True: 444, False: 8.94k]
  ------------------
10565|  1.77k|    case EShLangClosestHit:
  ------------------
  |  Branch (10565:5): [True: 444, False: 8.94k]
  ------------------
10566|  2.22k|    case EShLangMiss:
  ------------------
  |  Branch (10566:5): [True: 444, False: 8.94k]
  ------------------
10567|  2.66k|    case EShLangCallable:
  ------------------
  |  Branch (10567:5): [True: 444, False: 8.94k]
  ------------------
10568|  2.66k|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (10568:13): [True: 2.66k, False: 0]
  |  Branch (10568:38): [True: 6, False: 2.65k]
  ------------------
10569|      6|            const char *rtexts[] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
10570|      6|            symbolTable.setVariableExtensions("gl_LaunchIDNV", 1, &E_GL_NV_ray_tracing);
10571|      6|            symbolTable.setVariableExtensions("gl_LaunchIDEXT", 1, &E_GL_EXT_ray_tracing);
10572|      6|            symbolTable.setVariableExtensions("gl_LaunchSizeNV", 1, &E_GL_NV_ray_tracing);
10573|      6|            symbolTable.setVariableExtensions("gl_LaunchSizeEXT", 1, &E_GL_EXT_ray_tracing);
10574|      6|            symbolTable.setVariableExtensions("gl_PrimitiveID", 2, rtexts);
10575|      6|            symbolTable.setVariableExtensions("gl_InstanceID", 2, rtexts);
10576|      6|            symbolTable.setVariableExtensions("gl_InstanceCustomIndexNV", 1, &E_GL_NV_ray_tracing);
10577|      6|            symbolTable.setVariableExtensions("gl_InstanceCustomIndexEXT", 1, &E_GL_EXT_ray_tracing);
10578|      6|            symbolTable.setVariableExtensions("gl_GeometryIndexEXT", 1, &E_GL_EXT_ray_tracing);
10579|      6|            symbolTable.setVariableExtensions("gl_WorldRayOriginNV", 1, &E_GL_NV_ray_tracing);
10580|      6|            symbolTable.setVariableExtensions("gl_WorldRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
10581|      6|            symbolTable.setVariableExtensions("gl_WorldRayDirectionNV", 1, &E_GL_NV_ray_tracing);
10582|      6|            symbolTable.setVariableExtensions("gl_WorldRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
10583|      6|            symbolTable.setVariableExtensions("gl_ObjectRayOriginNV", 1, &E_GL_NV_ray_tracing);
10584|      6|            symbolTable.setVariableExtensions("gl_ObjectRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
10585|      6|            symbolTable.setVariableExtensions("gl_ObjectRayDirectionNV", 1, &E_GL_NV_ray_tracing);
10586|      6|            symbolTable.setVariableExtensions("gl_ObjectRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
10587|      6|            symbolTable.setVariableExtensions("gl_RayTminNV", 1, &E_GL_NV_ray_tracing);
10588|      6|            symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing);
10589|      6|            symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing);
10590|      6|            symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing);
10591|      6|            symbolTable.setVariableExtensions("gl_CullMaskEXT", 1, &E_GL_EXT_ray_cull_mask);
10592|      6|            symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing);
10593|      6|            symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing);
10594|      6|            symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing);
10595|      6|            symbolTable.setVariableExtensions("gl_HitKindEXT", 1, &E_GL_EXT_ray_tracing);
10596|      6|            symbolTable.setVariableExtensions("gl_ObjectToWorldNV", 1, &E_GL_NV_ray_tracing);
10597|      6|            symbolTable.setVariableExtensions("gl_ObjectToWorldEXT", 1, &E_GL_EXT_ray_tracing);
10598|      6|            symbolTable.setVariableExtensions("gl_ObjectToWorld3x4EXT", 1, &E_GL_EXT_ray_tracing);
10599|      6|            symbolTable.setVariableExtensions("gl_WorldToObjectNV", 1, &E_GL_NV_ray_tracing);
10600|      6|            symbolTable.setVariableExtensions("gl_WorldToObjectEXT", 1, &E_GL_EXT_ray_tracing);
10601|      6|            symbolTable.setVariableExtensions("gl_WorldToObject3x4EXT", 1, &E_GL_EXT_ray_tracing);
10602|      6|            symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing);
10603|      6|            symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing);
10604|      6|            symbolTable.setVariableExtensions("gl_CurrentRayTimeNV", 1, &E_GL_NV_ray_tracing_motion_blur);
10605|      6|            symbolTable.setVariableExtensions("gl_HitTriangleVertexPositionsEXT", 1, &E_GL_EXT_ray_tracing_position_fetch);
10606|      6|            symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexPositionsNV", 1, &E_GL_NV_displacement_micromap);
10607|      6|            symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexBarycentricsNV", 1, &E_GL_NV_displacement_micromap);
10608|      6|            symbolTable.setVariableExtensions("gl_ClusterIDNV", 1, &E_GL_NV_cluster_acceleration_structure);
10609|      6|            symbolTable.setVariableExtensions("gl_HitKindSphereNV", 1, &E_GL_NV_linear_swept_spheres);
10610|      6|            symbolTable.setVariableExtensions("gl_HitKindLSSNV", 1, &E_GL_NV_linear_swept_spheres);
10611|      6|            symbolTable.setVariableExtensions("gl_HitSpherePositionNV", 1, &E_GL_NV_linear_swept_spheres);
10612|      6|            symbolTable.setVariableExtensions("gl_HitSphereRadiusNV", 1, &E_GL_NV_linear_swept_spheres);
10613|      6|            symbolTable.setVariableExtensions("gl_HitLSSPositionNV", 1, &E_GL_NV_linear_swept_spheres);
10614|      6|            symbolTable.setVariableExtensions("gl_HitLSSRadiiNV", 1, &E_GL_NV_linear_swept_spheres);
10615|       |
10616|      6|            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
10617|       |
10618|       |
10619|      6|            symbolTable.setFunctionExtensions("traceNV", 1, &E_GL_NV_ray_tracing);
10620|      6|            symbolTable.setFunctionExtensions("traceRayMotionNV", 1, &E_GL_NV_ray_tracing_motion_blur);
10621|      6|            symbolTable.setFunctionExtensions("traceRayEXT", 1, &E_GL_EXT_ray_tracing);
10622|      6|            symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing);
10623|      6|            symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
10624|      6|            symbolTable.setFunctionExtensions("ignoreIntersectionNV", 1, &E_GL_NV_ray_tracing);
10625|      6|            symbolTable.setFunctionExtensions("terminateRayNV", 1, &E_GL_NV_ray_tracing);
10626|      6|            symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing);
10627|      6|            symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing);
10628|       |
10629|      6|            symbolTable.setFunctionExtensions("hitObjectTraceRayNV", 1, &E_GL_NV_shader_invocation_reorder);
10630|      6|            symbolTable.setFunctionExtensions("hitObjectTraceRayMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10631|      6|            symbolTable.setFunctionExtensions("hitObjectRecordHitNV", 1, &E_GL_NV_shader_invocation_reorder);
10632|      6|            symbolTable.setFunctionExtensions("hitObjectRecordHitMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10633|      6|            symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10634|      6|            symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10635|      6|            symbolTable.setFunctionExtensions("hitObjectRecordMissNV", 1, &E_GL_NV_shader_invocation_reorder);
10636|      6|            symbolTable.setFunctionExtensions("hitObjectRecordMissMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10637|      6|            symbolTable.setFunctionExtensions("hitObjectRecordEmptyNV", 1, &E_GL_NV_shader_invocation_reorder);
10638|      6|            symbolTable.setFunctionExtensions("hitObjectExecuteShaderNV", 1, &E_GL_NV_shader_invocation_reorder);
10639|      6|            symbolTable.setFunctionExtensions("hitObjectIsEmptyNV", 1, &E_GL_NV_shader_invocation_reorder);
10640|      6|            symbolTable.setFunctionExtensions("hitObjectIsMissNV", 1, &E_GL_NV_shader_invocation_reorder);
10641|      6|            symbolTable.setFunctionExtensions("hitObjectIsHitNV", 1, &E_GL_NV_shader_invocation_reorder);
10642|      6|            symbolTable.setFunctionExtensions("hitObjectGetRayTMinNV", 1, &E_GL_NV_shader_invocation_reorder);
10643|      6|            symbolTable.setFunctionExtensions("hitObjectGetRayTMaxNV", 1, &E_GL_NV_shader_invocation_reorder);
10644|      6|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder);
10645|      6|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder);
10646|      6|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder);
10647|      6|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder);
10648|      6|            symbolTable.setFunctionExtensions("hitObjectGetWorldToObjectNV", 1, &E_GL_NV_shader_invocation_reorder);
10649|      6|            symbolTable.setFunctionExtensions("hitObjectGetbjectToWorldNV", 1, &E_GL_NV_shader_invocation_reorder);
10650|      6|            symbolTable.setFunctionExtensions("hitObjectGetInstanceCustomIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10651|      6|            symbolTable.setFunctionExtensions("hitObjectGetInstanceIdNV", 1, &E_GL_NV_shader_invocation_reorder);
10652|      6|            symbolTable.setFunctionExtensions("hitObjectGetGeometryIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10653|      6|            symbolTable.setFunctionExtensions("hitObjectGetPrimitiveIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10654|      6|            symbolTable.setFunctionExtensions("hitObjectGetHitKindNV", 1, &E_GL_NV_shader_invocation_reorder);
10655|      6|            symbolTable.setFunctionExtensions("hitObjectGetAttributesNV", 1, &E_GL_NV_shader_invocation_reorder);
10656|      6|            symbolTable.setFunctionExtensions("hitObjectGetCurrentTimeNV", 1, &E_GL_NV_shader_invocation_reorder);
10657|      6|            symbolTable.setFunctionExtensions("hitObjectGetShaderBindingTableRecordIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10658|      6|            symbolTable.setFunctionExtensions("hitObjectGetShaderRecordBufferHandleNV", 1, &E_GL_NV_shader_invocation_reorder);
10659|      6|            symbolTable.setFunctionExtensions("hitObjectGetClusterIdNV", 1, &E_GL_NV_cluster_acceleration_structure);
10660|      6|            symbolTable.setFunctionExtensions("reorderThreadNV", 1, &E_GL_NV_shader_invocation_reorder);
10661|      6|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap);
10662|      6|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap);
10663|      6|            symbolTable.setFunctionExtensions("hitObjectGetSpherePositionNV", 1, &E_GL_NV_linear_swept_spheres);
10664|      6|            symbolTable.setFunctionExtensions("hitObjectGetSphereRadiusNV", 1, &E_GL_NV_linear_swept_spheres);
10665|      6|            symbolTable.setFunctionExtensions("hitObjectGetLSSPositionsNV", 1, &E_GL_NV_linear_swept_spheres);
10666|      6|            symbolTable.setFunctionExtensions("hitObjectGetLSSRadiiNV", 1, &E_GL_NV_linear_swept_spheres);
10667|      6|            symbolTable.setFunctionExtensions("hitObjectIsSphereHitNV", 1, &E_GL_NV_linear_swept_spheres);
10668|      6|            symbolTable.setFunctionExtensions("hitObjectIsLSSHitNV", 1, &E_GL_NV_linear_swept_spheres);
10669|      6|            symbolTable.setFunctionExtensions("hitObjectTraceRayEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10670|      6|            symbolTable.setFunctionExtensions("hitObjectTraceRayMotionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10671|      6|            symbolTable.setFunctionExtensions("hitObjectRecordMissEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10672|      6|            symbolTable.setFunctionExtensions("hitObjectRecordMissMotionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10673|      6|            symbolTable.setFunctionExtensions("hitObjectRecordEmptyEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10674|      6|            symbolTable.setFunctionExtensions("hitObjectExecuteShaderEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10675|      6|            symbolTable.setFunctionExtensions("hitObjectIsEmptyEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10676|      6|            symbolTable.setFunctionExtensions("hitObjectIsMissEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10677|      6|            symbolTable.setFunctionExtensions("hitObjectIsHitEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10678|      6|            symbolTable.setFunctionExtensions("hitObjectGetRayTMinEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10679|      6|            symbolTable.setFunctionExtensions("hitObjectGetRayTMaxEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10680|      6|            symbolTable.setFunctionExtensions("hitObjectGetRayFlagsEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10681|      6|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayOriginEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10682|      6|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayDirectionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10683|      6|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayOriginEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10684|      6|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayDirectionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10685|      6|            symbolTable.setFunctionExtensions("hitObjectGetWorldToObjectEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10686|      6|            symbolTable.setFunctionExtensions("hitObjectGetObjectToWorldEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10687|      6|            symbolTable.setFunctionExtensions("hitObjectGetInstanceCustomIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10688|      6|            symbolTable.setFunctionExtensions("hitObjectGetInstanceIdEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10689|      6|            symbolTable.setFunctionExtensions("hitObjectGetGeometryIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10690|      6|            symbolTable.setFunctionExtensions("hitObjectGetPrimitiveIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10691|      6|            symbolTable.setFunctionExtensions("hitObjectGetHitKindEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10692|      6|            symbolTable.setFunctionExtensions("hitObjectGetAttributesEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10693|      6|            symbolTable.setFunctionExtensions("hitObjectGetCurrentTimeEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10694|      6|            symbolTable.setFunctionExtensions("hitObjectGetShaderBindingTableRecordIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10695|      6|            symbolTable.setFunctionExtensions("hitObjectGetShaderRecordBufferHandleEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10696|      6|            symbolTable.setFunctionExtensions("hitObjectSetShaderBindingTableRecordIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10697|      6|            symbolTable.setFunctionExtensions("reorderThreadEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10698|      6|            symbolTable.setFunctionExtensions("hitObjectReorderExecuteEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10699|      6|            symbolTable.setFunctionExtensions("hitObjectTraceReorderExecuteEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10700|      6|            symbolTable.setFunctionExtensions("hitObjectTraceMotionReorderExecuteEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10701|      6|            symbolTable.setFunctionExtensions("hitObjectRecordFromQueryEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10702|      6|            symbolTable.setFunctionExtensions("hitObjectGetIntersectionTriangleVertexPositionsEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10703|       |
10704|       |
10705|      6|            BuiltInVariable("gl_LaunchIDNV",             EbvLaunchId,           symbolTable);
10706|      6|            BuiltInVariable("gl_LaunchIDEXT",            EbvLaunchId,           symbolTable);
10707|      6|            BuiltInVariable("gl_LaunchSizeNV",           EbvLaunchSize,         symbolTable);
10708|      6|            BuiltInVariable("gl_LaunchSizeEXT",          EbvLaunchSize,         symbolTable);
10709|      6|            BuiltInVariable("gl_PrimitiveID",            EbvPrimitiveId,        symbolTable);
10710|      6|            BuiltInVariable("gl_InstanceID",             EbvInstanceId,         symbolTable);
10711|      6|            BuiltInVariable("gl_InstanceCustomIndexNV",  EbvInstanceCustomIndex,symbolTable);
10712|      6|            BuiltInVariable("gl_InstanceCustomIndexEXT", EbvInstanceCustomIndex,symbolTable);
10713|      6|            BuiltInVariable("gl_GeometryIndexEXT",       EbvGeometryIndex,      symbolTable);
10714|      6|            BuiltInVariable("gl_WorldRayOriginNV",       EbvWorldRayOrigin,     symbolTable);
10715|      6|            BuiltInVariable("gl_WorldRayOriginEXT",      EbvWorldRayOrigin,     symbolTable);
10716|      6|            BuiltInVariable("gl_WorldRayDirectionNV",    EbvWorldRayDirection,  symbolTable);
10717|      6|            BuiltInVariable("gl_WorldRayDirectionEXT",   EbvWorldRayDirection,  symbolTable);
10718|      6|            BuiltInVariable("gl_ObjectRayOriginNV",      EbvObjectRayOrigin,    symbolTable);
10719|      6|            BuiltInVariable("gl_ObjectRayOriginEXT",     EbvObjectRayOrigin,    symbolTable);
10720|      6|            BuiltInVariable("gl_ObjectRayDirectionNV",   EbvObjectRayDirection, symbolTable);
10721|      6|            BuiltInVariable("gl_ObjectRayDirectionEXT",  EbvObjectRayDirection, symbolTable);
10722|      6|            BuiltInVariable("gl_RayTminNV",              EbvRayTmin,            symbolTable);
10723|      6|            BuiltInVariable("gl_RayTminEXT",             EbvRayTmin,            symbolTable);
10724|      6|            BuiltInVariable("gl_RayTmaxNV",              EbvRayTmax,            symbolTable);
10725|      6|            BuiltInVariable("gl_RayTmaxEXT",             EbvRayTmax,            symbolTable);
10726|      6|            BuiltInVariable("gl_CullMaskEXT",            EbvCullMask,           symbolTable);
10727|      6|            BuiltInVariable("gl_HitKindNV",              EbvHitKind,            symbolTable);
10728|      6|            BuiltInVariable("gl_HitKindEXT",             EbvHitKind,            symbolTable);
10729|      6|            BuiltInVariable("gl_ObjectToWorldNV",        EbvObjectToWorld,      symbolTable);
10730|      6|            BuiltInVariable("gl_ObjectToWorldEXT",       EbvObjectToWorld,      symbolTable);
10731|      6|            BuiltInVariable("gl_ObjectToWorld3x4EXT",    EbvObjectToWorld3x4,   symbolTable);
10732|      6|            BuiltInVariable("gl_WorldToObjectNV",        EbvWorldToObject,      symbolTable);
10733|      6|            BuiltInVariable("gl_WorldToObjectEXT",       EbvWorldToObject,      symbolTable);
10734|      6|            BuiltInVariable("gl_WorldToObject3x4EXT",    EbvWorldToObject3x4,   symbolTable);
10735|      6|            BuiltInVariable("gl_IncomingRayFlagsNV",     EbvIncomingRayFlags,   symbolTable);
10736|      6|            BuiltInVariable("gl_IncomingRayFlagsEXT",    EbvIncomingRayFlags,   symbolTable);
10737|      6|            BuiltInVariable("gl_DeviceIndex",            EbvDeviceIndex,        symbolTable);
10738|      6|            BuiltInVariable("gl_CurrentRayTimeNV",       EbvCurrentRayTimeNV,   symbolTable);
10739|      6|            BuiltInVariable("gl_HitTriangleVertexPositionsEXT", EbvPositionFetch, symbolTable);
10740|      6|            BuiltInVariable("gl_HitMicroTriangleVertexPositionsNV", EbvMicroTrianglePositionNV, symbolTable);
10741|      6|            BuiltInVariable("gl_HitMicroTriangleVertexBarycentricsNV", EbvMicroTriangleBaryNV, symbolTable);
10742|      6|            BuiltInVariable("gl_HitKindFrontFacingMicroTriangleNV", EbvHitKindFrontFacingMicroTriangleNV, symbolTable);
10743|      6|            BuiltInVariable("gl_HitKindBackFacingMicroTriangleNV", EbvHitKindBackFacingMicroTriangleNV, symbolTable);
10744|      6|            BuiltInVariable("gl_ClusterIDNV",            EbvClusterIDNV,         symbolTable);
10745|      6|            BuiltInVariable("gl_HitIsSphereNV", EbvHitIsSphereNV, symbolTable);
10746|      6|            BuiltInVariable("gl_HitIsLSSNV", EbvHitIsLSSNV, symbolTable);
10747|      6|            BuiltInVariable("gl_HitSpherePositionNV", EbvHitSpherePositionNV, symbolTable);
10748|      6|            BuiltInVariable("gl_HitSphereRadiusNV", EbvHitSphereRadiusNV, symbolTable);
10749|      6|            BuiltInVariable("gl_HitLSSPositionsNV", EbvHitLSSPositionsNV, symbolTable);
10750|      6|            BuiltInVariable("gl_HitLSSRadiiNV", EbvHitLSSRadiiNV, symbolTable);
10751|       |
10752|       |            // gl_HitT variables are aliases of their gl_RayTmax counterparts.
10753|      6|            RetargetVariable("gl_HitTNV",                "gl_RayTmaxNV",        symbolTable);
10754|      6|            RetargetVariable("gl_HitTEXT",               "gl_RayTmaxEXT",       symbolTable);
10755|       |
10756|       |            // GL_ARB_shader_ballot
10757|      6|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
10758|      6|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
10759|      6|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
10760|      6|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
10761|      6|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
10762|      6|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
10763|      6|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
10764|       |
10765|      6|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
10766|      6|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
10767|      6|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
10768|      6|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
10769|      6|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
10770|      6|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
10771|       |
10772|      6|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10772:17): [True: 0, False: 6]
  ------------------
10773|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10774|      0|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10775|      0|                if (language == EShLangFragment)
  ------------------
  |  Branch (10775:21): [True: 0, False: 0]
  ------------------
10776|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10777|      0|            }
10778|      6|            else
10779|      6|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10780|       |
10781|       |            // GL_KHR_shader_subgroup
10782|      6|            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
10783|      6|            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
10784|      6|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
10785|      6|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
10786|      6|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10787|      6|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10788|      6|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10789|      6|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10790|      6|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10791|       |
10792|      6|            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
10793|      6|            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
10794|      6|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
10795|      6|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
10796|      6|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
10797|      6|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
10798|      6|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
10799|      6|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
10800|      6|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
10801|       |
10802|       |            // GL_NV_shader_sm_builtins
10803|      6|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
10804|      6|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
10805|      6|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
10806|      6|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
10807|      6|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
10808|      6|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
10809|      6|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
10810|      6|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
10811|       |
10812|       |            // GL_ARM_shader_core_builtins
10813|      6|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
10814|      6|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
10815|      6|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10816|      6|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
10817|      6|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10818|       |
10819|      6|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
10820|      6|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
10821|      6|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
10822|      6|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
10823|      6|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
10824|      6|        }
10825|  2.66k|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10825:14): [True: 0, False: 2.66k]
  |  Branch (10825:39): [True: 0, False: 0]
  ------------------
10826|  2.66k|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10826:14): [True: 2.66k, False: 0]
  |  Branch (10826:39): [True: 2.66k, False: 0]
  ------------------
10827|  2.66k|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10828|  2.66k|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10829|  2.66k|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10830|  2.66k|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10831|  2.66k|        }
10832|  2.66k|        break;
10833|       |
10834|    447|    case EShLangMesh:
  ------------------
  |  Branch (10834:5): [True: 447, False: 8.94k]
  ------------------
10835|    447|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (10835:14): [True: 444, False: 3]
  |  Branch (10835:39): [True: 444, False: 0]
  |  Branch (10835:59): [True: 3, False: 0]
  |  Branch (10835:84): [True: 3, False: 0]
  ------------------
10836|       |            // per-vertex builtins
10837|    447|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_Position",     1, &E_GL_NV_mesh_shader);
10838|    447|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PointSize",    1, &E_GL_NV_mesh_shader);
10839|    447|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistance", 1, &E_GL_NV_mesh_shader);
10840|    447|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistance", 1, &E_GL_NV_mesh_shader);
10841|       |
10842|    447|            BuiltInVariable("gl_MeshVerticesNV", "gl_Position",     EbvPosition,     symbolTable);
10843|    447|            BuiltInVariable("gl_MeshVerticesNV", "gl_PointSize",    EbvPointSize,    symbolTable);
10844|    447|            BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistance", EbvClipDistance, symbolTable);
10845|    447|            BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistance", EbvCullDistance, symbolTable);
10846|       |
10847|    447|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PositionPerViewNV",     1, &E_GL_NV_mesh_shader);
10848|    447|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
10849|    447|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
10850|       |
10851|    447|            BuiltInVariable("gl_MeshVerticesNV", "gl_PositionPerViewNV",     EbvPositionPerViewNV,     symbolTable);
10852|    447|            BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", EbvClipDistancePerViewNV, symbolTable);
10853|    447|            BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", EbvCullDistancePerViewNV, symbolTable);
10854|       |
10855|       |            // per-primitive builtins
10856|    447|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_PrimitiveID",   1, &E_GL_NV_mesh_shader);
10857|    447|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_Layer",         1, &E_GL_NV_mesh_shader);
10858|    447|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportIndex", 1, &E_GL_NV_mesh_shader);
10859|    447|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMask",  1, &E_GL_NV_mesh_shader);
10860|       |
10861|    447|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_PrimitiveID",   EbvPrimitiveId,    symbolTable);
10862|    447|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_Layer",         EbvLayer,          symbolTable);
10863|    447|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportIndex", EbvViewportIndex,  symbolTable);
10864|    447|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMask",  EbvViewportMaskNV, symbolTable);
10865|       |
10866|       |            // per-view per-primitive builtins
10867|    447|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_LayerPerViewNV",        1, &E_GL_NV_mesh_shader);
10868|    447|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", 1, &E_GL_NV_mesh_shader);
10869|       |
10870|    447|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_LayerPerViewNV",        EbvLayerPerViewNV,        symbolTable);
10871|    447|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
10872|       |
10873|       |            // other builtins
10874|    447|            symbolTable.setVariableExtensions("gl_PrimitiveCountNV",     1, &E_GL_NV_mesh_shader);
10875|    447|            symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV",   1, &E_GL_NV_mesh_shader);
10876|    447|            symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
10877|    447|            symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
10878|    447|            if (profile != EEsProfile) {
  ------------------
  |  Branch (10878:17): [True: 444, False: 3]
  ------------------
10879|    444|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
10880|    444|                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
10881|    444|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
10882|    444|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
10883|    444|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
10884|    444|            } else {
10885|      3|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
10886|      3|                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
10887|      3|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
10888|      3|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
10889|      3|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
10890|      3|            }
10891|    447|            BuiltInVariable("gl_PrimitiveCountNV",     EbvPrimitiveCountNV,     symbolTable);
10892|    447|            BuiltInVariable("gl_PrimitiveIndicesNV",   EbvPrimitiveIndicesNV,   symbolTable);
10893|    447|            BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
10894|    447|            BuiltInVariable("gl_MeshViewIndicesNV",    EbvMeshViewIndicesNV,    symbolTable);
10895|    447|            BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
10896|    447|            BuiltInVariable("gl_WorkGroupID",          EbvWorkGroupId,          symbolTable);
10897|    447|            BuiltInVariable("gl_LocalInvocationID",    EbvLocalInvocationId,    symbolTable);
10898|    447|            BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
10899|    447|            BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
10900|       |
10901|       |            // builtin constants
10902|    447|            symbolTable.setVariableExtensions("gl_MaxMeshOutputVerticesNV",   1, &E_GL_NV_mesh_shader);
10903|    447|            symbolTable.setVariableExtensions("gl_MaxMeshOutputPrimitivesNV", 1, &E_GL_NV_mesh_shader);
10904|    447|            symbolTable.setVariableExtensions("gl_MaxMeshWorkGroupSizeNV",    1, &E_GL_NV_mesh_shader);
10905|    447|            symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",        1, &E_GL_NV_mesh_shader);
10906|       |
10907|       |            // builtin functions
10908|    447|            if (profile != EEsProfile) {
  ------------------
  |  Branch (10908:17): [True: 444, False: 3]
  ------------------
10909|    444|                symbolTable.setFunctionExtensions("barrier",                      Num_AEP_mesh_shader, AEP_mesh_shader);
10910|    444|                symbolTable.setFunctionExtensions("memoryBarrierShared",          Num_AEP_mesh_shader, AEP_mesh_shader);
10911|    444|                symbolTable.setFunctionExtensions("groupMemoryBarrier",           Num_AEP_mesh_shader, AEP_mesh_shader);
10912|    444|            } else {
10913|      3|                symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
10914|      3|                symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
10915|      3|                symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
10916|      3|            }
10917|    447|            symbolTable.setFunctionExtensions("writePackedPrimitiveIndices4x8NV",  1, &E_GL_NV_mesh_shader);
10918|    447|        }
10919|       |
10920|    447|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (10920:13): [True: 444, False: 3]
  |  Branch (10920:38): [True: 444, False: 0]
  ------------------
10921|       |            // GL_EXT_Mesh_shader
10922|    444|            symbolTable.setVariableExtensions("gl_PrimitivePointIndicesEXT",    1, &E_GL_EXT_mesh_shader);
10923|    444|            symbolTable.setVariableExtensions("gl_PrimitiveLineIndicesEXT",     1, &E_GL_EXT_mesh_shader);
10924|    444|            symbolTable.setVariableExtensions("gl_PrimitiveTriangleIndicesEXT", 1, &E_GL_EXT_mesh_shader);
10925|    444|            symbolTable.setVariableExtensions("gl_NumWorkGroups",               1, &E_GL_EXT_mesh_shader);
10926|       |
10927|    444|            BuiltInVariable("gl_PrimitivePointIndicesEXT",    EbvPrimitivePointIndicesEXT,    symbolTable);
10928|    444|            BuiltInVariable("gl_PrimitiveLineIndicesEXT",     EbvPrimitiveLineIndicesEXT,     symbolTable);
10929|    444|            BuiltInVariable("gl_PrimitiveTriangleIndicesEXT", EbvPrimitiveTriangleIndicesEXT, symbolTable);
10930|    444|            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
10931|       |
10932|    444|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_Position",     1, &E_GL_EXT_mesh_shader);
10933|    444|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_PointSize",    1, &E_GL_EXT_mesh_shader);
10934|    444|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_ClipDistance", 1, &E_GL_EXT_mesh_shader);
10935|    444|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_CullDistance", 1, &E_GL_EXT_mesh_shader);
10936|       |            
10937|    444|            BuiltInVariable("gl_MeshVerticesEXT", "gl_Position",     EbvPosition,     symbolTable);
10938|    444|            BuiltInVariable("gl_MeshVerticesEXT", "gl_PointSize",    EbvPointSize,    symbolTable);
10939|    444|            BuiltInVariable("gl_MeshVerticesEXT", "gl_ClipDistance", EbvClipDistance, symbolTable);
10940|    444|            BuiltInVariable("gl_MeshVerticesEXT", "gl_CullDistance", EbvCullDistance, symbolTable);
10941|       |            
10942|    444|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveID",             1, &E_GL_EXT_mesh_shader);
10943|    444|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_Layer",                   1, &E_GL_EXT_mesh_shader);
10944|    444|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_ViewportIndex",           1, &E_GL_EXT_mesh_shader);
10945|    444|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",        1, &E_GL_EXT_mesh_shader);
10946|       |
10947|       |            // note: technically this member requires both GL_EXT_mesh_shader and GL_EXT_fragment_shading_rate
10948|       |            // since setVariableExtensions only needs *one of* the extensions to validate, it's more useful to specify EXT_fragment_shading_rate
10949|       |            // GL_EXT_mesh_shader will be required in practice by use of other fields of gl_MeshPrimitivesEXT
10950|    444|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
10951|       |
10952|    444|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveID",              EbvPrimitiveId,    symbolTable);
10953|    444|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_Layer",                    EbvLayer,          symbolTable);
10954|    444|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_ViewportIndex",            EbvViewportIndex,  symbolTable);
10955|    444|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",         EbvCullPrimitiveEXT, symbolTable);
10956|    444|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT",  EbvPrimitiveShadingRateKHR, symbolTable);
10957|       |
10958|    444|            symbolTable.setFunctionExtensions("SetMeshOutputsEXT",  1, &E_GL_EXT_mesh_shader);
10959|       |
10960|       |            // GL_EXT_device_group
10961|    444|            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
10962|    444|            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
10963|       |
10964|       |            // GL_ARB_shader_draw_parameters
10965|    444|            symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
10966|    444|            BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
10967|    444|            if (version >= 460) {
  ------------------
  |  Branch (10967:17): [True: 1, False: 443]
  ------------------
10968|      1|                BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
10969|      1|            }
10970|       |            // GL_EXT_multiview
10971|    444|            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
10972|    444|            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
10973|       |
10974|       |            // GL_ARB_shader_ballot
10975|    444|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
10976|    444|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
10977|    444|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
10978|    444|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
10979|    444|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
10980|    444|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
10981|    444|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
10982|       |
10983|    444|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
10984|    444|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
10985|    444|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
10986|    444|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
10987|    444|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
10988|    444|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
10989|       |
10990|    444|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10990:17): [True: 53, False: 391]
  ------------------
10991|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10992|     53|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10993|     53|                if (language == EShLangFragment)
  ------------------
  |  Branch (10993:21): [True: 0, False: 53]
  ------------------
10994|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10995|     53|            }
10996|    391|            else
10997|    391|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10998|    444|        }
10999|       |
11000|       |        // GL_KHR_shader_subgroup
11001|    447|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11001:14): [True: 3, False: 444]
  |  Branch (11001:39): [True: 3, False: 0]
  ------------------
11002|    447|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11002:14): [True: 444, False: 0]
  |  Branch (11002:39): [True: 444, False: 0]
  ------------------
11003|    447|            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
11004|    447|            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
11005|    447|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
11006|    447|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
11007|    447|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11008|    447|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11009|    447|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11010|    447|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11011|    447|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11012|       |
11013|    447|            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
11014|    447|            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
11015|    447|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
11016|    447|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
11017|    447|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
11018|    447|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
11019|    447|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
11020|    447|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
11021|    447|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
11022|       |
11023|    447|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
11024|       |
11025|       |            // GL_NV_shader_sm_builtins
11026|    447|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
11027|    447|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
11028|    447|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
11029|    447|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
11030|    447|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
11031|    447|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
11032|    447|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
11033|    447|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
11034|       |
11035|       |            // GL_ARM_shader_core_builtins
11036|    447|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
11037|    447|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
11038|    447|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
11039|    447|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
11040|    447|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
11041|       |
11042|    447|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
11043|    447|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
11044|    447|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
11045|    447|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
11046|    447|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
11047|    447|        }
11048|       |
11049|    447|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11049:14): [True: 3, False: 444]
  |  Branch (11049:39): [True: 3, False: 0]
  ------------------
11050|    447|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (11050:14): [True: 444, False: 0]
  |  Branch (11050:39): [True: 444, False: 0]
  ------------------
11051|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11052|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11053|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11054|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11055|    447|        }
11056|       |
11057|       |        // Builtins for GL_NV_displacment_micromap
11058|    447|        if ((profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (11058:14): [True: 444, False: 3]
  |  Branch (11058:39): [True: 1, False: 443]
  ------------------
11059|      1|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap);
11060|      1|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap);
11061|      1|        }
11062|       |
11063|    447|        break;
11064|       |
11065|    447|    case EShLangTask:
  ------------------
  |  Branch (11065:5): [True: 447, False: 8.94k]
  ------------------
11066|    447|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (11066:14): [True: 444, False: 3]
  |  Branch (11066:39): [True: 444, False: 0]
  |  Branch (11066:59): [True: 3, False: 0]
  |  Branch (11066:84): [True: 3, False: 0]
  ------------------
11067|    447|            symbolTable.setVariableExtensions("gl_TaskCountNV",          1, &E_GL_NV_mesh_shader);
11068|    447|            symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
11069|    447|            symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
11070|    447|            if (profile != EEsProfile) {
  ------------------
  |  Branch (11070:17): [True: 444, False: 3]
  ------------------
11071|    444|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
11072|    444|                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
11073|    444|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
11074|    444|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
11075|    444|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
11076|    444|            } else {
11077|      3|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
11078|      3|                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
11079|      3|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
11080|      3|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
11081|      3|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
11082|      3|            }
11083|       |
11084|    447|            BuiltInVariable("gl_TaskCountNV",          EbvTaskCountNV,          symbolTable);
11085|    447|            BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
11086|    447|            BuiltInVariable("gl_WorkGroupID",          EbvWorkGroupId,          symbolTable);
11087|    447|            BuiltInVariable("gl_LocalInvocationID",    EbvLocalInvocationId,    symbolTable);
11088|    447|            BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
11089|    447|            BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
11090|    447|            BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
11091|    447|            BuiltInVariable("gl_MeshViewIndicesNV",    EbvMeshViewIndicesNV,    symbolTable);
11092|       |
11093|    447|            symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
11094|    447|            symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",     1, &E_GL_NV_mesh_shader);
11095|       |
11096|    447|            if (profile != EEsProfile) {
  ------------------
  |  Branch (11096:17): [True: 444, False: 3]
  ------------------
11097|    444|                symbolTable.setFunctionExtensions("barrier",                   Num_AEP_mesh_shader, AEP_mesh_shader);
11098|    444|                symbolTable.setFunctionExtensions("memoryBarrierShared",       Num_AEP_mesh_shader, AEP_mesh_shader);
11099|    444|                symbolTable.setFunctionExtensions("groupMemoryBarrier",        Num_AEP_mesh_shader, AEP_mesh_shader);
11100|    444|            } else {
11101|      3|                symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
11102|      3|                symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
11103|      3|                symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
11104|      3|            }
11105|    447|        }
11106|       |
11107|    447|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (11107:13): [True: 444, False: 3]
  |  Branch (11107:38): [True: 444, False: 0]
  ------------------
11108|       |            // GL_EXT_mesh_shader
11109|    444|            symbolTable.setFunctionExtensions("EmitMeshTasksEXT",          1, &E_GL_EXT_mesh_shader);
11110|    444|            symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_EXT_mesh_shader);
11111|    444|            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
11112|       |
11113|       |            // GL_EXT_device_group
11114|    444|            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
11115|    444|            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
11116|       |
11117|       |            // GL_ARB_shader_draw_parameters
11118|    444|            symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
11119|    444|            BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
11120|    444|            if (version >= 460) {
  ------------------
  |  Branch (11120:17): [True: 1, False: 443]
  ------------------
11121|      1|                BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
11122|      1|            }
11123|       |
11124|       |            // GL_ARB_shader_ballot
11125|    444|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
11126|    444|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
11127|    444|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
11128|    444|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
11129|    444|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
11130|    444|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
11131|    444|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
11132|       |
11133|    444|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
11134|    444|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
11135|    444|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
11136|    444|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
11137|    444|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
11138|    444|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
11139|       |
11140|    444|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (11140:17): [True: 53, False: 391]
  ------------------
11141|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
11142|     53|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
11143|     53|                if (language == EShLangFragment)
  ------------------
  |  Branch (11143:21): [True: 0, False: 53]
  ------------------
11144|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
11145|     53|            }
11146|    391|            else
11147|    391|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
11148|    444|        }
11149|       |
11150|       |        // GL_KHR_shader_subgroup
11151|    447|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11151:14): [True: 3, False: 444]
  |  Branch (11151:39): [True: 3, False: 0]
  ------------------
11152|    447|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11152:14): [True: 444, False: 0]
  |  Branch (11152:39): [True: 444, False: 0]
  ------------------
11153|    447|            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
11154|    447|            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
11155|    447|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
11156|    447|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
11157|    447|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11158|    447|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11159|    447|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11160|    447|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11161|    447|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
11162|       |
11163|    447|            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
11164|    447|            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
11165|    447|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
11166|    447|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
11167|    447|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
11168|    447|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
11169|    447|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
11170|    447|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
11171|    447|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
11172|       |
11173|    447|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
11174|       |
11175|       |            // GL_NV_shader_sm_builtins
11176|    447|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
11177|    447|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
11178|    447|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
11179|    447|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
11180|    447|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
11181|    447|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
11182|    447|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
11183|    447|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
11184|       |
11185|       |            // GL_ARM_shader_core_builtins
11186|    447|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
11187|    447|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
11188|    447|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
11189|    447|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
11190|    447|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
11191|       |
11192|    447|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
11193|    447|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
11194|    447|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
11195|    447|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
11196|    447|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
11197|    447|        }
11198|    447|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11198:14): [True: 3, False: 444]
  |  Branch (11198:39): [True: 3, False: 0]
  ------------------
11199|    447|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (11199:14): [True: 444, False: 0]
  |  Branch (11199:39): [True: 444, False: 0]
  ------------------
11200|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11201|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11202|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11203|    447|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
11204|    447|        }
11205|    447|        break;
11206|       |
11207|      0|    default:
  ------------------
  |  Branch (11207:5): [True: 0, False: 9.39k]
  ------------------
11208|      0|        assert(false && "Language not supported");
11209|      0|        break;
11210|  9.39k|    }
11211|       |
11212|       |    //
11213|       |    // Next, identify which built-ins have a mapping to an operator.
11214|       |    // If PureOperatorBuiltins is false, those that are not identified as such are
11215|       |    // expected to be resolved through a library of functions, versus as
11216|       |    // operations.
11217|       |    //
11218|       |
11219|  9.39k|    relateTabledBuiltins(version, profile, spvVersion, language, symbolTable);
11220|       |
11221|  9.39k|    symbolTable.relateToOperator("doubleBitsToInt64",  EOpDoubleBitsToInt64);
11222|  9.39k|    symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
11223|  9.39k|    symbolTable.relateToOperator("int64BitsToDouble",  EOpInt64BitsToDouble);
11224|  9.39k|    symbolTable.relateToOperator("uint64BitsToDouble", EOpUint64BitsToDouble);
11225|  9.39k|    symbolTable.relateToOperator("halfBitsToInt16",  EOpFloat16BitsToInt16);
11226|  9.39k|    symbolTable.relateToOperator("halfBitsToUint16", EOpFloat16BitsToUint16);
11227|  9.39k|    symbolTable.relateToOperator("float16BitsToInt16",  EOpFloat16BitsToInt16);
11228|  9.39k|    symbolTable.relateToOperator("float16BitsToUint16", EOpFloat16BitsToUint16);
11229|  9.39k|    symbolTable.relateToOperator("int16BitsToFloat16",  EOpInt16BitsToFloat16);
11230|  9.39k|    symbolTable.relateToOperator("uint16BitsToFloat16", EOpUint16BitsToFloat16);
11231|       |
11232|  9.39k|    symbolTable.relateToOperator("int16BitsToHalf",  EOpInt16BitsToFloat16);
11233|  9.39k|    symbolTable.relateToOperator("uint16BitsToHalf", EOpUint16BitsToFloat16);
11234|       |
11235|  9.39k|    symbolTable.relateToOperator("packSnorm4x8",    EOpPackSnorm4x8);
11236|  9.39k|    symbolTable.relateToOperator("unpackSnorm4x8",  EOpUnpackSnorm4x8);
11237|  9.39k|    symbolTable.relateToOperator("packUnorm4x8",    EOpPackUnorm4x8);
11238|  9.39k|    symbolTable.relateToOperator("unpackUnorm4x8",  EOpUnpackUnorm4x8);
11239|       |
11240|  9.39k|    symbolTable.relateToOperator("packDouble2x32",    EOpPackDouble2x32);
11241|  9.39k|    symbolTable.relateToOperator("unpackDouble2x32",  EOpUnpackDouble2x32);
11242|       |
11243|  9.39k|    symbolTable.relateToOperator("packInt2x32",     EOpPackInt2x32);
11244|  9.39k|    symbolTable.relateToOperator("unpackInt2x32",   EOpUnpackInt2x32);
11245|  9.39k|    symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
11246|  9.39k|    symbolTable.relateToOperator("unpackUint2x32",  EOpUnpackUint2x32);
11247|       |
11248|  9.39k|    symbolTable.relateToOperator("packInt2x16",     EOpPackInt2x16);
11249|  9.39k|    symbolTable.relateToOperator("unpackInt2x16",   EOpUnpackInt2x16);
11250|  9.39k|    symbolTable.relateToOperator("packUint2x16",    EOpPackUint2x16);
11251|  9.39k|    symbolTable.relateToOperator("unpackUint2x16",  EOpUnpackUint2x16);
11252|       |
11253|  9.39k|    symbolTable.relateToOperator("packInt4x16",     EOpPackInt4x16);
11254|  9.39k|    symbolTable.relateToOperator("unpackInt4x16",   EOpUnpackInt4x16);
11255|  9.39k|    symbolTable.relateToOperator("packUint4x16",    EOpPackUint4x16);
11256|  9.39k|    symbolTable.relateToOperator("unpackUint4x16",  EOpUnpackUint4x16);
11257|  9.39k|    symbolTable.relateToOperator("packFloat2x16",   EOpPackFloat2x16);
11258|  9.39k|    symbolTable.relateToOperator("unpackFloat2x16", EOpUnpackFloat2x16);
11259|       |
11260|  9.39k|    symbolTable.relateToOperator("pack16",          EOpPack16);
11261|  9.39k|    symbolTable.relateToOperator("pack32",          EOpPack32);
11262|  9.39k|    symbolTable.relateToOperator("pack64",          EOpPack64);
11263|       |
11264|  9.39k|    symbolTable.relateToOperator("unpack32",        EOpUnpack32);
11265|  9.39k|    symbolTable.relateToOperator("unpack16",        EOpUnpack16);
11266|  9.39k|    symbolTable.relateToOperator("unpack8",         EOpUnpack8);
11267|       |
11268|  9.39k|    symbolTable.relateToOperator("controlBarrier",             EOpBarrier);
11269|  9.39k|    symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter);
11270|  9.39k|    symbolTable.relateToOperator("memoryBarrierImage",         EOpMemoryBarrierImage);
11271|       |
11272|  9.39k|    symbolTable.relateToOperator("controlBarrierArrive",  EOpControlBarrierArriveEXT);
11273|  9.39k|    symbolTable.relateToOperator("controlBarrierWait",    EOpControlBarrierWaitEXT);
11274|       |
11275|  9.39k|    if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (11275:9): [True: 0, False: 9.39k]
  ------------------
11276|       |        //
11277|       |        // functions signature have been replaced to take uint operations on buffer variables
11278|       |        // remap atomic counter functions to atomic operations
11279|       |        //
11280|      0|        symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierBuffer);
11281|      0|    }
11282|       |
11283|  9.39k|    symbolTable.relateToOperator("atomicLoad",     EOpAtomicLoad);
11284|  9.39k|    symbolTable.relateToOperator("atomicStore",    EOpAtomicStore);
11285|       |
11286|  9.39k|    symbolTable.relateToOperator("atomicCounterIncrement", EOpAtomicCounterIncrement);
11287|  9.39k|    symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
11288|  9.39k|    symbolTable.relateToOperator("atomicCounter",          EOpAtomicCounter);
11289|       |
11290|  9.39k|    if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (11290:9): [True: 0, False: 9.39k]
  ------------------
11291|       |        //
11292|       |        // functions signature have been replaced to take uint operations
11293|       |        // remap atomic counter functions to atomic operations
11294|       |        //
11295|       |        // these atomic counter functions do not match signatures of glsl
11296|       |        // atomic functions, so they will be remapped to semantically
11297|       |        // equivalent functions in the parser
11298|       |        //
11299|      0|        symbolTable.relateToOperator("atomicCounterIncrement", EOpNull);
11300|      0|        symbolTable.relateToOperator("atomicCounterDecrement", EOpNull);
11301|      0|        symbolTable.relateToOperator("atomicCounter", EOpNull);
11302|      0|    }
11303|       |
11304|  9.39k|    symbolTable.relateToOperator("clockARB",     EOpReadClockSubgroupKHR);
11305|  9.39k|    symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR);
11306|       |
11307|  9.39k|    symbolTable.relateToOperator("clockRealtimeEXT",     EOpReadClockDeviceKHR);
11308|  9.39k|    symbolTable.relateToOperator("clockRealtime2x32EXT", EOpReadClockDeviceKHR);
11309|       |
11310|  9.39k|    if (profile != EEsProfile && version == 450) {
  ------------------
  |  Branch (11310:9): [True: 6.24k, False: 3.15k]
  |  Branch (11310:34): [True: 6.14k, False: 93]
  ------------------
11311|  6.14k|        symbolTable.relateToOperator("atomicCounterAddARB",      EOpAtomicCounterAdd);
11312|  6.14k|        symbolTable.relateToOperator("atomicCounterSubtractARB", EOpAtomicCounterSubtract);
11313|  6.14k|        symbolTable.relateToOperator("atomicCounterMinARB",      EOpAtomicCounterMin);
11314|  6.14k|        symbolTable.relateToOperator("atomicCounterMaxARB",      EOpAtomicCounterMax);
11315|  6.14k|        symbolTable.relateToOperator("atomicCounterAndARB",      EOpAtomicCounterAnd);
11316|  6.14k|        symbolTable.relateToOperator("atomicCounterOrARB",       EOpAtomicCounterOr);
11317|  6.14k|        symbolTable.relateToOperator("atomicCounterXorARB",      EOpAtomicCounterXor);
11318|  6.14k|        symbolTable.relateToOperator("atomicCounterExchangeARB", EOpAtomicCounterExchange);
11319|  6.14k|        symbolTable.relateToOperator("atomicCounterCompSwapARB", EOpAtomicCounterCompSwap);
11320|  6.14k|    }
11321|       |
11322|  9.39k|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11322:9): [True: 6.24k, False: 3.15k]
  |  Branch (11322:34): [True: 14, False: 6.22k]
  ------------------
11323|     14|        symbolTable.relateToOperator("atomicCounterAdd",      EOpAtomicCounterAdd);
11324|     14|        symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract);
11325|     14|        symbolTable.relateToOperator("atomicCounterMin",      EOpAtomicCounterMin);
11326|     14|        symbolTable.relateToOperator("atomicCounterMax",      EOpAtomicCounterMax);
11327|     14|        symbolTable.relateToOperator("atomicCounterAnd",      EOpAtomicCounterAnd);
11328|     14|        symbolTable.relateToOperator("atomicCounterOr",       EOpAtomicCounterOr);
11329|     14|        symbolTable.relateToOperator("atomicCounterXor",      EOpAtomicCounterXor);
11330|     14|        symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicCounterExchange);
11331|     14|        symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCounterCompSwap);
11332|     14|    }
11333|       |
11334|  9.39k|    if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (11334:9): [True: 0, False: 9.39k]
  ------------------
11335|       |        //
11336|       |        // functions signature have been replaced to take 'uint' instead of 'atomic_uint'
11337|       |        // remap atomic counter functions to non-counter atomic ops so
11338|       |        // functions act as aliases to non-counter atomic ops
11339|       |        //
11340|      0|        symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicAdd);
11341|      0|        symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicSubtract);
11342|      0|        symbolTable.relateToOperator("atomicCounterMin", EOpAtomicMin);
11343|      0|        symbolTable.relateToOperator("atomicCounterMax", EOpAtomicMax);
11344|      0|        symbolTable.relateToOperator("atomicCounterAnd", EOpAtomicAnd);
11345|      0|        symbolTable.relateToOperator("atomicCounterOr", EOpAtomicOr);
11346|      0|        symbolTable.relateToOperator("atomicCounterXor", EOpAtomicXor);
11347|      0|        symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicExchange);
11348|      0|        symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCompSwap);
11349|      0|    }
11350|       |
11351|  9.39k|    symbolTable.relateToOperator("fma",               EOpFma);
11352|  9.39k|    symbolTable.relateToOperator("frexp",             EOpFrexp);
11353|  9.39k|    symbolTable.relateToOperator("ldexp",             EOpLdexp);
11354|  9.39k|    symbolTable.relateToOperator("uaddCarry",         EOpAddCarry);
11355|  9.39k|    symbolTable.relateToOperator("usubBorrow",        EOpSubBorrow);
11356|  9.39k|    symbolTable.relateToOperator("umulExtended",      EOpUMulExtended);
11357|  9.39k|    symbolTable.relateToOperator("imulExtended",      EOpIMulExtended);
11358|  9.39k|    symbolTable.relateToOperator("bitfieldExtract",   EOpBitfieldExtract);
11359|  9.39k|    symbolTable.relateToOperator("bitfieldInsert",    EOpBitfieldInsert);
11360|  9.39k|    symbolTable.relateToOperator("bitfieldReverse",   EOpBitFieldReverse);
11361|  9.39k|    symbolTable.relateToOperator("bitCount",          EOpBitCount);
11362|  9.39k|    symbolTable.relateToOperator("findLSB",           EOpFindLSB);
11363|  9.39k|    symbolTable.relateToOperator("findMSB",           EOpFindMSB);
11364|       |
11365|  9.39k|    symbolTable.relateToOperator("helperInvocationEXT",  EOpIsHelperInvocation);
11366|       |
11367|  9.39k|    symbolTable.relateToOperator("countLeadingZeros",  EOpCountLeadingZeros);
11368|  9.39k|    symbolTable.relateToOperator("countTrailingZeros", EOpCountTrailingZeros);
11369|  9.39k|    symbolTable.relateToOperator("absoluteDifference", EOpAbsDifference);
11370|  9.39k|    symbolTable.relateToOperator("addSaturate",        EOpAddSaturate);
11371|  9.39k|    symbolTable.relateToOperator("subtractSaturate",   EOpSubSaturate);
11372|  9.39k|    symbolTable.relateToOperator("average",            EOpAverage);
11373|  9.39k|    symbolTable.relateToOperator("averageRounded",     EOpAverageRounded);
11374|  9.39k|    symbolTable.relateToOperator("multiply32x16",      EOpMul32x16);
11375|  9.39k|    symbolTable.relateToOperator("debugPrintfEXT",     EOpDebugPrintf);
11376|  9.39k|    symbolTable.relateToOperator("assumeEXT",          EOpAssumeEXT);
11377|  9.39k|    symbolTable.relateToOperator("expectEXT",          EOpExpectEXT);
11378|  9.39k|    symbolTable.relateToOperator("abortEXT",           EOpAbortEXT);
11379|       |
11380|       |
11381|  9.39k|    if (PureOperatorBuiltins) {
  ------------------
  |  Branch (11381:9): [True: 9.39k, Folded]
  ------------------
11382|  9.39k|        symbolTable.relateToOperator("imageSize",               EOpImageQuerySize);
11383|  9.39k|        symbolTable.relateToOperator("imageSamples",            EOpImageQuerySamples);
11384|  9.39k|        symbolTable.relateToOperator("imageLoad",               EOpImageLoad);
11385|  9.39k|        symbolTable.relateToOperator("imageStore",              EOpImageStore);
11386|  9.39k|        symbolTable.relateToOperator("imageAtomicAdd",          EOpImageAtomicAdd);
11387|  9.39k|        symbolTable.relateToOperator("imageAtomicMin",          EOpImageAtomicMin);
11388|  9.39k|        symbolTable.relateToOperator("imageAtomicMax",          EOpImageAtomicMax);
11389|  9.39k|        symbolTable.relateToOperator("imageAtomicAnd",          EOpImageAtomicAnd);
11390|  9.39k|        symbolTable.relateToOperator("imageAtomicOr",           EOpImageAtomicOr);
11391|  9.39k|        symbolTable.relateToOperator("imageAtomicXor",          EOpImageAtomicXor);
11392|  9.39k|        symbolTable.relateToOperator("imageAtomicExchange",     EOpImageAtomicExchange);
11393|  9.39k|        symbolTable.relateToOperator("imageAtomicCompSwap",     EOpImageAtomicCompSwap);
11394|  9.39k|        symbolTable.relateToOperator("imageAtomicLoad",         EOpImageAtomicLoad);
11395|  9.39k|        symbolTable.relateToOperator("imageAtomicStore",        EOpImageAtomicStore);
11396|       |
11397|  9.39k|        symbolTable.relateToOperator("subpassLoad",             EOpSubpassLoad);
11398|  9.39k|        symbolTable.relateToOperator("subpassLoadMS",           EOpSubpassLoadMS);
11399|       |
11400|  9.39k|        symbolTable.relateToOperator("textureGather",           EOpTextureGather);
11401|  9.39k|        symbolTable.relateToOperator("textureGatherOffset",     EOpTextureGatherOffset);
11402|  9.39k|        symbolTable.relateToOperator("textureGatherOffsets",    EOpTextureGatherOffsets);
11403|       |
11404|  9.39k|        symbolTable.relateToOperator("noise1", EOpNoise);
11405|  9.39k|        symbolTable.relateToOperator("noise2", EOpNoise);
11406|  9.39k|        symbolTable.relateToOperator("noise3", EOpNoise);
11407|  9.39k|        symbolTable.relateToOperator("noise4", EOpNoise);
11408|       |
11409|  9.39k|        symbolTable.relateToOperator("textureFootprintNV",          EOpImageSampleFootprintNV);
11410|  9.39k|        symbolTable.relateToOperator("textureFootprintClampNV",     EOpImageSampleFootprintClampNV);
11411|  9.39k|        symbolTable.relateToOperator("textureFootprintLodNV",       EOpImageSampleFootprintLodNV);
11412|  9.39k|        symbolTable.relateToOperator("textureFootprintGradNV",      EOpImageSampleFootprintGradNV);
11413|  9.39k|        symbolTable.relateToOperator("textureFootprintGradClampNV", EOpImageSampleFootprintGradClampNV);
11414|       |
11415|  9.39k|        if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion))
  ------------------
  |  Branch (11415:13): [True: 897, False: 8.49k]
  |  Branch (11415:36): [True: 0, False: 897]
  ------------------
11416|      0|            symbolTable.relateToOperator("ftransform", EOpFtransform);
11417|       |
11418|  9.39k|        if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
  ------------------
  |  Branch (11418:13): [True: 897, False: 8.49k]
  |  Branch (11418:37): [True: 0, False: 897]
  ------------------
11419|    897|            (profile == EEsProfile && version == 100))) {
  ------------------
  |  Branch (11419:14): [True: 180, False: 717]
  |  Branch (11419:39): [True: 180, False: 0]
  ------------------
11420|       |
11421|    180|            symbolTable.relateToOperator("texture1D",                EOpTexture);
11422|    180|            symbolTable.relateToOperator("texture1DGradARB",         EOpTextureGrad);
11423|    180|            symbolTable.relateToOperator("texture1DProj",            EOpTextureProj);
11424|    180|            symbolTable.relateToOperator("texture1DProjGradARB",     EOpTextureProjGrad);
11425|    180|            symbolTable.relateToOperator("texture1DLod",             EOpTextureLod);
11426|    180|            symbolTable.relateToOperator("texture1DProjLod",         EOpTextureProjLod);
11427|       |
11428|    180|            symbolTable.relateToOperator("texture2DRect",            EOpTexture);
11429|    180|            symbolTable.relateToOperator("texture2DRectProj",        EOpTextureProj);
11430|    180|            symbolTable.relateToOperator("texture2DRectGradARB",     EOpTextureGrad);
11431|    180|            symbolTable.relateToOperator("texture2DRectProjGradARB", EOpTextureProjGrad);
11432|    180|            symbolTable.relateToOperator("shadow2DRect",             EOpTexture);
11433|    180|            symbolTable.relateToOperator("shadow2DRectProj",         EOpTextureProj);
11434|    180|            symbolTable.relateToOperator("shadow2DRectGradARB",      EOpTextureGrad);
11435|    180|            symbolTable.relateToOperator("shadow2DRectProjGradARB",  EOpTextureProjGrad);
11436|       |
11437|    180|            symbolTable.relateToOperator("texture2D",                EOpTexture);
11438|    180|            symbolTable.relateToOperator("texture2DProj",            EOpTextureProj);
11439|    180|            symbolTable.relateToOperator("texture2DGradEXT",         EOpTextureGrad);
11440|    180|            symbolTable.relateToOperator("texture2DGradARB",         EOpTextureGrad);
11441|    180|            symbolTable.relateToOperator("texture2DProjGradEXT",     EOpTextureProjGrad);
11442|    180|            symbolTable.relateToOperator("texture2DProjGradARB",     EOpTextureProjGrad);
11443|    180|            symbolTable.relateToOperator("texture2DLod",             EOpTextureLod);
11444|    180|            symbolTable.relateToOperator("texture2DLodEXT",          EOpTextureLod);
11445|    180|            symbolTable.relateToOperator("texture2DProjLod",         EOpTextureProjLod);
11446|    180|            symbolTable.relateToOperator("texture2DProjLodEXT",      EOpTextureProjLod);
11447|       |
11448|    180|            symbolTable.relateToOperator("texture3D",                EOpTexture);
11449|    180|            symbolTable.relateToOperator("texture3DGradARB",         EOpTextureGrad);
11450|    180|            symbolTable.relateToOperator("texture3DProj",            EOpTextureProj);
11451|    180|            symbolTable.relateToOperator("texture3DProjGradARB",     EOpTextureProjGrad);
11452|    180|            symbolTable.relateToOperator("texture3DLod",             EOpTextureLod);
11453|    180|            symbolTable.relateToOperator("texture3DProjLod",         EOpTextureProjLod);
11454|    180|            symbolTable.relateToOperator("textureCube",              EOpTexture);
11455|    180|            symbolTable.relateToOperator("textureCubeGradEXT",       EOpTextureGrad);
11456|    180|            symbolTable.relateToOperator("textureCubeGradARB",       EOpTextureGrad);
11457|    180|            symbolTable.relateToOperator("textureCubeLod",           EOpTextureLod);
11458|    180|            symbolTable.relateToOperator("textureCubeLodEXT",        EOpTextureLod);
11459|    180|            symbolTable.relateToOperator("shadow1D",                 EOpTexture);
11460|    180|            symbolTable.relateToOperator("shadow1DGradARB",          EOpTextureGrad);
11461|    180|            symbolTable.relateToOperator("shadow2D",                 EOpTexture);
11462|    180|            symbolTable.relateToOperator("shadow2DGradARB",          EOpTextureGrad);
11463|    180|            symbolTable.relateToOperator("shadow1DProj",             EOpTextureProj);
11464|    180|            symbolTable.relateToOperator("shadow2DProj",             EOpTextureProj);
11465|    180|            symbolTable.relateToOperator("shadow1DProjGradARB",      EOpTextureProjGrad);
11466|    180|            symbolTable.relateToOperator("shadow2DProjGradARB",      EOpTextureProjGrad);
11467|    180|            symbolTable.relateToOperator("shadow1DLod",              EOpTextureLod);
11468|    180|            symbolTable.relateToOperator("shadow2DLod",              EOpTextureLod);
11469|    180|            symbolTable.relateToOperator("shadow1DProjLod",          EOpTextureProjLod);
11470|    180|            symbolTable.relateToOperator("shadow2DProjLod",          EOpTextureProjLod);
11471|    180|        }
11472|       |
11473|  9.39k|        if (profile != EEsProfile) {
  ------------------
  |  Branch (11473:13): [True: 6.24k, False: 3.15k]
  ------------------
11474|  6.24k|            symbolTable.relateToOperator("sparseTextureARB",                EOpSparseTexture);
11475|  6.24k|            symbolTable.relateToOperator("sparseTextureLodARB",             EOpSparseTextureLod);
11476|  6.24k|            symbolTable.relateToOperator("sparseTextureOffsetARB",          EOpSparseTextureOffset);
11477|  6.24k|            symbolTable.relateToOperator("sparseTexelFetchARB",             EOpSparseTextureFetch);
11478|  6.24k|            symbolTable.relateToOperator("sparseTexelFetchOffsetARB",       EOpSparseTextureFetchOffset);
11479|  6.24k|            symbolTable.relateToOperator("sparseTextureLodOffsetARB",       EOpSparseTextureLodOffset);
11480|  6.24k|            symbolTable.relateToOperator("sparseTextureGradARB",            EOpSparseTextureGrad);
11481|  6.24k|            symbolTable.relateToOperator("sparseTextureGradOffsetARB",      EOpSparseTextureGradOffset);
11482|  6.24k|            symbolTable.relateToOperator("sparseTextureGatherARB",          EOpSparseTextureGather);
11483|  6.24k|            symbolTable.relateToOperator("sparseTextureGatherOffsetARB",    EOpSparseTextureGatherOffset);
11484|  6.24k|            symbolTable.relateToOperator("sparseTextureGatherOffsetsARB",   EOpSparseTextureGatherOffsets);
11485|  6.24k|            symbolTable.relateToOperator("sparseImageLoadARB",              EOpSparseImageLoad);
11486|  6.24k|            symbolTable.relateToOperator("sparseTexelsResidentARB",         EOpSparseTexelsResident);
11487|       |
11488|  6.24k|            symbolTable.relateToOperator("sparseTextureClampARB",           EOpSparseTextureClamp);
11489|  6.24k|            symbolTable.relateToOperator("sparseTextureOffsetClampARB",     EOpSparseTextureOffsetClamp);
11490|  6.24k|            symbolTable.relateToOperator("sparseTextureGradClampARB",       EOpSparseTextureGradClamp);
11491|  6.24k|            symbolTable.relateToOperator("sparseTextureGradOffsetClampARB", EOpSparseTextureGradOffsetClamp);
11492|  6.24k|            symbolTable.relateToOperator("textureClampARB",                 EOpTextureClamp);
11493|  6.24k|            symbolTable.relateToOperator("textureOffsetClampARB",           EOpTextureOffsetClamp);
11494|  6.24k|            symbolTable.relateToOperator("textureGradClampARB",             EOpTextureGradClamp);
11495|  6.24k|            symbolTable.relateToOperator("textureGradOffsetClampARB",       EOpTextureGradOffsetClamp);
11496|       |
11497|  6.24k|            symbolTable.relateToOperator("ballotARB",                       EOpBallot);
11498|  6.24k|            symbolTable.relateToOperator("readInvocationARB",               EOpReadInvocation);
11499|  6.24k|            symbolTable.relateToOperator("readFirstInvocationARB",          EOpReadFirstInvocation);
11500|       |
11501|  6.24k|            if (version >= 430) {
  ------------------
  |  Branch (11501:17): [True: 6.18k, False: 61]
  ------------------
11502|  6.18k|                symbolTable.relateToOperator("anyInvocationARB",            EOpAnyInvocation);
11503|  6.18k|                symbolTable.relateToOperator("allInvocationsARB",           EOpAllInvocations);
11504|  6.18k|                symbolTable.relateToOperator("allInvocationsEqualARB",      EOpAllInvocationsEqual);
11505|  6.18k|            }
11506|  6.24k|            if (version >= 460) {
  ------------------
  |  Branch (11506:17): [True: 14, False: 6.22k]
  ------------------
11507|     14|                symbolTable.relateToOperator("anyInvocation",               EOpAnyInvocation);
11508|     14|                symbolTable.relateToOperator("allInvocations",              EOpAllInvocations);
11509|     14|                symbolTable.relateToOperator("allInvocationsEqual",         EOpAllInvocationsEqual);
11510|     14|            }
11511|       |            // As per dependency between NV_gpu_shader5 and ARB_shader_group_vote
11512|       |            // anyInvocationARB = anyThreadNV
11513|       |            // allInvocationsARB = allThreadsNV
11514|       |            // allInvocationsEqualARB = allThreadsEqualNV
11515|       |            // Thus we reuse the Op's
11516|  6.24k|            if (version >= 150) {
  ------------------
  |  Branch (11516:17): [True: 6.24k, False: 0]
  ------------------
11517|  6.24k|                symbolTable.relateToOperator("anyThreadNV",            EOpAnyInvocation);
11518|  6.24k|                symbolTable.relateToOperator("allThreadsNV",           EOpAllInvocations);
11519|  6.24k|                symbolTable.relateToOperator("allThreadsEqualNV",      EOpAllInvocationsEqual);
11520|  6.24k|            }
11521|  6.24k|            symbolTable.relateToOperator("minInvocationsAMD",                           EOpMinInvocations);
11522|  6.24k|            symbolTable.relateToOperator("maxInvocationsAMD",                           EOpMaxInvocations);
11523|  6.24k|            symbolTable.relateToOperator("addInvocationsAMD",                           EOpAddInvocations);
11524|  6.24k|            symbolTable.relateToOperator("minInvocationsNonUniformAMD",                 EOpMinInvocationsNonUniform);
11525|  6.24k|            symbolTable.relateToOperator("maxInvocationsNonUniformAMD",                 EOpMaxInvocationsNonUniform);
11526|  6.24k|            symbolTable.relateToOperator("addInvocationsNonUniformAMD",                 EOpAddInvocationsNonUniform);
11527|  6.24k|            symbolTable.relateToOperator("minInvocationsInclusiveScanAMD",              EOpMinInvocationsInclusiveScan);
11528|  6.24k|            symbolTable.relateToOperator("maxInvocationsInclusiveScanAMD",              EOpMaxInvocationsInclusiveScan);
11529|  6.24k|            symbolTable.relateToOperator("addInvocationsInclusiveScanAMD",              EOpAddInvocationsInclusiveScan);
11530|  6.24k|            symbolTable.relateToOperator("minInvocationsInclusiveScanNonUniformAMD",    EOpMinInvocationsInclusiveScanNonUniform);
11531|  6.24k|            symbolTable.relateToOperator("maxInvocationsInclusiveScanNonUniformAMD",    EOpMaxInvocationsInclusiveScanNonUniform);
11532|  6.24k|            symbolTable.relateToOperator("addInvocationsInclusiveScanNonUniformAMD",    EOpAddInvocationsInclusiveScanNonUniform);
11533|  6.24k|            symbolTable.relateToOperator("minInvocationsExclusiveScanAMD",              EOpMinInvocationsExclusiveScan);
11534|  6.24k|            symbolTable.relateToOperator("maxInvocationsExclusiveScanAMD",              EOpMaxInvocationsExclusiveScan);
11535|  6.24k|            symbolTable.relateToOperator("addInvocationsExclusiveScanAMD",              EOpAddInvocationsExclusiveScan);
11536|  6.24k|            symbolTable.relateToOperator("minInvocationsExclusiveScanNonUniformAMD",    EOpMinInvocationsExclusiveScanNonUniform);
11537|  6.24k|            symbolTable.relateToOperator("maxInvocationsExclusiveScanNonUniformAMD",    EOpMaxInvocationsExclusiveScanNonUniform);
11538|  6.24k|            symbolTable.relateToOperator("addInvocationsExclusiveScanNonUniformAMD",    EOpAddInvocationsExclusiveScanNonUniform);
11539|  6.24k|            symbolTable.relateToOperator("swizzleInvocationsAMD",                       EOpSwizzleInvocations);
11540|  6.24k|            symbolTable.relateToOperator("swizzleInvocationsMaskedAMD",                 EOpSwizzleInvocationsMasked);
11541|  6.24k|            symbolTable.relateToOperator("writeInvocationAMD",                          EOpWriteInvocation);
11542|  6.24k|            symbolTable.relateToOperator("mbcntAMD",                                    EOpMbcnt);
11543|       |
11544|  6.24k|            symbolTable.relateToOperator("min3",    EOpMin3);
11545|  6.24k|            symbolTable.relateToOperator("max3",    EOpMax3);
11546|  6.24k|            symbolTable.relateToOperator("mid3",    EOpMid3);
11547|       |
11548|  6.24k|            symbolTable.relateToOperator("cubeFaceIndexAMD",    EOpCubeFaceIndex);
11549|  6.24k|            symbolTable.relateToOperator("cubeFaceCoordAMD",    EOpCubeFaceCoord);
11550|  6.24k|            symbolTable.relateToOperator("timeAMD",             EOpTime);
11551|       |
11552|  6.24k|            symbolTable.relateToOperator("textureGatherLodAMD",                 EOpTextureGatherLod);
11553|  6.24k|            symbolTable.relateToOperator("textureGatherLodOffsetAMD",           EOpTextureGatherLodOffset);
11554|  6.24k|            symbolTable.relateToOperator("textureGatherLodOffsetsAMD",          EOpTextureGatherLodOffsets);
11555|  6.24k|            symbolTable.relateToOperator("sparseTextureGatherLodAMD",           EOpSparseTextureGatherLod);
11556|  6.24k|            symbolTable.relateToOperator("sparseTextureGatherLodOffsetAMD",     EOpSparseTextureGatherLodOffset);
11557|  6.24k|            symbolTable.relateToOperator("sparseTextureGatherLodOffsetsAMD",    EOpSparseTextureGatherLodOffsets);
11558|       |
11559|  6.24k|            symbolTable.relateToOperator("imageLoadLodAMD",                     EOpImageLoadLod);
11560|  6.24k|            symbolTable.relateToOperator("imageStoreLodAMD",                    EOpImageStoreLod);
11561|  6.24k|            symbolTable.relateToOperator("sparseImageLoadLodAMD",               EOpSparseImageLoadLod);
11562|       |
11563|  6.24k|            symbolTable.relateToOperator("fragmentMaskFetchAMD",                EOpFragmentMaskFetch);
11564|  6.24k|            symbolTable.relateToOperator("fragmentFetchAMD",                    EOpFragmentFetch);
11565|  6.24k|        }
11566|       |
11567|       |        // GL_EXT_integer_dot_product
11568|  9.39k|        if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (11568:14): [True: 3.15k, False: 6.24k]
  |  Branch (11568:39): [True: 2.97k, False: 180]
  ------------------
11569|  9.13k|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (11569:14): [True: 6.24k, False: 180]
  |  Branch (11569:39): [True: 6.16k, False: 79]
  ------------------
11570|  9.13k|            symbolTable.relateToOperator("dotEXT", EOpDot);
11571|  9.13k|            symbolTable.relateToOperator("dotPacked4x8EXT", EOpDotPackedEXT);
11572|  9.13k|            symbolTable.relateToOperator("dotAccSatEXT", EOpDotAccSatEXT);
11573|  9.13k|            symbolTable.relateToOperator("dotPacked4x8AccSatEXT", EOpDotPackedAccSatEXT);
11574|  9.13k|        }
11575|       |
11576|       |        // GL_EXT_bfloat16
11577|  9.39k|        if ((profile == EEsProfile && version >= 320) ||
  ------------------
  |  Branch (11577:14): [True: 3.15k, False: 6.24k]
  |  Branch (11577:39): [True: 24, False: 3.12k]
  ------------------
11578|  9.36k|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (11578:14): [True: 6.24k, False: 3.12k]
  |  Branch (11578:39): [True: 6.16k, False: 79]
  ------------------
11579|  6.18k|            symbolTable.relateToOperator("bfloat16BitsToIntEXT",  EOpFloatBitsToInt);
11580|  6.18k|            symbolTable.relateToOperator("bfloat16BitsToUintEXT", EOpFloatBitsToUint);
11581|  6.18k|            symbolTable.relateToOperator("intBitsToBFloat16EXT",  EOpIntBitsToFloat);
11582|  6.18k|            symbolTable.relateToOperator("uintBitsToBFloat16EXT", EOpUintBitsToFloat);
11583|       |
11584|  6.18k|            symbolTable.relateToOperator("floate5m2BitsToIntEXT",  EOpFloatBitsToInt);
11585|  6.18k|            symbolTable.relateToOperator("floate5m2BitsToUintEXT", EOpFloatBitsToUint);
11586|  6.18k|            symbolTable.relateToOperator("intBitsToFloate5m2EXT",  EOpIntBitsToFloat);
11587|  6.18k|            symbolTable.relateToOperator("uintBitsToFloate5m2EXT", EOpUintBitsToFloat);
11588|       |
11589|  6.18k|            symbolTable.relateToOperator("floate4m3BitsToIntEXT",  EOpFloatBitsToInt);
11590|  6.18k|            symbolTable.relateToOperator("floate4m3BitsToUintEXT", EOpFloatBitsToUint);
11591|  6.18k|            symbolTable.relateToOperator("intBitsToFloate4m3EXT",  EOpIntBitsToFloat);
11592|  6.18k|            symbolTable.relateToOperator("uintBitsToFloate4m3EXT", EOpUintBitsToFloat);
11593|       |
11594|  6.18k|            symbolTable.relateToOperator("saturatedConvertEXT", EOpConstructSaturated);
11595|       |
11596|  6.18k|            symbolTable.relateToOperator("floatue8m0BitsToIntEXT",  EOpFloatBitsToInt);
11597|  6.18k|            symbolTable.relateToOperator("floatue8m0BitsToUintEXT", EOpFloatBitsToUint);
11598|  6.18k|            symbolTable.relateToOperator("intBitsToFloatue8m0EXT",  EOpIntBitsToFloat);
11599|  6.18k|            symbolTable.relateToOperator("uintBitsToFloatue8m0EXT", EOpUintBitsToFloat);
11600|       |
11601|  6.18k|            symbolTable.relateToOperator("floatmxint8BitsToIntEXT",  EOpFloatBitsToInt);
11602|  6.18k|            symbolTable.relateToOperator("floatmxint8BitsToUintEXT", EOpFloatBitsToUint);
11603|  6.18k|            symbolTable.relateToOperator("intBitsToFloatmxint8EXT",  EOpIntBitsToFloat);
11604|  6.18k|            symbolTable.relateToOperator("uintBitsToFloatmxint8EXT", EOpUintBitsToFloat);
11605|       |
11606|  6.18k|            symbolTable.relateToOperator("unpackFloat2xfe2m1EXT", EOpUnpackFloat2xE2M1);
11607|  6.18k|            symbolTable.relateToOperator("unpackFloat4xfe2m1EXT", EOpUnpackFloat4xE2M1);
11608|  6.18k|            symbolTable.relateToOperator("unpackFloat8xfe2m1EXT", EOpUnpackFloat8xE2M1);
11609|  6.18k|            symbolTable.relateToOperator("unpackFloat16xfe2m1EXT", EOpUnpackFloat16xE2M1);
11610|  6.18k|            symbolTable.relateToOperator("packFloat2xfe2m1EXT", EOpPackFloat2xE2M1);
11611|  6.18k|            symbolTable.relateToOperator("packFloat4xfe2m1EXT", EOpPackFloat4xE2M1);
11612|  6.18k|            symbolTable.relateToOperator("packFloat8xfe2m1EXT", EOpPackFloat8xE2M1);
11613|  6.18k|            symbolTable.relateToOperator("packFloat16xfe2m1EXT", EOpPackFloat16xE2M1);
11614|       |
11615|  6.18k|            symbolTable.relateToOperator("unpackFloat4xfe3m2EXT", EOpUnpackFloat4xE3M2);
11616|  6.18k|            symbolTable.relateToOperator("unpackFloat8xfe3m2EXT", EOpUnpackFloat8xE3M2);
11617|  6.18k|            symbolTable.relateToOperator("unpackFloat16xfe3m2EXT", EOpUnpackFloat16xE3M2);
11618|  6.18k|            symbolTable.relateToOperator("packFloat4xfe3m2EXT", EOpPackFloat4xE3M2);
11619|  6.18k|            symbolTable.relateToOperator("packFloat8xfe3m2EXT", EOpPackFloat8xE3M2);
11620|  6.18k|            symbolTable.relateToOperator("packFloat16xfe3m2EXT", EOpPackFloat16xE3M2);
11621|       |
11622|  6.18k|            symbolTable.relateToOperator("unpackFloat4xfe2m3EXT", EOpUnpackFloat4xE2M3);
11623|  6.18k|            symbolTable.relateToOperator("unpackFloat8xfe2m3EXT", EOpUnpackFloat8xE2M3);
11624|  6.18k|            symbolTable.relateToOperator("unpackFloat16xfe2m3EXT", EOpUnpackFloat16xE2M3);
11625|  6.18k|            symbolTable.relateToOperator("packFloat4xfe2m3EXT", EOpPackFloat4xE2M3);
11626|  6.18k|            symbolTable.relateToOperator("packFloat8xfe2m3EXT", EOpPackFloat8xE2M3);
11627|  6.18k|            symbolTable.relateToOperator("packFloat16xfe2m3EXT", EOpPackFloat16xE2M3);
11628|       |
11629|  6.18k|            symbolTable.relateToOperator("bitcastExtractfe2m1EXT", EOpBitcastExtractE2M1);
11630|  6.18k|            symbolTable.relateToOperator("bitcastExtractfe3m2EXT", EOpBitcastExtractE3M2);
11631|  6.18k|            symbolTable.relateToOperator("bitcastExtractfe2m3EXT", EOpBitcastExtractE2M3);
11632|  6.18k|        }
11633|       |
11634|       |        // GL_KHR_shader_subgroup
11635|  9.39k|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11635:14): [True: 3.15k, False: 6.24k]
  |  Branch (11635:39): [True: 2.97k, False: 180]
  ------------------
11636|  9.21k|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11636:14): [True: 6.24k, False: 180]
  |  Branch (11636:39): [True: 6.24k, False: 0]
  ------------------
11637|  9.21k|            symbolTable.relateToOperator("subgroupBarrier",                 EOpSubgroupBarrier);
11638|  9.21k|            symbolTable.relateToOperator("subgroupMemoryBarrier",           EOpSubgroupMemoryBarrier);
11639|  9.21k|            symbolTable.relateToOperator("subgroupMemoryBarrierBuffer",     EOpSubgroupMemoryBarrierBuffer);
11640|  9.21k|            symbolTable.relateToOperator("subgroupMemoryBarrierImage",      EOpSubgroupMemoryBarrierImage);
11641|  9.21k|            symbolTable.relateToOperator("subgroupElect",                   EOpSubgroupElect);
11642|  9.21k|            symbolTable.relateToOperator("subgroupAll",                     EOpSubgroupAll);
11643|  9.21k|            symbolTable.relateToOperator("subgroupAny",                     EOpSubgroupAny);
11644|  9.21k|            symbolTable.relateToOperator("subgroupAllEqual",                EOpSubgroupAllEqual);
11645|  9.21k|            symbolTable.relateToOperator("subgroupBroadcast",               EOpSubgroupBroadcast);
11646|  9.21k|            symbolTable.relateToOperator("subgroupBroadcastFirst",          EOpSubgroupBroadcastFirst);
11647|  9.21k|            symbolTable.relateToOperator("subgroupBallot",                  EOpSubgroupBallot);
11648|  9.21k|            symbolTable.relateToOperator("subgroupInverseBallot",           EOpSubgroupInverseBallot);
11649|  9.21k|            symbolTable.relateToOperator("subgroupBallotBitExtract",        EOpSubgroupBallotBitExtract);
11650|  9.21k|            symbolTable.relateToOperator("subgroupBallotBitCount",          EOpSubgroupBallotBitCount);
11651|  9.21k|            symbolTable.relateToOperator("subgroupBallotInclusiveBitCount", EOpSubgroupBallotInclusiveBitCount);
11652|  9.21k|            symbolTable.relateToOperator("subgroupBallotExclusiveBitCount", EOpSubgroupBallotExclusiveBitCount);
11653|  9.21k|            symbolTable.relateToOperator("subgroupBallotFindLSB",           EOpSubgroupBallotFindLSB);
11654|  9.21k|            symbolTable.relateToOperator("subgroupBallotFindMSB",           EOpSubgroupBallotFindMSB);
11655|  9.21k|            symbolTable.relateToOperator("subgroupShuffle",                 EOpSubgroupShuffle);
11656|  9.21k|            symbolTable.relateToOperator("subgroupShuffleXor",              EOpSubgroupShuffleXor);
11657|  9.21k|            symbolTable.relateToOperator("subgroupShuffleUp",               EOpSubgroupShuffleUp);
11658|  9.21k|            symbolTable.relateToOperator("subgroupShuffleDown",             EOpSubgroupShuffleDown);
11659|  9.21k|            symbolTable.relateToOperator("subgroupRotate",                  EOpSubgroupRotate);
11660|  9.21k|            symbolTable.relateToOperator("subgroupClusteredRotate",         EOpSubgroupClusteredRotate);
11661|  9.21k|            symbolTable.relateToOperator("subgroupAdd",                     EOpSubgroupAdd);
11662|  9.21k|            symbolTable.relateToOperator("subgroupMul",                     EOpSubgroupMul);
11663|  9.21k|            symbolTable.relateToOperator("subgroupMin",                     EOpSubgroupMin);
11664|  9.21k|            symbolTable.relateToOperator("subgroupMax",                     EOpSubgroupMax);
11665|  9.21k|            symbolTable.relateToOperator("subgroupAnd",                     EOpSubgroupAnd);
11666|  9.21k|            symbolTable.relateToOperator("subgroupOr",                      EOpSubgroupOr);
11667|  9.21k|            symbolTable.relateToOperator("subgroupXor",                     EOpSubgroupXor);
11668|  9.21k|            symbolTable.relateToOperator("subgroupInclusiveAdd",            EOpSubgroupInclusiveAdd);
11669|  9.21k|            symbolTable.relateToOperator("subgroupInclusiveMul",            EOpSubgroupInclusiveMul);
11670|  9.21k|            symbolTable.relateToOperator("subgroupInclusiveMin",            EOpSubgroupInclusiveMin);
11671|  9.21k|            symbolTable.relateToOperator("subgroupInclusiveMax",            EOpSubgroupInclusiveMax);
11672|  9.21k|            symbolTable.relateToOperator("subgroupInclusiveAnd",            EOpSubgroupInclusiveAnd);
11673|  9.21k|            symbolTable.relateToOperator("subgroupInclusiveOr",             EOpSubgroupInclusiveOr);
11674|  9.21k|            symbolTable.relateToOperator("subgroupInclusiveXor",            EOpSubgroupInclusiveXor);
11675|  9.21k|            symbolTable.relateToOperator("subgroupExclusiveAdd",            EOpSubgroupExclusiveAdd);
11676|  9.21k|            symbolTable.relateToOperator("subgroupExclusiveMul",            EOpSubgroupExclusiveMul);
11677|  9.21k|            symbolTable.relateToOperator("subgroupExclusiveMin",            EOpSubgroupExclusiveMin);
11678|  9.21k|            symbolTable.relateToOperator("subgroupExclusiveMax",            EOpSubgroupExclusiveMax);
11679|  9.21k|            symbolTable.relateToOperator("subgroupExclusiveAnd",            EOpSubgroupExclusiveAnd);
11680|  9.21k|            symbolTable.relateToOperator("subgroupExclusiveOr",             EOpSubgroupExclusiveOr);
11681|  9.21k|            symbolTable.relateToOperator("subgroupExclusiveXor",            EOpSubgroupExclusiveXor);
11682|  9.21k|            symbolTable.relateToOperator("subgroupClusteredAdd",            EOpSubgroupClusteredAdd);
11683|  9.21k|            symbolTable.relateToOperator("subgroupClusteredMul",            EOpSubgroupClusteredMul);
11684|  9.21k|            symbolTable.relateToOperator("subgroupClusteredMin",            EOpSubgroupClusteredMin);
11685|  9.21k|            symbolTable.relateToOperator("subgroupClusteredMax",            EOpSubgroupClusteredMax);
11686|  9.21k|            symbolTable.relateToOperator("subgroupClusteredAnd",            EOpSubgroupClusteredAnd);
11687|  9.21k|            symbolTable.relateToOperator("subgroupClusteredOr",             EOpSubgroupClusteredOr);
11688|  9.21k|            symbolTable.relateToOperator("subgroupClusteredXor",            EOpSubgroupClusteredXor);
11689|  9.21k|            symbolTable.relateToOperator("subgroupQuadBroadcast",           EOpSubgroupQuadBroadcast);
11690|  9.21k|            symbolTable.relateToOperator("subgroupQuadSwapHorizontal",      EOpSubgroupQuadSwapHorizontal);
11691|  9.21k|            symbolTable.relateToOperator("subgroupQuadSwapVertical",        EOpSubgroupQuadSwapVertical);
11692|  9.21k|            symbolTable.relateToOperator("subgroupQuadSwapDiagonal",        EOpSubgroupQuadSwapDiagonal);
11693|       |
11694|  9.21k|            symbolTable.relateToOperator("subgroupPartitionNV",                          EOpSubgroupPartition);
11695|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedAddNV",                     EOpSubgroupPartitionedAdd);
11696|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedMulNV",                     EOpSubgroupPartitionedMul);
11697|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedMinNV",                     EOpSubgroupPartitionedMin);
11698|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedMaxNV",                     EOpSubgroupPartitionedMax);
11699|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedAndNV",                     EOpSubgroupPartitionedAnd);
11700|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedOrNV",                      EOpSubgroupPartitionedOr);
11701|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedXorNV",                     EOpSubgroupPartitionedXor);
11702|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedInclusiveAddNV",            EOpSubgroupPartitionedInclusiveAdd);
11703|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedInclusiveMulNV",            EOpSubgroupPartitionedInclusiveMul);
11704|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedInclusiveMinNV",            EOpSubgroupPartitionedInclusiveMin);
11705|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedInclusiveMaxNV",            EOpSubgroupPartitionedInclusiveMax);
11706|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedInclusiveAndNV",            EOpSubgroupPartitionedInclusiveAnd);
11707|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedInclusiveOrNV",             EOpSubgroupPartitionedInclusiveOr);
11708|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedInclusiveXorNV",            EOpSubgroupPartitionedInclusiveXor);
11709|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedExclusiveAddNV",            EOpSubgroupPartitionedExclusiveAdd);
11710|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedExclusiveMulNV",            EOpSubgroupPartitionedExclusiveMul);
11711|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedExclusiveMinNV",            EOpSubgroupPartitionedExclusiveMin);
11712|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedExclusiveMaxNV",            EOpSubgroupPartitionedExclusiveMax);
11713|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedExclusiveAndNV",            EOpSubgroupPartitionedExclusiveAnd);
11714|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedExclusiveOrNV",             EOpSubgroupPartitionedExclusiveOr);
11715|  9.21k|            symbolTable.relateToOperator("subgroupPartitionedExclusiveXorNV",            EOpSubgroupPartitionedExclusiveXor);
11716|  9.21k|        }
11717|       |
11718|  9.39k|        if (profile == EEsProfile) {
  ------------------
  |  Branch (11718:13): [True: 3.15k, False: 6.24k]
  ------------------
11719|  3.15k|            symbolTable.relateToOperator("shadow2DEXT",              EOpTexture);
11720|  3.15k|            symbolTable.relateToOperator("shadow2DProjEXT",          EOpTextureProj);
11721|  3.15k|        }
11722|       |
11723|       |        // GL_EXT_shader_quad_control
11724|  9.39k|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11724:14): [True: 3.15k, False: 6.24k]
  |  Branch (11724:39): [True: 2.97k, False: 180]
  ------------------
11725|  9.21k|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11725:14): [True: 6.24k, False: 180]
  |  Branch (11725:39): [True: 6.24k, False: 0]
  ------------------
11726|  9.21k|            symbolTable.relateToOperator("subgroupQuadAll",                     EOpSubgroupQuadAll);
11727|  9.21k|            symbolTable.relateToOperator("subgroupQuadAny",                     EOpSubgroupQuadAny);
11728|  9.21k|        }
11729|       |
11730|  9.39k|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11730:14): [True: 3.15k, False: 6.24k]
  |  Branch (11730:39): [True: 2.97k, False: 180]
  ------------------
11731|  9.21k|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11731:14): [True: 6.24k, False: 180]
  |  Branch (11731:39): [True: 6.24k, False: 0]
  ------------------
11732|  9.21k|            symbolTable.relateToOperator("textureWeightedQCOM",      EOpImageSampleWeightedQCOM);
11733|  9.21k|            symbolTable.relateToOperator("textureBoxFilterQCOM",     EOpImageBoxFilterQCOM);
11734|  9.21k|            symbolTable.relateToOperator("textureBlockMatchSADQCOM", EOpImageBlockMatchSADQCOM);
11735|  9.21k|            symbolTable.relateToOperator("textureBlockMatchSSDQCOM", EOpImageBlockMatchSSDQCOM);
11736|       |
11737|  9.21k|            symbolTable.relateToOperator("textureBlockMatchWindowSSDQCOM", EOpImageBlockMatchWindowSSDQCOM);
11738|  9.21k|            symbolTable.relateToOperator("textureBlockMatchWindowSADQCOM", EOpImageBlockMatchWindowSADQCOM);
11739|  9.21k|            symbolTable.relateToOperator("textureBlockMatchGatherSSDQCOM", EOpImageBlockMatchGatherSSDQCOM);
11740|  9.21k|            symbolTable.relateToOperator("textureBlockMatchGatherSADQCOM", EOpImageBlockMatchGatherSADQCOM);
11741|  9.21k|        }
11742|       |
11743|  9.39k|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11743:14): [True: 3.15k, False: 6.24k]
  |  Branch (11743:39): [True: 2.97k, False: 180]
  ------------------
11744|  9.21k|            (profile != EEsProfile && version >= 130)) {
  ------------------
  |  Branch (11744:14): [True: 6.24k, False: 180]
  |  Branch (11744:39): [True: 6.24k, False: 0]
  ------------------
11745|  9.21k|            symbolTable.relateToOperator("textureGather4x1QCOM", EOpTextureGather4x1QCOM);
11746|  9.21k|            symbolTable.relateToOperator("textureGatherV2QCOM",  EOpTextureGatherV2QCOM);
11747|  9.21k|            symbolTable.relateToOperator("textureGatherH2QCOM",  EOpTextureGatherH2QCOM);
11748|  9.21k|            symbolTable.relateToOperator("textureGatherDQCOM",   EOpTextureGatherDQCOM);
11749|  9.21k|            symbolTable.relateToOperator("textureGather4x1OffsetQCOM", EOpTextureGather4x1OffsetQCOM);
11750|  9.21k|            symbolTable.relateToOperator("textureGatherV2OffsetQCOM",  EOpTextureGatherV2OffsetQCOM);
11751|  9.21k|            symbolTable.relateToOperator("textureGatherH2OffsetQCOM",  EOpTextureGatherH2OffsetQCOM);
11752|  9.21k|            symbolTable.relateToOperator("textureGatherDOffsetQCOM",   EOpTextureGatherDOffsetQCOM);
11753|  9.21k|        }
11754|       |
11755|  9.39k|        if (profile != EEsProfile && spvVersion.spv == 0) {
  ------------------
  |  Branch (11755:13): [True: 6.24k, False: 3.15k]
  |  Branch (11755:38): [True: 717, False: 5.52k]
  ------------------
11756|    717|            symbolTable.relateToOperator("texture1DArray", EOpTexture);
11757|    717|            symbolTable.relateToOperator("texture2DArray", EOpTexture);
11758|    717|            symbolTable.relateToOperator("shadow1DArray", EOpTexture);
11759|    717|            symbolTable.relateToOperator("shadow2DArray", EOpTexture);
11760|       |
11761|    717|            symbolTable.relateToOperator("texture1DArrayLod", EOpTextureLod);
11762|    717|            symbolTable.relateToOperator("texture2DArrayLod", EOpTextureLod);
11763|    717|            symbolTable.relateToOperator("shadow1DArrayLod", EOpTextureLod);
11764|    717|        }
11765|       |
11766|  9.39k|        symbolTable.relateToOperator("coopVecMatMulNV",              EOpCooperativeVectorMatMulNV);
11767|  9.39k|        symbolTable.relateToOperator("coopVecMatMulAddNV",           EOpCooperativeVectorMatMulAddNV);
11768|  9.39k|        symbolTable.relateToOperator("coopVecLoadNV",                EOpCooperativeVectorLoadNV);
11769|  9.39k|        symbolTable.relateToOperator("coopVecStoreNV",               EOpCooperativeVectorStoreNV);
11770|  9.39k|        symbolTable.relateToOperator("coopVecOuterProductAccumulateNV", EOpCooperativeVectorOuterProductAccumulateNV);
11771|  9.39k|        symbolTable.relateToOperator("coopVecReduceSumAccumulateNV",    EOpCooperativeVectorReduceSumAccumulateNV);
11772|  9.39k|    }
11773|       |
11774|  9.39k|    switch(language) {
11775|  1.11k|    case EShLangVertex:
  ------------------
  |  Branch (11775:5): [True: 1.11k, False: 8.27k]
  ------------------
11776|  1.11k|        break;
11777|       |
11778|    953|    case EShLangTessControl:
  ------------------
  |  Branch (11778:5): [True: 953, False: 8.43k]
  ------------------
11779|  1.90k|    case EShLangTessEvaluation:
  ------------------
  |  Branch (11779:5): [True: 953, False: 8.43k]
  ------------------
11780|  1.90k|        break;
11781|       |
11782|    953|    case EShLangGeometry:
  ------------------
  |  Branch (11782:5): [True: 953, False: 8.43k]
  ------------------
11783|    953|        symbolTable.relateToOperator("EmitStreamVertex",   EOpEmitStreamVertex);
11784|    953|        symbolTable.relateToOperator("EndStreamPrimitive", EOpEndStreamPrimitive);
11785|    953|        symbolTable.relateToOperator("EmitVertex",         EOpEmitVertex);
11786|    953|        symbolTable.relateToOperator("EndPrimitive",       EOpEndPrimitive);
11787|    953|        break;
11788|       |
11789|    920|    case EShLangFragment:
  ------------------
  |  Branch (11789:5): [True: 920, False: 8.47k]
  ------------------
11790|    920|        if (profile != EEsProfile && version >= 400) {
  ------------------
  |  Branch (11790:13): [True: 406, False: 514]
  |  Branch (11790:38): [True: 397, False: 9]
  ------------------
11791|    397|            symbolTable.relateToOperator("dFdxFine",     EOpDPdxFine);
11792|    397|            symbolTable.relateToOperator("dFdyFine",     EOpDPdyFine);
11793|    397|            symbolTable.relateToOperator("fwidthFine",   EOpFwidthFine);
11794|    397|            symbolTable.relateToOperator("dFdxCoarse",   EOpDPdxCoarse);
11795|    397|            symbolTable.relateToOperator("dFdyCoarse",   EOpDPdyCoarse);
11796|    397|            symbolTable.relateToOperator("fwidthCoarse", EOpFwidthCoarse);
11797|    397|        }
11798|       |
11799|    920|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11799:13): [True: 406, False: 514]
  |  Branch (11799:38): [True: 1, False: 405]
  ------------------
11800|      1|            symbolTable.relateToOperator("rayQueryInitializeEXT",                                             EOpRayQueryInitialize);
11801|      1|            symbolTable.relateToOperator("rayQueryTerminateEXT",                                              EOpRayQueryTerminate);
11802|      1|            symbolTable.relateToOperator("rayQueryGenerateIntersectionEXT",                                   EOpRayQueryGenerateIntersection);
11803|      1|            symbolTable.relateToOperator("rayQueryConfirmIntersectionEXT",                                    EOpRayQueryConfirmIntersection);
11804|      1|            symbolTable.relateToOperator("rayQueryProceedEXT",                                                EOpRayQueryProceed);
11805|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionTypeEXT",                                    EOpRayQueryGetIntersectionType);
11806|      1|            symbolTable.relateToOperator("rayQueryGetRayTMinEXT",                                             EOpRayQueryGetRayTMin);
11807|      1|            symbolTable.relateToOperator("rayQueryGetRayFlagsEXT",                                            EOpRayQueryGetRayFlags);
11808|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionTEXT",                                       EOpRayQueryGetIntersectionT);
11809|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceCustomIndexEXT",                     EOpRayQueryGetIntersectionInstanceCustomIndex);
11810|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceIdEXT",                              EOpRayQueryGetIntersectionInstanceId);
11811|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT",  EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset);
11812|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionGeometryIndexEXT",                           EOpRayQueryGetIntersectionGeometryIndex);
11813|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionPrimitiveIndexEXT",                          EOpRayQueryGetIntersectionPrimitiveIndex);
11814|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionBarycentricsEXT",                            EOpRayQueryGetIntersectionBarycentrics);
11815|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionFrontFaceEXT",                               EOpRayQueryGetIntersectionFrontFace);
11816|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                     EOpRayQueryGetIntersectionCandidateAABBOpaque);
11817|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayDirectionEXT",                      EOpRayQueryGetIntersectionObjectRayDirection);
11818|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayOriginEXT",                         EOpRayQueryGetIntersectionObjectRayOrigin);
11819|      1|            symbolTable.relateToOperator("rayQueryGetWorldRayDirectionEXT",                                   EOpRayQueryGetWorldRayDirection);
11820|      1|            symbolTable.relateToOperator("rayQueryGetWorldRayOriginEXT",                                      EOpRayQueryGetWorldRayOrigin);
11821|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT",                           EOpRayQueryGetIntersectionObjectToWorld);
11822|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT",                           EOpRayQueryGetIntersectionWorldToObject);
11823|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionTriangleVertexPositionsEXT",                 EOpRayQueryGetIntersectionTriangleVertexPositionsEXT);
11824|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionClusterIdNV",                                EOpRayQueryGetIntersectionClusterIdNV);
11825|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionSpherePositionNV",                           EOpRayQueryGetIntersectionSpherePositionNV);
11826|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionSphereRadiusNV",                             EOpRayQueryGetIntersectionSphereRadiusNV);
11827|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionLSSHitValueNV",                              EOpRayQueryGetIntersectionLSSHitValueNV);
11828|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionLSSPositionsNV",                             EOpRayQueryGetIntersectionLSSPositionsNV);
11829|      1|            symbolTable.relateToOperator("rayQueryGetIntersectionLSSRadiiNV",                                 EOpRayQueryGetIntersectionLSSRadiiNV);
11830|      1|            symbolTable.relateToOperator("rayQueryIsSphereHitNV",                                             EOpRayQueryIsSphereHitNV);
11831|      1|            symbolTable.relateToOperator("rayQueryIsLSSHitNV",                                                EOpRayQueryIsLSSHitNV);
11832|      1|        }
11833|       |
11834|    920|        symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
11835|    920|        symbolTable.relateToOperator("interpolateAtSample",   EOpInterpolateAtSample);
11836|    920|        symbolTable.relateToOperator("interpolateAtOffset",   EOpInterpolateAtOffset);
11837|       |
11838|    920|        if (profile != EEsProfile)
  ------------------
  |  Branch (11838:13): [True: 406, False: 514]
  ------------------
11839|    406|            symbolTable.relateToOperator("interpolateAtVertexAMD", EOpInterpolateAtVertex);
11840|       |
11841|    920|        symbolTable.relateToOperator("beginInvocationInterlockARB", EOpBeginInvocationInterlock);
11842|    920|        symbolTable.relateToOperator("endInvocationInterlockARB",   EOpEndInvocationInterlock);
11843|       |
11844|    920|        symbolTable.relateToOperator("stencilAttachmentReadEXT", EOpStencilAttachmentReadEXT);
11845|    920|        symbolTable.relateToOperator("depthAttachmentReadEXT",   EOpDepthAttachmentReadEXT);
11846|    920|        symbolTable.relateToOperator("colorAttachmentReadEXT",   EOpColorAttachmentReadEXT);
11847|       |
11848|    920|        break;
11849|       |
11850|    942|    case EShLangCompute:
  ------------------
  |  Branch (11850:5): [True: 942, False: 8.45k]
  ------------------
11851|    942|        symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
11852|    942|        if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (11852:14): [True: 448, False: 494]
  |  Branch (11852:39): [True: 444, False: 4]
  ------------------
11853|    498|            (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (11853:14): [True: 494, False: 4]
  |  Branch (11853:39): [True: 3, False: 491]
  ------------------
11854|    447|            symbolTable.relateToOperator("dFdx",        EOpDPdx);
11855|    447|            symbolTable.relateToOperator("dFdy",        EOpDPdy);
11856|    447|            symbolTable.relateToOperator("fwidth",      EOpFwidth);
11857|    447|            symbolTable.relateToOperator("dFdxFine",    EOpDPdxFine);
11858|    447|            symbolTable.relateToOperator("dFdyFine",    EOpDPdyFine);
11859|    447|            symbolTable.relateToOperator("fwidthFine",  EOpFwidthFine);
11860|    447|            symbolTable.relateToOperator("dFdxCoarse",  EOpDPdxCoarse);
11861|    447|            symbolTable.relateToOperator("dFdyCoarse",  EOpDPdyCoarse);
11862|    447|            symbolTable.relateToOperator("fwidthCoarse",EOpFwidthCoarse);
11863|    447|        }
11864|    942|        symbolTable.relateToOperator("coopMatLoadNV",              EOpCooperativeMatrixLoadNV);
11865|    942|        symbolTable.relateToOperator("coopMatStoreNV",             EOpCooperativeMatrixStoreNV);
11866|    942|        symbolTable.relateToOperator("coopMatMulAddNV",            EOpCooperativeMatrixMulAddNV);
11867|       |
11868|    942|        symbolTable.relateToOperator("coopMatLoad",                EOpCooperativeMatrixLoad);
11869|    942|        symbolTable.relateToOperator("coopMatStore",               EOpCooperativeMatrixStore);
11870|    942|        symbolTable.relateToOperator("coopMatMulAdd",              EOpCooperativeMatrixMulAdd);
11871|       |
11872|    942|        symbolTable.relateToOperator("coopMatLoadTensorNV",        EOpCooperativeMatrixLoadTensorNV);
11873|    942|        symbolTable.relateToOperator("coopMatStoreTensorNV",       EOpCooperativeMatrixStoreTensorNV);
11874|       |
11875|    942|        symbolTable.relateToOperator("coopMatReduceNV",            EOpCooperativeMatrixReduceNV);
11876|    942|        symbolTable.relateToOperator("coopMatPerElementNV",        EOpCooperativeMatrixPerElementOpNV);
11877|    942|        symbolTable.relateToOperator("coopMatTransposeNV",         EOpCooperativeMatrixTransposeNV);
11878|       |
11879|    942|        symbolTable.relateToOperator("coopMatReduceEXT",           EOpCooperativeMatrixReduceNV);
11880|    942|        symbolTable.relateToOperator("coopMatPerElementEXT",       EOpCooperativeMatrixPerElementOpNV);
11881|    942|        symbolTable.relateToOperator("coopMatTransposeEXT",        EOpCooperativeMatrixTransposeNV);
11882|    942|        symbolTable.relateToOperator("coopMatGetCoordinateEXT",    EOpCooperativeMatrixGetCoordinateEXT);
11883|       |
11884|    942|        symbolTable.relateToOperator("createTensorLayoutNV",         EOpCreateTensorLayoutNV);
11885|    942|        symbolTable.relateToOperator("setTensorLayoutBlockSizeNV",   EOpTensorLayoutSetBlockSizeNV);
11886|    942|        symbolTable.relateToOperator("setTensorLayoutDimensionNV",   EOpTensorLayoutSetDimensionNV);
11887|    942|        symbolTable.relateToOperator("setTensorLayoutStrideNV",      EOpTensorLayoutSetStrideNV);
11888|    942|        symbolTable.relateToOperator("sliceTensorLayoutNV",          EOpTensorLayoutSliceNV);
11889|    942|        symbolTable.relateToOperator("setTensorLayoutClampValueNV",  EOpTensorLayoutSetClampValueNV);
11890|       |
11891|    942|        symbolTable.relateToOperator("createTensorViewNV",           EOpCreateTensorViewNV);
11892|    942|        symbolTable.relateToOperator("setTensorViewDimensionsNV",    EOpTensorViewSetDimensionNV);
11893|    942|        symbolTable.relateToOperator("setTensorViewStrideNV",        EOpTensorViewSetStrideNV);
11894|    942|        symbolTable.relateToOperator("setTensorViewClipNV",          EOpTensorViewSetClipNV);
11895|       |
11896|    942|        symbolTable.relateToOperator("tensorReadARM",                EOpTensorReadARM);
11897|    942|        symbolTable.relateToOperator("tensorWriteARM",               EOpTensorWriteARM);
11898|    942|        symbolTable.relateToOperator("tensorSizeARM",                EOpTensorSizeARM);
11899|       |
11900|    942|        symbolTable.relateToOperator("bitcastQCOM", EOpBitCastArrayQCOM);
11901|    942|        symbolTable.relateToOperator("extractSubArrayQCOM", EOpExtractSubArrayQCOM);
11902|    942|        symbolTable.relateToOperator("vectorToCoopmatQCOM", EOpCompositeConstructCoopMatQCOM);
11903|    942|        symbolTable.relateToOperator("coopmatToVectorQCOM", EOpCompositeExtractCoopMatQCOM);
11904|       |
11905|    942|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11905:13): [True: 448, False: 494]
  |  Branch (11905:38): [True: 1, False: 447]
  ------------------
11906|      1|            symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
11907|      1|            symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
11908|      1|        }
11909|    942|        break;
11910|       |
11911|    444|    case EShLangRayGen:
  ------------------
  |  Branch (11911:5): [True: 444, False: 8.94k]
  ------------------
11912|    444|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11912:13): [True: 444, False: 0]
  |  Branch (11912:38): [True: 1, False: 443]
  ------------------
11913|      1|            symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
11914|      1|            symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
11915|      1|        }
11916|    444|        [[fallthrough]];
11917|    888|    case EShLangClosestHit:
  ------------------
  |  Branch (11917:5): [True: 444, False: 8.94k]
  ------------------
11918|  1.33k|    case EShLangMiss:
  ------------------
  |  Branch (11918:5): [True: 444, False: 8.94k]
  ------------------
11919|  1.33k|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11919:13): [True: 1.33k, False: 0]
  |  Branch (11919:38): [True: 3, False: 1.32k]
  ------------------
11920|      3|            symbolTable.relateToOperator("traceNV", EOpTraceNV);
11921|      3|            symbolTable.relateToOperator("traceRayMotionNV", EOpTraceRayMotionNV);
11922|      3|            symbolTable.relateToOperator("traceRayEXT", EOpTraceKHR);
11923|      3|            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
11924|      3|            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
11925|       |
11926|      3|            symbolTable.relateToOperator("hitObjectTraceRayNV", EOpHitObjectTraceRayNV);
11927|      3|            symbolTable.relateToOperator("hitObjectTraceRayMotionNV", EOpHitObjectTraceRayMotionNV);
11928|      3|            symbolTable.relateToOperator("hitObjectRecordHitNV", EOpHitObjectRecordHitNV);
11929|      3|            symbolTable.relateToOperator("hitObjectRecordHitMotionNV", EOpHitObjectRecordHitMotionNV);
11930|      3|            symbolTable.relateToOperator("hitObjectRecordHitWithIndexNV", EOpHitObjectRecordHitWithIndexNV);
11931|      3|            symbolTable.relateToOperator("hitObjectRecordHitWithIndexMotionNV", EOpHitObjectRecordHitWithIndexMotionNV);
11932|      3|            symbolTable.relateToOperator("hitObjectRecordMissNV", EOpHitObjectRecordMissNV);
11933|      3|            symbolTable.relateToOperator("hitObjectRecordMissMotionNV", EOpHitObjectRecordMissMotionNV);
11934|      3|            symbolTable.relateToOperator("hitObjectRecordEmptyNV", EOpHitObjectRecordEmptyNV);
11935|      3|            symbolTable.relateToOperator("hitObjectExecuteShaderNV", EOpHitObjectExecuteShaderNV);
11936|      3|            symbolTable.relateToOperator("hitObjectIsEmptyNV", EOpHitObjectIsEmptyNV);
11937|      3|            symbolTable.relateToOperator("hitObjectIsMissNV", EOpHitObjectIsMissNV);
11938|      3|            symbolTable.relateToOperator("hitObjectIsHitNV", EOpHitObjectIsHitNV);
11939|      3|            symbolTable.relateToOperator("hitObjectGetRayTMinNV", EOpHitObjectGetRayTMinNV);
11940|      3|            symbolTable.relateToOperator("hitObjectGetRayTMaxNV", EOpHitObjectGetRayTMaxNV);
11941|      3|            symbolTable.relateToOperator("hitObjectGetObjectRayOriginNV", EOpHitObjectGetObjectRayOriginNV);
11942|      3|            symbolTable.relateToOperator("hitObjectGetObjectRayDirectionNV", EOpHitObjectGetObjectRayDirectionNV);
11943|      3|            symbolTable.relateToOperator("hitObjectGetWorldRayOriginNV", EOpHitObjectGetWorldRayOriginNV);
11944|      3|            symbolTable.relateToOperator("hitObjectGetWorldRayDirectionNV", EOpHitObjectGetWorldRayDirectionNV);
11945|      3|            symbolTable.relateToOperator("hitObjectGetWorldToObjectNV", EOpHitObjectGetWorldToObjectNV);
11946|      3|            symbolTable.relateToOperator("hitObjectGetObjectToWorldNV", EOpHitObjectGetObjectToWorldNV);
11947|      3|            symbolTable.relateToOperator("hitObjectGetInstanceCustomIndexNV", EOpHitObjectGetInstanceCustomIndexNV);
11948|      3|            symbolTable.relateToOperator("hitObjectGetInstanceIdNV", EOpHitObjectGetInstanceIdNV);
11949|      3|            symbolTable.relateToOperator("hitObjectGetGeometryIndexNV", EOpHitObjectGetGeometryIndexNV);
11950|      3|            symbolTable.relateToOperator("hitObjectGetPrimitiveIndexNV", EOpHitObjectGetPrimitiveIndexNV);
11951|      3|            symbolTable.relateToOperator("hitObjectGetHitKindNV", EOpHitObjectGetHitKindNV);
11952|      3|            symbolTable.relateToOperator("hitObjectGetAttributesNV", EOpHitObjectGetAttributesNV);
11953|      3|            symbolTable.relateToOperator("hitObjectGetCurrentTimeNV", EOpHitObjectGetCurrentTimeNV);
11954|      3|            symbolTable.relateToOperator("hitObjectGetShaderBindingTableRecordIndexNV", EOpHitObjectGetShaderBindingTableRecordIndexNV);
11955|      3|            symbolTable.relateToOperator("hitObjectGetShaderRecordBufferHandleNV", EOpHitObjectGetShaderRecordBufferHandleNV);
11956|      3|            symbolTable.relateToOperator("hitObjectGetClusterIdNV", EOpHitObjectGetClusterIdNV);
11957|      3|            symbolTable.relateToOperator("reorderThreadNV", EOpReorderThreadNV);
11958|      3|            symbolTable.relateToOperator("hitObjectGetSpherePositionNV", EOpHitObjectGetSpherePositionNV);
11959|      3|            symbolTable.relateToOperator("hitObjectGetSphereRadiusNV", EOpHitObjectGetSphereRadiusNV);
11960|      3|            symbolTable.relateToOperator("hitObjectGetLSSPositionsNV", EOpHitObjectGetLSSPositionsNV);
11961|      3|            symbolTable.relateToOperator("hitObjectGetLSSRadiiNV", EOpHitObjectGetLSSRadiiNV);
11962|      3|            symbolTable.relateToOperator("hitObjectIsSphereHitNV", EOpHitObjectIsSphereHitNV);
11963|      3|            symbolTable.relateToOperator("hitObjectIsLSSHitNV", EOpHitObjectIsLSSHitNV);
11964|      3|            symbolTable.relateToOperator("hitObjectTraceRayEXT", EOpHitObjectTraceRayEXT);
11965|      3|            symbolTable.relateToOperator("hitObjectTraceRayMotionEXT", EOpHitObjectTraceRayMotionEXT);
11966|      3|            symbolTable.relateToOperator("hitObjectRecordMissEXT", EOpHitObjectRecordMissEXT);
11967|      3|            symbolTable.relateToOperator("hitObjectRecordMissMotionEXT", EOpHitObjectRecordMissMotionEXT);
11968|      3|            symbolTable.relateToOperator("hitObjectRecordEmptyEXT", EOpHitObjectRecordEmptyEXT);
11969|      3|            symbolTable.relateToOperator("hitObjectExecuteShaderEXT", EOpHitObjectExecuteShaderEXT);
11970|      3|            symbolTable.relateToOperator("hitObjectIsEmptyEXT", EOpHitObjectIsEmptyEXT);
11971|      3|            symbolTable.relateToOperator("hitObjectIsMissEXT", EOpHitObjectIsMissEXT);
11972|      3|            symbolTable.relateToOperator("hitObjectIsHitEXT", EOpHitObjectIsHitEXT);
11973|      3|            symbolTable.relateToOperator("hitObjectGetRayTMinEXT", EOpHitObjectGetRayTMinEXT);
11974|      3|            symbolTable.relateToOperator("hitObjectGetRayTMaxEXT", EOpHitObjectGetRayTMaxEXT);
11975|      3|            symbolTable.relateToOperator("hitObjectGetRayFlagsEXT", EOpHitObjectGetRayFlagsEXT);
11976|      3|            symbolTable.relateToOperator("hitObjectGetObjectRayOriginEXT", EOpHitObjectGetObjectRayOriginEXT);
11977|      3|            symbolTable.relateToOperator("hitObjectGetObjectRayDirectionEXT", EOpHitObjectGetObjectRayDirectionEXT);
11978|      3|            symbolTable.relateToOperator("hitObjectGetWorldRayOriginEXT", EOpHitObjectGetWorldRayOriginEXT);
11979|      3|            symbolTable.relateToOperator("hitObjectGetWorldRayDirectionEXT", EOpHitObjectGetWorldRayDirectionEXT);
11980|      3|            symbolTable.relateToOperator("hitObjectGetWorldToObjectEXT", EOpHitObjectGetWorldToObjectEXT);
11981|      3|            symbolTable.relateToOperator("hitObjectGetObjectToWorldEXT", EOpHitObjectGetObjectToWorldEXT);
11982|      3|            symbolTable.relateToOperator("hitObjectGetInstanceCustomIndexEXT", EOpHitObjectGetInstanceCustomIndexEXT);
11983|      3|            symbolTable.relateToOperator("hitObjectGetInstanceIdEXT", EOpHitObjectGetInstanceIdEXT);
11984|      3|            symbolTable.relateToOperator("hitObjectGetGeometryIndexEXT", EOpHitObjectGetGeometryIndexEXT);
11985|      3|            symbolTable.relateToOperator("hitObjectGetPrimitiveIndexEXT", EOpHitObjectGetPrimitiveIndexEXT);
11986|      3|            symbolTable.relateToOperator("hitObjectGetHitKindEXT", EOpHitObjectGetHitKindEXT);
11987|      3|            symbolTable.relateToOperator("hitObjectGetAttributesEXT", EOpHitObjectGetAttributesEXT);
11988|      3|            symbolTable.relateToOperator("hitObjectGetCurrentTimeEXT", EOpHitObjectGetCurrentTimeEXT);
11989|      3|            symbolTable.relateToOperator("hitObjectGetShaderBindingTableRecordIndexEXT", EOpHitObjectGetShaderBindingTableRecordIndexEXT);
11990|      3|            symbolTable.relateToOperator("hitObjectGetShaderRecordBufferHandleEXT", EOpHitObjectGetShaderRecordBufferHandleEXT);
11991|      3|            symbolTable.relateToOperator("hitObjectSetShaderBindingTableRecordIndexEXT", EOpHitObjectSetShaderBindingTableRecordIndexEXT);
11992|      3|            symbolTable.relateToOperator("reorderThreadEXT", EOpReorderThreadEXT);
11993|      3|            symbolTable.relateToOperator("hitObjectReorderExecuteEXT", EOpHitObjectReorderExecuteEXT);
11994|      3|            symbolTable.relateToOperator("hitObjectTraceReorderExecuteEXT", EOpHitObjectTraceReorderExecuteEXT);
11995|      3|            symbolTable.relateToOperator("hitObjectTraceMotionReorderExecuteEXT", EOpHitObjectTraceMotionReorderExecuteEXT);
11996|      3|            symbolTable.relateToOperator("hitObjectRecordFromQueryEXT", EOpHitObjectRecordFromQueryEXT);
11997|      3|            symbolTable.relateToOperator("hitObjectGetIntersectionTriangleVertexPositionsEXT", EOpHitObjectGetIntersectionTriangleVertexPositionsEXT);
11998|      3|        }
11999|  1.33k|        break;
12000|    444|    case EShLangIntersect:
  ------------------
  |  Branch (12000:5): [True: 444, False: 8.94k]
  ------------------
12001|    444|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (12001:13): [True: 444, False: 0]
  |  Branch (12001:38): [True: 1, False: 443]
  ------------------
12002|      1|            symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersection);
12003|      1|            symbolTable.relateToOperator("reportIntersectionEXT", EOpReportIntersection);
12004|      1|        }
12005|    444|        break;
12006|    444|    case EShLangAnyHit:
  ------------------
  |  Branch (12006:5): [True: 444, False: 8.94k]
  ------------------
12007|    444|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (12007:13): [True: 444, False: 0]
  |  Branch (12007:38): [True: 1, False: 443]
  ------------------
12008|      1|            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersectionNV);
12009|      1|            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRayNV);
12010|      1|        }
12011|    444|        break;
12012|    444|    case EShLangCallable:
  ------------------
  |  Branch (12012:5): [True: 444, False: 8.94k]
  ------------------
12013|    444|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (12013:13): [True: 444, False: 0]
  |  Branch (12013:38): [True: 1, False: 443]
  ------------------
12014|      1|            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
12015|      1|            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
12016|      1|        }
12017|    444|        break;
12018|    447|    case EShLangMesh:
  ------------------
  |  Branch (12018:5): [True: 447, False: 8.94k]
  ------------------
12019|    447|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (12019:14): [True: 444, False: 3]
  |  Branch (12019:39): [True: 444, False: 0]
  |  Branch (12019:59): [True: 3, False: 0]
  |  Branch (12019:84): [True: 3, False: 0]
  ------------------
12020|    447|            symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV);
12021|    447|            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
12022|    447|            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
12023|    447|            symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
12024|    447|        }
12025|       |
12026|    447|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (12026:13): [True: 444, False: 3]
  |  Branch (12026:38): [True: 444, False: 0]
  ------------------
12027|    444|            symbolTable.relateToOperator("SetMeshOutputsEXT", EOpSetMeshOutputsEXT);
12028|    444|        }
12029|       |
12030|    447|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (12030:13): [True: 444, False: 3]
  |  Branch (12030:38): [True: 1, False: 443]
  ------------------
12031|       |            // Builtins for GL_NV_displacement_micromap.
12032|      1|            symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
12033|      1|            symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
12034|      1|        }
12035|    447|        break;
12036|    447|    case EShLangTask:
  ------------------
  |  Branch (12036:5): [True: 447, False: 8.94k]
  ------------------
12037|    447|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (12037:14): [True: 444, False: 3]
  |  Branch (12037:39): [True: 444, False: 0]
  |  Branch (12037:59): [True: 3, False: 0]
  |  Branch (12037:84): [True: 3, False: 0]
  ------------------
12038|    447|            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
12039|    447|            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
12040|    447|            symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
12041|    447|        }
12042|    447|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (12042:13): [True: 444, False: 3]
  |  Branch (12042:38): [True: 444, False: 0]
  ------------------
12043|    444|            symbolTable.relateToOperator("EmitMeshTasksEXT", EOpEmitMeshTasksEXT);
12044|    444|        }
12045|    447|        break;
12046|       |
12047|      0|    default:
  ------------------
  |  Branch (12047:5): [True: 0, False: 9.39k]
  ------------------
12048|       |        assert(false && "Language not supported");
12049|  9.39k|    }
12050|  9.39k|}
_ZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableERK16TBuiltInResource:
12062|    913|{
12063|    913|    if (profile != EEsProfile && version >= 430 && version < 440) {
  ------------------
  |  Branch (12063:9): [True: 399, False: 514]
  |  Branch (12063:34): [True: 394, False: 5]
  |  Branch (12063:52): [True: 1, False: 393]
  ------------------
12064|      1|        symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
12065|      1|        symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);
12066|      1|    }
12067|    913|    if (profile != EEsProfile && version >= 130 && version < 420) {
  ------------------
  |  Branch (12067:9): [True: 399, False: 514]
  |  Branch (12067:34): [True: 399, False: 0]
  |  Branch (12067:52): [True: 4, False: 395]
  ------------------
12068|      4|        symbolTable.setVariableExtensions("gl_MinProgramTexelOffset", 1, &E_GL_ARB_shading_language_420pack);
12069|      4|        symbolTable.setVariableExtensions("gl_MaxProgramTexelOffset", 1, &E_GL_ARB_shading_language_420pack);
12070|      4|    }
12071|    913|    if (profile != EEsProfile && version >= 150 && version < 410)
  ------------------
  |  Branch (12071:9): [True: 399, False: 514]
  |  Branch (12071:34): [True: 399, False: 0]
  |  Branch (12071:52): [True: 3, False: 396]
  ------------------
12072|      3|        symbolTable.setVariableExtensions("gl_MaxViewports", 1, &E_GL_ARB_viewport_array);
12073|       |
12074|    913|    switch(language) {
12075|      0|    case EShLangFragment:
  ------------------
  |  Branch (12075:5): [True: 0, False: 913]
  ------------------
12076|       |        // Set up gl_FragData based on current array size.
12077|      0|        if (version == 100 || IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) {
  ------------------
  |  Branch (12077:13): [True: 0, False: 0]
  |  Branch (12077:31): [True: 0, False: 0]
  |  Branch (12077:79): [True: 0, Folded]
  |  Branch (12077:105): [True: 0, False: 0]
  |  Branch (12077:130): [True: 0, False: 0]
  ------------------
12078|      0|            TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone;
  ------------------
  |  Branch (12078:38): [True: 0, False: 0]
  ------------------
12079|      0|            TType fragData(EbtFloat, EvqFragColor, pq, 4);
12080|      0|            TArraySizes* arraySizes = new TArraySizes;
12081|      0|            arraySizes->addInnerSize(resources.maxDrawBuffers);
12082|      0|            fragData.transferArraySizes(arraySizes);
12083|      0|            symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData));
12084|      0|            SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable);
12085|      0|        }
12086|       |
12087|       |        // GL_EXT_blend_func_extended
12088|      0|        if (profile == EEsProfile && version >= 100) {
  ------------------
  |  Branch (12088:13): [True: 0, False: 0]
  |  Branch (12088:38): [True: 0, False: 0]
  ------------------
12089|      0|           symbolTable.setVariableExtensions("gl_MaxDualSourceDrawBuffersEXT",    1, &E_GL_EXT_blend_func_extended);
12090|      0|           symbolTable.setVariableExtensions("gl_SecondaryFragColorEXT",    1, &E_GL_EXT_blend_func_extended);
12091|      0|           symbolTable.setVariableExtensions("gl_SecondaryFragDataEXT",    1, &E_GL_EXT_blend_func_extended);
12092|      0|           SpecialQualifier("gl_SecondaryFragColorEXT", EvqVaryingOut, EbvSecondaryFragColorEXT, symbolTable);
12093|      0|           SpecialQualifier("gl_SecondaryFragDataEXT", EvqVaryingOut, EbvSecondaryFragDataEXT, symbolTable);
12094|      0|        }
12095|       |
12096|      0|        break;
12097|       |
12098|      0|    case EShLangTessControl:
  ------------------
  |  Branch (12098:5): [True: 0, False: 913]
  ------------------
12099|      0|    case EShLangTessEvaluation:
  ------------------
  |  Branch (12099:5): [True: 0, False: 913]
  ------------------
12100|       |        // Because of the context-dependent array size (gl_MaxPatchVertices),
12101|       |        // these variables were added later than the others and need to be mapped now.
12102|       |
12103|       |        // standard members
12104|      0|        BuiltInVariable("gl_in", "gl_Position",     EbvPosition,     symbolTable);
12105|      0|        BuiltInVariable("gl_in", "gl_PointSize",    EbvPointSize,    symbolTable);
12106|      0|        BuiltInVariable("gl_in", "gl_ClipDistance", EbvClipDistance, symbolTable);
12107|      0|        BuiltInVariable("gl_in", "gl_CullDistance", EbvCullDistance, symbolTable);
12108|       |
12109|       |        // compatibility members
12110|      0|        BuiltInVariable("gl_in", "gl_ClipVertex",          EbvClipVertex,          symbolTable);
12111|      0|        BuiltInVariable("gl_in", "gl_FrontColor",          EbvFrontColor,          symbolTable);
12112|      0|        BuiltInVariable("gl_in", "gl_BackColor",           EbvBackColor,           symbolTable);
12113|      0|        BuiltInVariable("gl_in", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
12114|      0|        BuiltInVariable("gl_in", "gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
12115|      0|        BuiltInVariable("gl_in", "gl_TexCoord",            EbvTexCoord,            symbolTable);
12116|      0|        BuiltInVariable("gl_in", "gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
12117|       |
12118|      0|        symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
12119|      0|        symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
12120|       |
12121|      0|        BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
12122|      0|        BuiltInVariable("gl_in", "gl_PositionPerViewNV",   EbvPositionPerViewNV,   symbolTable);
12123|       |
12124|       |        // extension requirements
12125|      0|        if (profile == EEsProfile) {
  ------------------
  |  Branch (12125:13): [True: 0, False: 0]
  ------------------
12126|      0|            symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
12127|      0|        }
12128|       |
12129|      0|        break;
12130|       |
12131|    913|    default:
  ------------------
  |  Branch (12131:5): [True: 913, False: 0]
  ------------------
12132|    913|        break;
12133|    913|    }
12134|    913|}
Initialize.cpp:_ZZN7glslang9TBuiltIns17addTabledBuiltinsEi8EProfileRKNS_10SpvVersionEENK3$_0clERNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEERK4spanIKNS_12_GLOBAL__N_115BuiltInFunctionEE:
  510|  2.67k|    const auto forEachFunction = [&](TString& decls, const span<const BuiltInFunction>& functions) {
  511|  92.6k|        for (const auto& fn : functions) {
  ------------------
  |  Branch (511:29): [True: 92.6k, False: 2.67k]
  ------------------
  512|  92.6k|            if (ValidVersion(fn, version, profile, spvVersion)) {
  ------------------
  |  Branch (512:17): [True: 87.0k, False: 5.54k]
  ------------------
  513|  87.0k|                AddTabledBuiltin(decls, fn);
  514|  87.0k|                if (profile != EEsProfile) {
  ------------------
  |  Branch (514:21): [True: 38.8k, False: 48.1k]
  ------------------
  515|  38.8k|                    AddLongVectorBuiltin(decls, fn);
  516|  38.8k|                }
  517|  87.0k|            }
  518|  92.6k|        }
  519|  2.67k|    };
Initialize.cpp:_ZN7glslang12_GLOBAL__N_112ValidVersionERKNS0_15BuiltInFunctionEi8EProfileRKNS_10SpvVersionE:
  476|  92.6k|{
  477|       |    // nullptr means always valid
  478|  92.6k|    if (function.versioning.empty())
  ------------------
  |  Branch (478:9): [True: 54.7k, False: 37.8k]
  ------------------
  479|  54.7k|        return true;
  480|       |
  481|       |    // check for what is said about our current profile
  482|  58.8k|    for (const auto& v : function.versioning) {
  ------------------
  |  Branch (482:24): [True: 58.8k, False: 5.54k]
  ------------------
  483|  58.8k|        if ((v.profiles & profile) != 0) {
  ------------------
  |  Branch (483:13): [True: 37.8k, False: 21.0k]
  ------------------
  484|  37.8k|            if (v.minCoreVersion <= version || (v.numExtensions > 0 && v.minExtendedVersion <= version))
  ------------------
  |  Branch (484:17): [True: 32.3k, False: 5.54k]
  |  Branch (484:49): [True: 0, False: 5.54k]
  |  Branch (484:72): [True: 0, False: 0]
  ------------------
  485|  32.3k|                return true;
  486|  37.8k|        }
  487|  58.8k|    }
  488|       |
  489|  5.54k|    return false;
  490|  37.8k|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_116AddTabledBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionE:
  322|  87.0k|{
  323|  87.0k|    const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
  324|       |
  325|       |    // loop across these two:
  326|       |    //  0: the varying arg set, and
  327|       |    //  1: the fixed scalar args
  328|  87.0k|    const ArgClass ClassFixed = (ArgClass)(ClassLS | ClassXLS | ClassLS2 | ClassFS | ClassFS2);
  329|   185k|    for (int fixed = 0; fixed < ((function.classes & ClassFixed) > 0 ? 2 : 1); ++fixed) {
  ------------------
  |  Branch (329:25): [True: 98.8k, False: 87.0k]
  |  Branch (329:34): [True: 35.2k, False: 150k]
  ------------------
  330|       |
  331|  98.8k|        if (fixed == 0 && (function.classes & ClassXLS))
  ------------------
  |  Branch (331:13): [True: 87.0k, False: 11.7k]
  |  Branch (331:27): [True: 1.11k, False: 85.9k]
  ------------------
  332|  1.11k|            continue;
  333|       |
  334|       |        // walk the type strings in TypeString[]
  335|  1.66M|        for (int type = 0; type < TypeStringCount; ++type) {
  ------------------
  |  Branch (335:28): [True: 1.56M, False: 97.7k]
  ------------------
  336|       |            // skip types not selected: go from type to row number to type bit
  337|  1.56M|            if ((function.types & (1 << (type >> TypeStringRowShift))) == 0)
  ------------------
  |  Branch (337:17): [True: 1.08M, False: 483k]
  ------------------
  338|  1.08M|                continue;
  339|       |
  340|       |            // if we aren't on a scalar, and should be, skip
  341|   483k|            if ((function.classes & ClassV1) && !isScalarType(type))
  ------------------
  |  Branch (341:17): [True: 60.4k, False: 422k]
  |  Branch (341:49): [True: 45.3k, False: 15.1k]
  ------------------
  342|  45.3k|                continue;
  343|       |
  344|       |            // if we aren't on a 3-vector, and should be, skip
  345|   437k|            if ((function.classes & ClassV3) && (type & TypeStringColumnMask) != 2)
  ------------------
  |  Branch (345:17): [True: 4.45k, False: 433k]
  |  Branch (345:49): [True: 3.33k, False: 1.11k]
  ------------------
  346|  3.33k|                continue;
  347|       |
  348|       |            // skip replication of all arg scalars between the varying arg set and the fixed args
  349|   434k|            if (fixed == 1 && type == (type & TypeStringScalarMask) && (function.classes & ClassXLS) == 0)
  ------------------
  |  Branch (349:17): [True: 58.4k, False: 376k]
  |  Branch (349:31): [True: 14.6k, False: 43.8k]
  |  Branch (349:72): [True: 13.5k, False: 1.11k]
  ------------------
  350|  13.5k|                continue;
  351|       |
  352|       |            // skip scalars when we are told to
  353|   421k|            if ((function.classes & ClassNS) && isScalarType(type))
  ------------------
  |  Branch (353:17): [True: 98.5k, False: 322k]
  |  Branch (353:49): [True: 24.6k, False: 73.9k]
  ------------------
  354|  24.6k|                continue;
  355|       |
  356|       |            // return type
  357|   396k|            if (function.classes & ClassB)
  ------------------
  |  Branch (357:17): [True: 71.5k, False: 324k]
  ------------------
  358|  71.5k|                decls.append(TypeString[type & TypeStringColumnMask]);
  359|   324k|            else if (function.classes & ClassRS)
  ------------------
  |  Branch (359:22): [True: 20.0k, False: 304k]
  ------------------
  360|  20.0k|                decls.append(TypeString[type & TypeStringScalarMask]);
  361|   304k|            else
  362|   304k|                decls.append(TypeString[type]);
  363|   396k|            decls.append(" ");
  364|   396k|            decls.append(function.name);
  365|   396k|            decls.append("(");
  366|       |
  367|       |            // arguments
  368|  1.08M|            for (int arg = 0; arg < function.numArguments; ++arg) {
  ------------------
  |  Branch (368:31): [True: 683k, False: 396k]
  ------------------
  369|   683k|                if (arg == function.numArguments - 1 && (function.classes & ClassLO))
  ------------------
  |  Branch (369:21): [True: 396k, False: 287k]
  |  Branch (369:57): [True: 3.81k, False: 392k]
  ------------------
  370|  3.81k|                    decls.append("out ");
  371|   683k|                if (arg == 0) {
  ------------------
  |  Branch (371:21): [True: 396k, False: 287k]
  ------------------
  372|   396k|                    if (function.classes & ClassCVN)
  ------------------
  |  Branch (372:25): [True: 15.1k, False: 381k]
  ------------------
  373|  15.1k|                        decls.append("coherent volatile nontemporal ");
  374|   396k|                    if (function.classes & ClassFIO)
  ------------------
  |  Branch (374:25): [True: 15.1k, False: 381k]
  ------------------
  375|  15.1k|                        decls.append("inout ");
  376|   396k|                    if (function.classes & ClassFO)
  ------------------
  |  Branch (376:25): [True: 0, False: 396k]
  ------------------
  377|      0|                        decls.append("out ");
  378|   396k|                }
  379|   683k|                if ((function.classes & ClassLB) && arg == function.numArguments - 1)
  ------------------
  |  Branch (379:21): [True: 33.9k, False: 649k]
  |  Branch (379:53): [True: 11.3k, False: 22.6k]
  ------------------
  380|  11.3k|                    decls.append(TypeString[type & TypeStringColumnMask]);
  381|   672k|                else if (fixed && ((arg == function.numArguments - 1 && (function.classes & (ClassLS | ClassXLS |
  ------------------
  |  Branch (381:26): [True: 110k, False: 562k]
  |  Branch (381:37): [True: 44.9k, False: 65.1k]
  |  Branch (381:73): [True: 38.3k, False: 6.67k]
  ------------------
  382|  44.9k|                                                                                                       ClassLS2))) ||
  383|  71.8k|                                   (arg == function.numArguments - 2 && (function.classes & ClassLS2))             ||
  ------------------
  |  Branch (383:37): [True: 44.9k, False: 26.8k]
  |  Branch (383:73): [True: 9.05k, False: 35.9k]
  ------------------
  384|  62.7k|                                   (arg == 0                         && (function.classes & (ClassFS | ClassFS2))) ||
  ------------------
  |  Branch (384:37): [True: 44.9k, False: 17.8k]
  |  Branch (384:73): [True: 6.67k, False: 38.3k]
  ------------------
  385|  56.1k|                                   (arg == 1                         && (function.classes & ClassFS2))))
  ------------------
  |  Branch (385:37): [True: 14.4k, False: 41.6k]
  |  Branch (385:73): [True: 3.33k, False: 11.1k]
  ------------------
  386|  57.3k|                    decls.append(TypeString[type & TypeStringScalarMask]);
  387|   615k|                else
  388|   615k|                    decls.append(TypeString[type]);
  389|   683k|                if (arg < function.numArguments - 1)
  ------------------
  |  Branch (389:21): [True: 287k, False: 396k]
  ------------------
  390|   287k|                    decls.append(",");
  391|   683k|            }
  392|   396k|            decls.append(");\n");
  393|   396k|        }
  394|  97.7k|    }
  395|  87.0k|}
Initialize.cpp:_ZZN7glslang12_GLOBAL__N_116AddTabledBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionEENK3$_0clEi:
  323|   158k|    const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120AddLongVectorBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionE:
  401|  38.8k|{
  402|  38.8k|    const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
  403|       |
  404|       |    // loop across these two:
  405|       |    //  0: the varying arg set, and
  406|       |    //  1: the fixed scalar args
  407|  38.8k|    const ArgClass ClassFixed = (ArgClass)(ClassLS | ClassXLS | ClassLS2 | ClassFS | ClassFS2);
  408|  82.7k|    for (int fixed = 0; fixed < ((function.classes & ClassFixed) > 0 ? 2 : 1); ++fixed) {
  ------------------
  |  Branch (408:25): [True: 43.9k, False: 38.8k]
  |  Branch (408:34): [True: 15.1k, False: 67.6k]
  ------------------
  409|       |
  410|  43.9k|        if (fixed == 0 && (function.classes & ClassXLS))
  ------------------
  |  Branch (410:13): [True: 38.8k, False: 5.04k]
  |  Branch (410:27): [True: 459, False: 38.4k]
  ------------------
  411|    459|            continue;
  412|       |
  413|       |        // Iterate over the different scalar types (needed for ClassRS)
  414|   738k|        for (int type = 0; type < TypeStringCount; ++type) {
  ------------------
  |  Branch (414:28): [True: 695k, False: 43.4k]
  ------------------
  415|   695k|            if (!isScalarType(type))
  ------------------
  |  Branch (415:17): [True: 521k, False: 173k]
  ------------------
  416|   521k|                continue;
  417|       |
  418|       |            // skip types not selected: go from type to row number to type bit
  419|   173k|            if ((function.types & (1 << (type >> TypeStringRowShift))) == 0)
  ------------------
  |  Branch (419:17): [True: 119k, False: 53.9k]
  ------------------
  420|   119k|                continue;
  421|       |
  422|       |            // skip scalar-only
  423|  53.9k|            if (function.classes & ClassV1)
  ------------------
  |  Branch (423:17): [True: 7.20k, False: 46.7k]
  ------------------
  424|  7.20k|                continue;
  425|       |
  426|       |            // skip 3-vector
  427|  46.7k|            if (function.classes & ClassV3)
  ------------------
  |  Branch (427:17): [True: 459, False: 46.2k]
  ------------------
  428|    459|                continue;
  429|       |
  430|  46.2k|            TString decl;
  431|       |            // return type
  432|  46.2k|            if (function.classes & ClassB)
  ------------------
  |  Branch (432:17): [True: 10.0k, False: 36.1k]
  ------------------
  433|  10.0k|                decl.append("vector");
  434|  36.1k|            else if (function.classes & ClassRS)
  ------------------
  |  Branch (434:22): [True: 2.29k, False: 33.8k]
  ------------------
  435|  2.29k|                decl.append(TypeString[type & TypeStringScalarMask]);
  436|  33.8k|            else
  437|  33.8k|                decl.append("vector");
  438|  46.2k|            decl.append(" ");
  439|  46.2k|            decl.append(function.name);
  440|  46.2k|            decl.append("(");
  441|       |
  442|       |            // arguments
  443|   126k|            for (int arg = 0; arg < function.numArguments; ++arg) {
  ------------------
  |  Branch (443:31): [True: 80.1k, False: 46.2k]
  ------------------
  444|  80.1k|                if (arg == function.numArguments - 1 && (function.classes & ClassLO))
  ------------------
  |  Branch (444:21): [True: 46.2k, False: 33.8k]
  |  Branch (444:57): [True: 459, False: 45.8k]
  ------------------
  445|    459|                    decl.append("out ");
  446|  80.1k|                if (arg == 0) {
  ------------------
  |  Branch (446:21): [True: 46.2k, False: 33.8k]
  ------------------
  447|  46.2k|                    if (function.classes & ClassCVN)
  ------------------
  |  Branch (447:25): [True: 0, False: 46.2k]
  ------------------
  448|      0|                        decl.append("coherent volatile nontemporal ");
  449|  46.2k|                    if (function.classes & ClassFIO)
  ------------------
  |  Branch (449:25): [True: 0, False: 46.2k]
  ------------------
  450|      0|                        decl.append("inout ");
  451|  46.2k|                    if (function.classes & ClassFO)
  ------------------
  |  Branch (451:25): [True: 0, False: 46.2k]
  ------------------
  452|      0|                        decl.append("out ");
  453|  46.2k|                }
  454|  80.1k|                if ((function.classes & ClassLB) && arg == function.numArguments - 1)
  ------------------
  |  Branch (454:21): [True: 4.04k, False: 76.1k]
  |  Branch (454:53): [True: 1.34k, False: 2.69k]
  ------------------
  455|  1.34k|                    decl.append("vector");
  456|  78.7k|                else if (fixed && ((arg == function.numArguments - 1 && (function.classes & (ClassLS | ClassXLS |
  ------------------
  |  Branch (456:26): [True: 15.6k, False: 63.1k]
  |  Branch (456:37): [True: 6.42k, False: 9.18k]
  |  Branch (456:73): [True: 5.50k, False: 918]
  ------------------
  457|  6.42k|                                                                                                       ClassLS2))) ||
  458|  10.0k|                                   (arg == function.numArguments - 2 && (function.classes & ClassLS2))             ||
  ------------------
  |  Branch (458:37): [True: 6.42k, False: 3.67k]
  |  Branch (458:73): [True: 1.37k, False: 5.04k]
  ------------------
  459|  8.72k|                                   (arg == 0                         && (function.classes & (ClassFS | ClassFS2))) ||
  ------------------
  |  Branch (459:37): [True: 6.42k, False: 2.29k]
  |  Branch (459:73): [True: 918, False: 5.50k]
  ------------------
  460|  7.80k|                                   (arg == 1                         && (function.classes & ClassFS2))))
  ------------------
  |  Branch (460:37): [True: 1.83k, False: 5.96k]
  |  Branch (460:73): [True: 459, False: 1.37k]
  ------------------
  461|  8.26k|                    decl.append(TypeString[type & TypeStringScalarMask]);
  462|  70.5k|                else
  463|  70.5k|                    decl.append("vector");
  464|  80.1k|                if (arg < function.numArguments - 1)
  ------------------
  |  Branch (464:21): [True: 33.8k, False: 46.2k]
  ------------------
  465|  33.8k|                    decl.append(",");
  466|  80.1k|            }
  467|  46.2k|            decl.append(");\n");
  468|       |
  469|  46.2k|            decls.append(decl);
  470|  46.2k|        }
  471|  43.4k|    }
  472|  38.8k|}
Initialize.cpp:_ZZN7glslang12_GLOBAL__N_120AddLongVectorBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionEENK3$_0clEi:
  402|   695k|    const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
_ZN7glslang13IncludeLegacyEi8EProfileRKNS_10SpvVersionE:
  537|  4.76k|{
  538|  4.76k|    return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && version == 140 && ARBCompatibility) ||
  ------------------
  |  Branch (538:12): [True: 3.73k, False: 1.03k]
  |  Branch (538:38): [True: 0, False: 3.73k]
  |  Branch (538:57): [True: 1.71k, False: 2.02k]
  |  Branch (538:80): [True: 0, False: 1.71k]
  |  Branch (538:98): [True: 0, Folded]
  ------------------
  539|  3.73k|           profile == ECompatibilityProfile);
  ------------------
  |  Branch (539:12): [True: 0, False: 3.73k]
  ------------------
  540|  4.76k|}
Initialize.cpp:_ZN7glslangL15BuiltInVariableEPKcNS_16TBuiltInVariableERNS_12TSymbolTableE:
 9108|   287k|{
 9109|   287k|    TSymbol* symbol = symbolTable.find(name);
 9110|   287k|    if (symbol == nullptr)
  ------------------
  |  Branch (9110:9): [True: 76.6k, False: 211k]
  ------------------
 9111|  76.6k|        return;
 9112|       |
 9113|   211k|    TQualifier& symQualifier = symbol->getWritableType().getQualifier();
 9114|   211k|    symQualifier.builtIn = builtIn;
 9115|   211k|}
Initialize.cpp:_ZN7glslangL16SpecialQualifierEPKcNS_17TStorageQualifierENS_16TBuiltInVariableERNS_12TSymbolTableE:
 9070|  21.0k|{
 9071|  21.0k|    TSymbol* symbol = symbolTable.find(name);
 9072|  21.0k|    if (symbol == nullptr)
  ------------------
  |  Branch (9072:9): [True: 6.90k, False: 14.1k]
  ------------------
 9073|  6.90k|        return;
 9074|       |
 9075|  14.1k|    TQualifier& symQualifier = symbol->getWritableType().getQualifier();
 9076|  14.1k|    symQualifier.storage = qualifier;
 9077|  14.1k|    symQualifier.builtIn = builtIn;
 9078|  14.1k|}
Initialize.cpp:_ZN7glslangL16RetargetVariableEPKcS1_RNS_12TSymbolTableE:
 9118|     12|{
 9119|     12|    symbolTable.retargetSymbol(from, to);
 9120|     12|}
Initialize.cpp:_ZN7glslangL15BuiltInVariableEPKcS1_NS_16TBuiltInVariableERNS_12TSymbolTableE:
 9130|   124k|{
 9131|   124k|    TSymbol* symbol = symbolTable.find(blockName);
 9132|   124k|    if (symbol == nullptr)
  ------------------
  |  Branch (9132:9): [True: 87.5k, False: 37.3k]
  ------------------
 9133|  87.5k|        return;
 9134|       |
 9135|  37.3k|    TTypeList& structure = *symbol->getWritableType().getWritableStruct();
 9136|   156k|    for (int i = 0; i < (int)structure.size(); ++i) {
  ------------------
  |  Branch (9136:21): [True: 137k, False: 18.8k]
  ------------------
 9137|   137k|        if (structure[i].type->getFieldName().compare(name) == 0) {
  ------------------
  |  Branch (9137:13): [True: 18.5k, False: 119k]
  ------------------
 9138|  18.5k|            structure[i].type->getQualifier().builtIn = builtIn;
 9139|  18.5k|            return;
 9140|  18.5k|        }
 9141|   137k|    }
 9142|  37.3k|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120RelateTabledBuiltinsINSt3__15arrayINS0_15BuiltInFunctionELm79EEEEEvRKT_RNS_12TSymbolTableE:
  499|  9.39k|{
  500|   741k|    for (const auto& fn : functions) {
  ------------------
  |  Branch (500:25): [True: 741k, False: 9.39k]
  ------------------
  501|   741k|        symbolTable.relateToOperator(fn.name, fn.op);
  502|   741k|    }
  503|  9.39k|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120RelateTabledBuiltinsINSt3__15arrayINS0_15BuiltInFunctionELm3EEEEEvRKT_RNS_12TSymbolTableE:
  499|  9.39k|{
  500|  28.1k|    for (const auto& fn : functions) {
  ------------------
  |  Branch (500:25): [True: 28.1k, False: 9.39k]
  ------------------
  501|  28.1k|        symbolTable.relateToOperator(fn.name, fn.op);
  502|  28.1k|    }
  503|  9.39k|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120RelateTabledBuiltinsIA39_NS0_14CustomFunctionEEEvRKT_RNS_12TSymbolTableE:
  499|  9.39k|{
  500|   366k|    for (const auto& fn : functions) {
  ------------------
  |  Branch (500:25): [True: 366k, False: 9.39k]
  ------------------
  501|   366k|        symbolTable.relateToOperator(fn.name, fn.op);
  502|   366k|    }
  503|  9.39k|}
Initialize.cpp:_ZZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableEENK3$_0clEPKc:
10364|  74.5k|            auto coopMatKHRCallback = [](const char *name) -> std::vector<const char *> {
10365|  74.5k|                std::vector<const char *> ret;
10366|  74.5k|                if (strstr(name, "u64") != nullptr) {
  ------------------
  |  Branch (10366:21): [True: 39.9k, False: 34.6k]
  ------------------
10367|  39.9k|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10368|  39.9k|                } else {
10369|  34.6k|                    ret.push_back(E_GL_KHR_cooperative_matrix);
10370|  34.6k|                }
10371|  74.5k|                return ret;
10372|  74.5k|            };
Initialize.cpp:_ZZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableEENK3$_1clEPKc:
10373|  7.10k|            auto coopMat2NVCallback = [](const char *name) -> std::vector<const char *> {
10374|  7.10k|                std::vector<const char *> ret;
10375|  7.10k|                if (strstr(name, "u64") != nullptr) {
  ------------------
  |  Branch (10375:21): [True: 3.55k, False: 3.55k]
  ------------------
10376|  3.55k|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10377|  3.55k|                } else {
10378|  3.55k|                    ret.push_back(E_GL_NV_cooperative_matrix2);
10379|  3.55k|                }
10380|  7.10k|                return ret;
10381|  7.10k|            };
Initialize.cpp:_ZZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableEENK3$_2clEPKc:
10420|   214k|            auto coopVecCallback = [](const char *name) -> std::vector<const char *> {
10421|   214k|                std::vector<const char *> ret;
10422|       |                // This looks for u64 as the last parameter (the offset)
10423|   214k|                if (strstr(name, "u641;") != nullptr) {
  ------------------
  |  Branch (10423:21): [True: 107k, False: 107k]
  ------------------
10424|   107k|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10425|   107k|                } else {
10426|   107k|                    ret.push_back(E_GL_NV_cooperative_vector);
10427|   107k|                }
10428|   214k|                return ret;
10429|   214k|            };

_ZNK7glslang18TBuiltInParseables15getCommonStringEv:
   66|  2.92k|    virtual const TString& getCommonString() const { return commonBuiltins; }
_ZNK7glslang18TBuiltInParseables14getStageStringE11EShLanguage:
   67|  11.2k|    virtual const TString& getStageString(EShLanguage language) const { return stageBuiltins[language]; }

_ZN7glslang13TIntermSymbol8traverseEPNS_16TIntermTraverserE:
   65|  1.78k|{
   66|  1.78k|    it->visitSymbol(this);
   67|  1.78k|}
_ZN7glslang20TIntermConstantUnion8traverseEPNS_16TIntermTraverserE:
   70|  13.2k|{
   71|  13.2k|    it->visitConstantUnion(this);
   72|  13.2k|}
_ZNK7glslang13TIntermSymbol13getAccessNameEv:
   74|      1|const TString& TIntermSymbol::getAccessName() const {
   75|      1|    if (getBasicType() == EbtBlock)
  ------------------
  |  Branch (75:9): [True: 1, False: 0]
  ------------------
   76|      1|        return getType().getTypeName();
   77|      0|    else
   78|      0|        return getName();
   79|      1|}
_ZN7glslang16TIntermAggregate8traverseEPNS_16TIntermTraverserE:
  155|  6.20k|{
  156|  6.20k|    bool visit = true;
  157|       |
  158|  6.20k|    if (it->preVisit)
  ------------------
  |  Branch (158:9): [True: 6.20k, False: 0]
  ------------------
  159|  6.20k|        visit = it->visitAggregate(EvPreVisit, this);
  160|       |
  161|  6.20k|    if (visit) {
  ------------------
  |  Branch (161:9): [True: 1.78k, False: 4.42k]
  ------------------
  162|  1.78k|        it->incrementDepth(this);
  163|       |
  164|  1.78k|        if (it->rightToLeft) {
  ------------------
  |  Branch (164:13): [True: 0, False: 1.78k]
  ------------------
  165|      0|            for (TIntermSequence::reverse_iterator sit = sequence.rbegin(); sit != sequence.rend(); sit++) {
  ------------------
  |  Branch (165:77): [True: 0, False: 0]
  ------------------
  166|      0|                (*sit)->traverse(it);
  167|       |
  168|      0|                if (visit && it->inVisit) {
  ------------------
  |  Branch (168:21): [True: 0, False: 0]
  |  Branch (168:30): [True: 0, False: 0]
  ------------------
  169|      0|                    if (*sit != sequence.front())
  ------------------
  |  Branch (169:25): [True: 0, False: 0]
  ------------------
  170|      0|                        visit = it->visitAggregate(EvInVisit, this);
  171|      0|                }
  172|      0|            }
  173|  1.78k|        } else {
  174|  4.45k|            for (TIntermSequence::iterator sit = sequence.begin(); sit != sequence.end(); sit++) {
  ------------------
  |  Branch (174:68): [True: 2.67k, False: 1.78k]
  ------------------
  175|  2.67k|                (*sit)->traverse(it);
  176|       |
  177|  2.67k|                if (visit && it->inVisit) {
  ------------------
  |  Branch (177:21): [True: 2.67k, False: 0]
  |  Branch (177:30): [True: 0, False: 2.67k]
  ------------------
  178|      0|                    if (*sit != sequence.back())
  ------------------
  |  Branch (178:25): [True: 0, False: 0]
  ------------------
  179|      0|                        visit = it->visitAggregate(EvInVisit, this);
  180|      0|                }
  181|  2.67k|            }
  182|  1.78k|        }
  183|       |
  184|  1.78k|        it->decrementDepth();
  185|  1.78k|    }
  186|       |
  187|  6.20k|    if (visit && it->postVisit)
  ------------------
  |  Branch (187:9): [True: 1.78k, False: 4.42k]
  |  Branch (187:18): [True: 0, False: 1.78k]
  ------------------
  188|      0|        it->visitAggregate(EvPostVisit, this);
  189|  6.20k|}

_ZN7glslang13TIntermediate9addSymbolExRKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEES9_RKNS_5TTypeERKNS_16TConstUnionArrayEPNS_12TIntermTypedERKNS_10TSourceLocE:
   71|  1.97k|{
   72|  1.97k|    TIntermSymbol* node = new TIntermSymbol(id, name, getStage(), type, &mangledName);
   73|  1.97k|    node->setLoc(loc);
   74|  1.97k|    node->setConstArray(constArray);
   75|  1.97k|    node->setConstSubtree(constSubtree);
   76|       |
   77|  1.97k|    return node;
   78|  1.97k|}
_ZN7glslang13TIntermediate9addSymbolERKNS_9TVariableE:
   92|  1.78k|{
   93|  1.78k|    glslang::TSourceLoc loc; // just a null location
   94|  1.78k|    loc.init();
   95|       |
   96|  1.78k|    return addSymbol(variable, loc);
   97|  1.78k|}
_ZN7glslang13TIntermediate9addSymbolERKNS_9TVariableERKNS_10TSourceLocE:
  100|  1.97k|{
  101|  1.97k|    return addSymbol(variable.getUniqueId(), variable.getName(), variable.getMangledName(), variable.getType(), variable.getConstArray(), variable.getConstSubtree(), loc);
  102|  1.97k|}
_ZN7glslang13TIntermediate13addBinaryMathENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  119|     10|{
  120|       |    // No operations work on blocks
  121|     10|    if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock ||
  ------------------
  |  Branch (121:9): [True: 0, False: 10]
  |  Branch (121:55): [True: 0, False: 10]
  ------------------
  122|     10|        left->getType().getBasicType() == EbtString || right->getType().getBasicType() == EbtString)
  ------------------
  |  Branch (122:9): [True: 0, False: 10]
  |  Branch (122:56): [True: 0, False: 10]
  ------------------
  123|      0|        return nullptr;
  124|       |
  125|       |    // Convert "reference +/- int" and "reference - reference" to integer math
  126|     10|    if (op == EOpAdd || op == EOpSub) {
  ------------------
  |  Branch (126:9): [True: 3, False: 7]
  |  Branch (126:25): [True: 3, False: 4]
  ------------------
  127|       |
  128|       |        // No addressing math on struct with unsized array.
  129|      6|        if ((left->isReference() && left->getType().getReferentType()->containsUnsizedArray()) ||
  ------------------
  |  Branch (129:14): [True: 0, False: 6]
  |  Branch (129:37): [True: 0, False: 0]
  ------------------
  130|      6|            (right->isReference() && right->getType().getReferentType()->containsUnsizedArray())) {
  ------------------
  |  Branch (130:14): [True: 0, False: 6]
  |  Branch (130:38): [True: 0, False: 0]
  ------------------
  131|      0|            return nullptr;
  132|      0|        }
  133|       |
  134|      6|        if (left->isReference() && isTypeInt(right->getBasicType())) {
  ------------------
  |  Branch (134:13): [True: 0, False: 6]
  |  Branch (134:36): [True: 0, False: 0]
  ------------------
  135|      0|            const TType& referenceType = left->getType();
  136|      0|            TIntermConstantUnion* size = addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(left->getType()), loc, true);
  137|      0|            left  = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64));
  138|       |
  139|      0|            right = createConversion(EbtInt64, right);
  140|      0|            right = addBinaryMath(EOpMul, right, size, loc);
  141|       |
  142|      0|            TIntermTyped *node = addBinaryMath(op, left, right, loc);
  143|      0|            node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType);
  144|      0|            return node;
  145|      0|        }
  146|      6|    }
  147|       |
  148|     10|    if (op == EOpAdd && right->isReference() && isTypeInt(left->getBasicType())) {
  ------------------
  |  Branch (148:9): [True: 3, False: 7]
  |  Branch (148:25): [True: 0, False: 3]
  |  Branch (148:49): [True: 0, False: 0]
  ------------------
  149|      0|        const TType& referenceType = right->getType();
  150|      0|        TIntermConstantUnion* size =
  151|      0|            addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(right->getType()), loc, true);
  152|      0|        right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64));
  153|       |
  154|      0|        left  = createConversion(EbtInt64, left);
  155|      0|        left  = addBinaryMath(EOpMul, left, size, loc);
  156|       |
  157|      0|        TIntermTyped *node = addBinaryMath(op, left, right, loc);
  158|      0|        node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType);
  159|      0|        return node;
  160|      0|    }
  161|       |
  162|     10|    if (op == EOpSub && left->isReference() && right->isReference()) {
  ------------------
  |  Branch (162:9): [True: 3, False: 7]
  |  Branch (162:25): [True: 0, False: 3]
  |  Branch (162:48): [True: 0, False: 0]
  ------------------
  163|      0|        TIntermConstantUnion* size =
  164|      0|            addConstantUnion((long long)computeBufferReferenceTypeSize(left->getType()), loc, true);
  165|       |
  166|      0|        left = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64));
  167|      0|        right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64));
  168|       |
  169|      0|        left = addBuiltInFunctionCall(loc, EOpConvNumeric, true, left, TType(EbtInt64));
  170|      0|        right = addBuiltInFunctionCall(loc, EOpConvNumeric, true, right, TType(EbtInt64));
  171|       |
  172|      0|        left = addBinaryMath(EOpSub, left, right, loc);
  173|       |
  174|      0|        TIntermTyped *node = addBinaryMath(EOpDiv, left, size, loc);
  175|      0|        return node;
  176|      0|    }
  177|       |
  178|       |    // No other math operators supported on references
  179|     10|    if (left->isReference() || right->isReference())
  ------------------
  |  Branch (179:9): [True: 0, False: 10]
  |  Branch (179:32): [True: 0, False: 10]
  ------------------
  180|      0|        return nullptr;
  181|       |
  182|       |    // Try converting the children's base types to compatible types.
  183|     10|    auto children = addPairConversion(op, left, right);
  184|     10|    left = std::get<0>(children);
  185|     10|    right = std::get<1>(children);
  186|       |
  187|     10|    if (left == nullptr || right == nullptr)
  ------------------
  |  Branch (187:9): [True: 1, False: 9]
  |  Branch (187:28): [True: 0, False: 9]
  ------------------
  188|      1|        return nullptr;
  189|       |
  190|       |    // Convert the children's type shape to be compatible.
  191|      9|    addBiShapeConversion(op, left, right);
  192|      9|    if (left == nullptr || right == nullptr)
  ------------------
  |  Branch (192:9): [True: 0, False: 9]
  |  Branch (192:28): [True: 0, False: 9]
  ------------------
  193|      0|        return nullptr;
  194|       |
  195|       |    //
  196|       |    // Need a new node holding things together.  Make
  197|       |    // one and promote it to the right type.
  198|       |    //
  199|      9|    TIntermBinary* node = addBinaryNode(op, left, right, loc);
  200|      9|    if (! promote(node))
  ------------------
  |  Branch (200:9): [True: 0, False: 9]
  ------------------
  201|      0|        return nullptr;
  202|       |
  203|      9|    node->updatePrecision();
  204|       |
  205|       |    //
  206|       |    // If they are both (non-specialization) constants, they must be folded.
  207|       |    // (Unless it's the sequence (comma) operator, but that's handled in addComma().)
  208|       |    //
  209|      9|    TIntermConstantUnion *leftTempConstant = node->getLeft()->getAsConstantUnion();
  210|      9|    TIntermConstantUnion *rightTempConstant = node->getRight()->getAsConstantUnion();
  211|      9|    if (leftTempConstant && rightTempConstant) {
  ------------------
  |  Branch (211:9): [True: 9, False: 0]
  |  Branch (211:29): [True: 8, False: 1]
  ------------------
  212|      8|        TIntermTyped* folded = leftTempConstant->fold(node->getOp(), rightTempConstant);
  213|      8|        if (folded)
  ------------------
  |  Branch (213:13): [True: 8, False: 0]
  ------------------
  214|      8|            return folded;
  215|      8|    }
  216|       |
  217|       |    // If can propagate spec-constantness and if the operation is an allowed
  218|       |    // specialization-constant operation, make a spec-constant.
  219|      1|    if (specConstantPropagates(*node->getLeft(), *node->getRight()) && isSpecializationOperation(*node))
  ------------------
  |  Branch (219:9): [True: 0, False: 1]
  |  Branch (219:72): [True: 0, False: 0]
  ------------------
  220|      0|        node->getWritableType().getQualifier().makeSpecConstant();
  221|       |
  222|       |    // If must propagate nonuniform, make a nonuniform.
  223|      1|    if ((node->getLeft()->getQualifier().isNonUniform() || node->getRight()->getQualifier().isNonUniform()) &&
  ------------------
  |  Branch (223:10): [True: 0, False: 1]
  |  Branch (223:60): [True: 0, False: 1]
  ------------------
  224|      0|            isNonuniformPropagating(node->getOp()))
  ------------------
  |  Branch (224:13): [True: 0, False: 0]
  ------------------
  225|      0|        node->getWritableType().getQualifier().nonUniform = true;
  226|       |
  227|      1|    return node;
  228|      9|}
_ZNK7glslang13TIntermediate13addBinaryNodeENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  235|     12|{
  236|       |    // build the node
  237|     12|    TIntermBinary* node = new TIntermBinary(op);
  238|     12|    node->setLoc(loc.line != 0 ? loc : left->getLoc());
  ------------------
  |  Branch (238:18): [True: 12, False: 0]
  ------------------
  239|     12|    node->setLeft(left);
  240|     12|    node->setRight(right);
  241|       |
  242|     12|    return node;
  243|     12|}
_ZNK7glslang13TIntermediate12addUnaryNodeENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocE:
  260|    923|{
  261|    923|    TIntermUnary* node = new TIntermUnary(op);
  262|    923|    node->setLoc(loc.line != 0 ? loc : child->getLoc());
  ------------------
  |  Branch (262:18): [True: 923, False: 0]
  ------------------
  263|    923|    node->setOperand(child);
  264|       |
  265|    923|    return node;
  266|    923|}
_ZNK7glslang13TIntermediate12addUnaryNodeENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocERKNS_5TTypeE:
  273|      3|{
  274|      3|    TIntermUnary* node = addUnaryNode(op, child, loc);
  275|      3|    node->setType(type);
  276|      3|    return node;
  277|      3|}
_ZN7glslang13TIntermediate9addAssignENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  289|      2|{
  290|       |    // No block assignment
  291|      2|    if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
  ------------------
  |  Branch (291:9): [True: 0, False: 2]
  |  Branch (291:55): [True: 0, False: 2]
  ------------------
  292|      0|        return nullptr;
  293|       |
  294|       |    // Convert "reference += int" to "reference = reference + int". We need this because the
  295|       |    // "reference + int" calculation involves a cast back to the original type, which makes it
  296|       |    // not an lvalue.
  297|      2|    if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference()) {
  ------------------
  |  Branch (297:10): [True: 0, False: 2]
  |  Branch (297:32): [True: 0, False: 2]
  |  Branch (297:55): [True: 0, False: 0]
  ------------------
  298|      0|        if (!(right->getType().isScalar() && right->getType().isIntegerDomain()))
  ------------------
  |  Branch (298:15): [True: 0, False: 0]
  |  Branch (298:46): [True: 0, False: 0]
  ------------------
  299|      0|            return nullptr;
  300|       |
  301|      0|        TIntermTyped* node = addBinaryMath(op == EOpAddAssign ? EOpAdd : EOpSub, left, right, loc);
  ------------------
  |  Branch (301:44): [True: 0, False: 0]
  ------------------
  302|      0|        if (!node)
  ------------------
  |  Branch (302:13): [True: 0, False: 0]
  ------------------
  303|      0|            return nullptr;
  304|       |
  305|      0|        TIntermSymbol* symbol = left->getAsSymbolNode();
  306|      0|        left = addSymbol(*symbol);
  307|       |
  308|      0|        node = addAssign(EOpAssign, left, node, loc);
  309|      0|        return node;
  310|      0|    }
  311|       |
  312|       |    //
  313|       |    // Like adding binary math, except the conversion can only go
  314|       |    // from right to left.
  315|       |    //
  316|       |
  317|       |    // convert base types, nullptr return means not possible
  318|      2|    right = addConversion(op, left->getType(), right);
  319|      2|    if (right == nullptr)
  ------------------
  |  Branch (319:9): [True: 1, False: 1]
  ------------------
  320|      1|        return nullptr;
  321|       |
  322|       |    // convert shape
  323|      1|    right = addUniShapeConversion(op, left->getType(), right);
  324|       |
  325|       |    // build the node
  326|      1|    TIntermBinary* node = addBinaryNode(op, left, right, loc);
  327|       |
  328|      1|    if (! promote(node))
  ------------------
  |  Branch (328:9): [True: 0, False: 1]
  ------------------
  329|      0|        return nullptr;
  330|       |
  331|      1|    node->updatePrecision();
  332|       |
  333|      1|    return node;
  334|      1|}
_ZN7glslang13TIntermediate8addIndexENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  345|      2|{
  346|       |    // caller should set the type
  347|      2|    return addBinaryNode(op, base, index, loc);
  348|      2|}
_ZN7glslang13TIntermediate12addUnaryMathENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocE:
  357|  14.1k|{
  358|  14.1k|    if (child == nullptr)
  ------------------
  |  Branch (358:9): [True: 2, False: 14.1k]
  ------------------
  359|      2|        return nullptr;
  360|       |
  361|  14.1k|    if (child->getType().getBasicType() == EbtBlock)
  ------------------
  |  Branch (361:9): [True: 0, False: 14.1k]
  ------------------
  362|      0|        return nullptr;
  363|       |
  364|  14.1k|    switch (op) {
  365|     15|    case EOpLogicalNot:
  ------------------
  |  Branch (365:5): [True: 15, False: 14.1k]
  ------------------
  366|     15|        if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (366:13): [True: 15, False: 0]
  ------------------
  367|     15|            break; // HLSL can promote logical not
  368|     15|        }
  369|       |
  370|      0|        if (child->getType().getBasicType() != EbtBool || child->getType().isMatrix() || child->getType().isArray() || child->getType().isVector()) {
  ------------------
  |  Branch (370:13): [True: 0, False: 0]
  |  Branch (370:59): [True: 0, False: 0]
  |  Branch (370:90): [True: 0, False: 0]
  |  Branch (370:120): [True: 0, False: 0]
  ------------------
  371|      0|            return nullptr;
  372|      0|        }
  373|      0|        break;
  374|       |
  375|      1|    case EOpPostIncrement:
  ------------------
  |  Branch (375:5): [True: 1, False: 14.1k]
  ------------------
  376|      2|    case EOpPreIncrement:
  ------------------
  |  Branch (376:5): [True: 1, False: 14.1k]
  ------------------
  377|      3|    case EOpPostDecrement:
  ------------------
  |  Branch (377:5): [True: 1, False: 14.1k]
  ------------------
  378|      5|    case EOpPreDecrement:
  ------------------
  |  Branch (378:5): [True: 2, False: 14.1k]
  ------------------
  379|    900|    case EOpNegative:
  ------------------
  |  Branch (379:5): [True: 895, False: 13.2k]
  ------------------
  380|    900|        if (child->getType().getBasicType() == EbtStruct || child->getType().isArray())
  ------------------
  |  Branch (380:13): [True: 0, False: 900]
  |  Branch (380:61): [True: 0, False: 900]
  ------------------
  381|      0|            return nullptr;
  382|    900|        break;
  383|  13.2k|    default: break; // some compilers want this
  ------------------
  |  Branch (383:5): [True: 13.2k, False: 915]
  ------------------
  384|  14.1k|    }
  385|       |
  386|       |    //
  387|       |    // Do we need to promote the operand?
  388|       |    //
  389|  14.1k|    TBasicType newType = EbtVoid;
  390|  14.1k|    switch (op) {
  391|      0|    case EOpConstructBool:   newType = EbtBool;   break;
  ------------------
  |  Branch (391:5): [True: 0, False: 14.1k]
  ------------------
  392|      0|    case EOpConstructFloat:  newType = EbtFloat;  break;
  ------------------
  |  Branch (392:5): [True: 0, False: 14.1k]
  ------------------
  393|  7.70k|    case EOpConstructInt:    newType = EbtInt;    break;
  ------------------
  |  Branch (393:5): [True: 7.70k, False: 6.42k]
  ------------------
  394|  5.50k|    case EOpConstructUint:   newType = EbtUint;   break;
  ------------------
  |  Branch (394:5): [True: 5.50k, False: 8.62k]
  ------------------
  395|      0|    case EOpConstructInt8:   newType = EbtInt8;   break;
  ------------------
  |  Branch (395:5): [True: 0, False: 14.1k]
  ------------------
  396|      0|    case EOpConstructUint8:  newType = EbtUint8;  break;
  ------------------
  |  Branch (396:5): [True: 0, False: 14.1k]
  ------------------
  397|      0|    case EOpConstructInt16:  newType = EbtInt16;  break;
  ------------------
  |  Branch (397:5): [True: 0, False: 14.1k]
  ------------------
  398|      0|    case EOpConstructUint16: newType = EbtUint16; break;
  ------------------
  |  Branch (398:5): [True: 0, False: 14.1k]
  ------------------
  399|      0|    case EOpConstructInt64:  newType = EbtInt64;  break;
  ------------------
  |  Branch (399:5): [True: 0, False: 14.1k]
  ------------------
  400|      0|    case EOpConstructUint64: newType = EbtUint64; break;
  ------------------
  |  Branch (400:5): [True: 0, False: 14.1k]
  ------------------
  401|      0|    case EOpConstructDouble: newType = EbtDouble; break;
  ------------------
  |  Branch (401:5): [True: 0, False: 14.1k]
  ------------------
  402|      0|    case EOpConstructFloat16: newType = EbtFloat16; break;
  ------------------
  |  Branch (402:5): [True: 0, False: 14.1k]
  ------------------
  403|      0|    case EOpConstructBFloat16: newType = EbtBFloat16; break;
  ------------------
  |  Branch (403:5): [True: 0, False: 14.1k]
  ------------------
  404|      0|    case EOpConstructFloatE4M3: newType = EbtFloatE4M3; break;
  ------------------
  |  Branch (404:5): [True: 0, False: 14.1k]
  ------------------
  405|      0|    case EOpConstructFloatE5M2: newType = EbtFloatE5M2; break;
  ------------------
  |  Branch (405:5): [True: 0, False: 14.1k]
  ------------------
  406|      0|    case EOpConstructFloatE2M1: newType = EbtFloatE2M1; break;
  ------------------
  |  Branch (406:5): [True: 0, False: 14.1k]
  ------------------
  407|      0|    case EOpConstructFloatE3M2: newType = EbtFloatE3M2; break;
  ------------------
  |  Branch (407:5): [True: 0, False: 14.1k]
  ------------------
  408|      0|    case EOpConstructFloatE2M3: newType = EbtFloatE2M3; break;
  ------------------
  |  Branch (408:5): [True: 0, False: 14.1k]
  ------------------
  409|      0|    case EOpConstructFloatUE8M0: newType = EbtFloatUE8M0; break;
  ------------------
  |  Branch (409:5): [True: 0, False: 14.1k]
  ------------------
  410|      0|    case EOpConstructFloatMXINT8: newType = EbtFloatMXINT8; break;
  ------------------
  |  Branch (410:5): [True: 0, False: 14.1k]
  ------------------
  411|    920|    default: break; // some compilers want this
  ------------------
  |  Branch (411:5): [True: 920, False: 13.2k]
  ------------------
  412|  14.1k|    }
  413|       |
  414|  14.1k|    if (newType != EbtVoid) {
  ------------------
  |  Branch (414:9): [True: 13.2k, False: 920]
  ------------------
  415|  13.2k|        TType newTType(newType, EvqTemporary, child->getVectorSize(), child->getMatrixCols(), child->getMatrixRows(), child->isVector());
  416|  13.2k|        if (child->getType().isLongVector()) {
  ------------------
  |  Branch (416:13): [True: 0, False: 13.2k]
  ------------------
  417|      0|            newTType.shallowCopy(child->getType());
  418|      0|            newTType.setBasicType(newType);
  419|      0|            newTType.makeTemporary();
  420|      0|            newTType.getQualifier().clear();
  421|      0|        }
  422|       |
  423|  13.2k|        child = addConversion(op, newTType, child);
  424|  13.2k|        if (child == nullptr)
  ------------------
  |  Branch (424:13): [True: 0, False: 13.2k]
  ------------------
  425|      0|            return nullptr;
  426|  13.2k|    }
  427|       |
  428|       |    //
  429|       |    // For constructors, we are now done, it was all in the conversion.
  430|       |    // TODO: but, did this bypass constant folding?
  431|       |    //
  432|  14.1k|    switch (op) {
  433|      0|        case EOpConstructInt8:
  ------------------
  |  Branch (433:9): [True: 0, False: 14.1k]
  ------------------
  434|      0|        case EOpConstructUint8:
  ------------------
  |  Branch (434:9): [True: 0, False: 14.1k]
  ------------------
  435|      0|        case EOpConstructInt16:
  ------------------
  |  Branch (435:9): [True: 0, False: 14.1k]
  ------------------
  436|      0|        case EOpConstructUint16:
  ------------------
  |  Branch (436:9): [True: 0, False: 14.1k]
  ------------------
  437|  7.70k|        case EOpConstructInt:
  ------------------
  |  Branch (437:9): [True: 7.70k, False: 6.42k]
  ------------------
  438|  13.2k|        case EOpConstructUint:
  ------------------
  |  Branch (438:9): [True: 5.50k, False: 8.62k]
  ------------------
  439|  13.2k|        case EOpConstructInt64:
  ------------------
  |  Branch (439:9): [True: 0, False: 14.1k]
  ------------------
  440|  13.2k|        case EOpConstructUint64:
  ------------------
  |  Branch (440:9): [True: 0, False: 14.1k]
  ------------------
  441|  13.2k|        case EOpConstructBool:
  ------------------
  |  Branch (441:9): [True: 0, False: 14.1k]
  ------------------
  442|  13.2k|        case EOpConstructFloat:
  ------------------
  |  Branch (442:9): [True: 0, False: 14.1k]
  ------------------
  443|  13.2k|        case EOpConstructDouble:
  ------------------
  |  Branch (443:9): [True: 0, False: 14.1k]
  ------------------
  444|  13.2k|        case EOpConstructFloat16:
  ------------------
  |  Branch (444:9): [True: 0, False: 14.1k]
  ------------------
  445|  13.2k|        case EOpConstructBFloat16:
  ------------------
  |  Branch (445:9): [True: 0, False: 14.1k]
  ------------------
  446|  13.2k|        case EOpConstructFloatE5M2:
  ------------------
  |  Branch (446:9): [True: 0, False: 14.1k]
  ------------------
  447|  13.2k|        case EOpConstructFloatE4M3:
  ------------------
  |  Branch (447:9): [True: 0, False: 14.1k]
  ------------------
  448|  13.2k|        case EOpConstructFloatE2M1:
  ------------------
  |  Branch (448:9): [True: 0, False: 14.1k]
  ------------------
  449|  13.2k|        case EOpConstructFloatE3M2:
  ------------------
  |  Branch (449:9): [True: 0, False: 14.1k]
  ------------------
  450|  13.2k|        case EOpConstructFloatE2M3:
  ------------------
  |  Branch (450:9): [True: 0, False: 14.1k]
  ------------------
  451|  13.2k|        case EOpConstructFloatUE8M0:
  ------------------
  |  Branch (451:9): [True: 0, False: 14.1k]
  ------------------
  452|  13.2k|        case EOpConstructFloatMXINT8: {
  ------------------
  |  Branch (452:9): [True: 0, False: 14.1k]
  ------------------
  453|  13.2k|            TIntermUnary* unary_node = child->getAsUnaryNode();
  454|  13.2k|            if (unary_node != nullptr)
  ------------------
  |  Branch (454:17): [True: 3, False: 13.2k]
  ------------------
  455|      3|                unary_node->updatePrecision();
  456|  13.2k|            return child;
  457|  13.2k|        }
  458|    920|        default: break; // some compilers want this
  ------------------
  |  Branch (458:9): [True: 920, False: 13.2k]
  ------------------
  459|  14.1k|    }
  460|       |
  461|       |    //
  462|       |    // Make a new node for the operator.
  463|       |    //
  464|    920|    TIntermUnary* node = addUnaryNode(op, child, loc);
  465|       |
  466|    920|    if (! promote(node))
  ------------------
  |  Branch (466:9): [True: 2, False: 918]
  ------------------
  467|      2|        return nullptr;
  468|       |
  469|    918|    node->updatePrecision();
  470|       |
  471|       |    // If it's a (non-specialization) constant, it must be folded.
  472|    918|    if (node->getOperand()->getAsConstantUnion())
  ------------------
  |  Branch (472:9): [True: 918, False: 0]
  ------------------
  473|    918|        return node->getOperand()->getAsConstantUnion()->fold(op, node->getType());
  474|       |
  475|       |    // If it's a specialization constant, the result is too,
  476|       |    // if the operation is allowed for specialization constants.
  477|      0|    if (node->getOperand()->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*node))
  ------------------
  |  Branch (477:9): [True: 0, False: 0]
  |  Branch (477:74): [True: 0, False: 0]
  ------------------
  478|      0|        node->getWritableType().getQualifier().makeSpecConstant();
  479|       |
  480|       |    // If must propagate nonuniform, make a nonuniform.
  481|      0|    if (node->getOperand()->getQualifier().isNonUniform() && isNonuniformPropagating(node->getOp()))
  ------------------
  |  Branch (481:9): [True: 0, False: 0]
  |  Branch (481:62): [True: 0, False: 0]
  ------------------
  482|      0|        node->getWritableType().getQualifier().nonUniform = true;
  483|       |
  484|      0|    return node;
  485|    918|}
_ZN7glslang13TIntermediate20setAggregateOperatorEP11TIntermNodeNS_9TOperatorERKNS_5TTypeERKNS_10TSourceLocE:
  527|  4.42k|{
  528|  4.42k|    TIntermAggregate* aggNode;
  529|       |
  530|       |    //
  531|       |    // Make sure we have an aggregate.  If not turn it into one.
  532|       |    //
  533|  4.42k|    if (node != nullptr) {
  ------------------
  |  Branch (533:9): [True: 4.42k, False: 0]
  ------------------
  534|  4.42k|        aggNode = node->getAsAggregate();
  535|  4.42k|        if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
  ------------------
  |  Branch (535:13): [True: 6, False: 4.41k]
  |  Branch (535:35): [True: 0, False: 4.41k]
  ------------------
  536|       |            //
  537|       |            // Make an aggregate containing this node.
  538|       |            //
  539|      6|            aggNode = new TIntermAggregate();
  540|      6|            aggNode->getSequence().push_back(node);
  541|      6|        }
  542|  4.42k|    } else
  543|      0|        aggNode = new TIntermAggregate();
  544|       |
  545|       |    //
  546|       |    // Set the operator.
  547|       |    //
  548|  4.42k|    aggNode->setOperator(op);
  549|  4.42k|    if (loc.line != 0 || node != nullptr)
  ------------------
  |  Branch (549:9): [True: 4.42k, False: 0]
  |  Branch (549:26): [True: 0, False: 0]
  ------------------
  550|  4.42k|        aggNode->setLoc(loc.line != 0 ? loc : node->getLoc());
  ------------------
  |  Branch (550:25): [True: 4.42k, False: 0]
  ------------------
  551|       |
  552|  4.42k|    aggNode->setType(type);
  553|       |
  554|  4.42k|    return fold(aggNode);
  555|  4.42k|}
_ZNK7glslang13TIntermediate19isConversionAllowedENS_9TOperatorEPNS_12TIntermTypedE:
  558|   156k|{
  559|       |    //
  560|       |    // Does the base type even allow the operation?
  561|       |    //
  562|   156k|    switch (node->getBasicType()) {
  563|      1|    case EbtVoid:
  ------------------
  |  Branch (563:5): [True: 1, False: 156k]
  ------------------
  564|      1|        return false;
  565|      0|    case EbtAtomicUint:
  ------------------
  |  Branch (565:5): [True: 0, False: 156k]
  ------------------
  566|      0|    case EbtSampler:
  ------------------
  |  Branch (566:5): [True: 0, False: 156k]
  ------------------
  567|      0|    case EbtAccStruct:
  ------------------
  |  Branch (567:5): [True: 0, False: 156k]
  ------------------
  568|       |        // opaque types can be passed to functions
  569|      0|        if (op == EOpFunction)
  ------------------
  |  Branch (569:13): [True: 0, False: 0]
  ------------------
  570|      0|            break;
  571|       |
  572|       |        // HLSL can assign samplers directly (no constructor)
  573|      0|        if (getSource() == EShSourceHlsl && node->getBasicType() == EbtSampler)
  ------------------
  |  Branch (573:13): [True: 0, False: 0]
  |  Branch (573:45): [True: 0, False: 0]
  ------------------
  574|      0|            break;
  575|       |
  576|       |        // samplers can get assigned via a sampler constructor
  577|       |        // (well, not yet, but code in the rest of this function is ready for it)
  578|      0|        if (node->getBasicType() == EbtSampler && op == EOpAssign &&
  ------------------
  |  Branch (578:13): [True: 0, False: 0]
  |  Branch (578:51): [True: 0, False: 0]
  ------------------
  579|      0|            node->getAsOperator() != nullptr && node->getAsOperator()->getOp() == EOpConstructTextureSampler)
  ------------------
  |  Branch (579:13): [True: 0, False: 0]
  |  Branch (579:49): [True: 0, False: 0]
  ------------------
  580|      0|            break;
  581|       |
  582|       |        // otherwise, opaque types can't even be operated on, let alone converted
  583|      0|        return false;
  584|   156k|    default:
  ------------------
  |  Branch (584:5): [True: 156k, False: 1]
  ------------------
  585|   156k|        break;
  586|   156k|    }
  587|       |
  588|   156k|    return true;
  589|   156k|}
_ZNK7glslang13TIntermediate14buildConvertOpENS_10TBasicTypeES1_RNS_9TOperatorE:
  592|      3|{
  593|       |    // (bfloat16_t,fp8) <-> bool not supported
  594|      3|    if (((src == EbtBFloat16 || src == EbtFloatE5M2 || src == EbtFloatE4M3 || isTypeOcpMicroscalingFloat(src)) && dst == EbtBool) ||
  ------------------
  |  Branch (594:11): [True: 0, False: 3]
  |  Branch (594:33): [True: 0, False: 3]
  |  Branch (594:56): [True: 0, False: 3]
  |  Branch (594:79): [True: 0, False: 3]
  |  Branch (594:115): [True: 0, False: 0]
  ------------------
  595|      3|        ((dst == EbtBFloat16 || dst == EbtFloatE5M2 || dst == EbtFloatE4M3 || isTypeOcpMicroscalingFloat(dst)) && src == EbtBool)) {
  ------------------
  |  Branch (595:11): [True: 0, False: 3]
  |  Branch (595:33): [True: 0, False: 3]
  |  Branch (595:56): [True: 0, False: 3]
  |  Branch (595:79): [True: 0, False: 3]
  |  Branch (595:115): [True: 0, False: 0]
  ------------------
  596|      0|        return false;
  597|      0|    }
  598|       |
  599|       |    // no type conversions to microscaling types
  600|      3|    if (isTypeOcpMicroscalingFloat(dst) && src != dst) {
  ------------------
  |  Branch (600:9): [True: 0, False: 3]
  |  Branch (600:44): [True: 0, False: 0]
  ------------------
  601|      0|        return false;
  602|      0|    }
  603|       |
  604|      3|    if ((isTypeInt(dst) || isTypeFloat(dst) || dst == EbtBool) &&
  ------------------
  |  Branch (604:10): [True: 3, False: 0]
  |  Branch (604:28): [True: 0, False: 0]
  |  Branch (604:48): [True: 0, False: 0]
  ------------------
  605|      3|        (isTypeInt(src) || isTypeFloat(src) || src == EbtBool)) {
  ------------------
  |  Branch (605:10): [True: 3, False: 0]
  |  Branch (605:28): [True: 0, False: 0]
  |  Branch (605:48): [True: 0, False: 0]
  ------------------
  606|      3|        newOp = EOpConvNumeric;
  607|      3|        return true;
  608|      3|    }
  609|      0|    return false;
  610|      3|}
_ZNK7glslang13TIntermediate16createConversionENS_10TBasicTypeEPNS_12TIntermTypedE:
  616|      3|{
  617|       |    //
  618|       |    // Add a new newNode for the conversion.
  619|       |    //
  620|       |
  621|      3|    bool convertToIntTypes = (convertTo == EbtInt8  || convertTo == EbtUint8  ||
  ------------------
  |  Branch (621:31): [True: 0, False: 3]
  |  Branch (621:56): [True: 0, False: 3]
  ------------------
  622|      3|                              convertTo == EbtInt16 || convertTo == EbtUint16 ||
  ------------------
  |  Branch (622:31): [True: 0, False: 3]
  |  Branch (622:56): [True: 0, False: 3]
  ------------------
  623|      3|                              convertTo == EbtInt   || convertTo == EbtUint   ||
  ------------------
  |  Branch (623:31): [True: 3, False: 0]
  |  Branch (623:56): [True: 0, False: 0]
  ------------------
  624|      0|                              convertTo == EbtInt64 || convertTo == EbtUint64);
  ------------------
  |  Branch (624:31): [True: 0, False: 0]
  |  Branch (624:56): [True: 0, False: 0]
  ------------------
  625|       |
  626|      3|    bool convertFromIntTypes = (node->getBasicType() == EbtInt8  || node->getBasicType() == EbtUint8  ||
  ------------------
  |  Branch (626:33): [True: 0, False: 3]
  |  Branch (626:69): [True: 0, False: 3]
  ------------------
  627|      3|                                node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16 ||
  ------------------
  |  Branch (627:33): [True: 0, False: 3]
  |  Branch (627:69): [True: 0, False: 3]
  ------------------
  628|      3|                                node->getBasicType() == EbtInt   || node->getBasicType() == EbtUint   ||
  ------------------
  |  Branch (628:33): [True: 0, False: 3]
  |  Branch (628:69): [True: 3, False: 0]
  ------------------
  629|      0|                                node->getBasicType() == EbtInt64 || node->getBasicType() == EbtUint64);
  ------------------
  |  Branch (629:33): [True: 0, False: 0]
  |  Branch (629:69): [True: 0, False: 0]
  ------------------
  630|       |
  631|      3|    bool convertToFloatTypes = (convertTo == EbtFloat16 || convertTo == EbtBFloat16 || convertTo == EbtFloat || convertTo == EbtDouble ||
  ------------------
  |  Branch (631:33): [True: 0, False: 3]
  |  Branch (631:60): [True: 0, False: 3]
  |  Branch (631:88): [True: 0, False: 3]
  |  Branch (631:113): [True: 0, False: 3]
  ------------------
  632|      3|                                convertTo == EbtFloatE5M2 || convertTo == EbtFloatE4M3);
  ------------------
  |  Branch (632:33): [True: 0, False: 3]
  |  Branch (632:62): [True: 0, False: 3]
  ------------------
  633|       |
  634|      3|    bool convertFromFloatTypes = (node->getBasicType() == EbtFloat16 ||
  ------------------
  |  Branch (634:35): [True: 0, False: 3]
  ------------------
  635|      3|                                  node->getBasicType() == EbtBFloat16 ||
  ------------------
  |  Branch (635:35): [True: 0, False: 3]
  ------------------
  636|      3|                                  node->getBasicType() == EbtFloat ||
  ------------------
  |  Branch (636:35): [True: 0, False: 3]
  ------------------
  637|      3|                                  node->getBasicType() == EbtDouble ||
  ------------------
  |  Branch (637:35): [True: 0, False: 3]
  ------------------
  638|      3|                                  node->getBasicType() == EbtFloatE5M2 ||
  ------------------
  |  Branch (638:35): [True: 0, False: 3]
  ------------------
  639|      3|                                  node->getBasicType() == EbtFloatE4M3 ||
  ------------------
  |  Branch (639:35): [True: 0, False: 3]
  ------------------
  640|      3|                                  isTypeOcpMicroscalingFloat(node->getBasicType()));
  ------------------
  |  Branch (640:35): [True: 0, False: 3]
  ------------------
  641|       |
  642|      3|    if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) ||
  ------------------
  |  Branch (642:11): [True: 0, False: 3]
  |  Branch (642:35): [True: 0, False: 3]
  |  Branch (642:61): [True: 0, False: 0]
  ------------------
  643|      3|        ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes)) {
  ------------------
  |  Branch (643:11): [True: 0, False: 3]
  |  Branch (643:46): [True: 0, False: 3]
  |  Branch (643:83): [True: 0, False: 0]
  ------------------
  644|      0|        if (! getArithemeticInt8Enabled()) {
  ------------------
  |  Branch (644:13): [True: 0, False: 0]
  ------------------
  645|      0|            return nullptr;
  646|      0|        }
  647|      0|    }
  648|       |
  649|      3|    if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) ||
  ------------------
  |  Branch (649:11): [True: 0, False: 3]
  |  Branch (649:36): [True: 0, False: 3]
  |  Branch (649:63): [True: 0, False: 0]
  ------------------
  650|      3|        ((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes)) {
  ------------------
  |  Branch (650:11): [True: 0, False: 3]
  |  Branch (650:47): [True: 0, False: 3]
  |  Branch (650:85): [True: 0, False: 0]
  ------------------
  651|      0|        if (! getArithemeticInt16Enabled()) {
  ------------------
  |  Branch (651:13): [True: 0, False: 0]
  ------------------
  652|      0|            return nullptr;
  653|      0|        }
  654|      0|    }
  655|       |
  656|      3|    if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) ||
  ------------------
  |  Branch (656:10): [True: 0, False: 3]
  |  Branch (656:37): [True: 0, False: 0]
  ------------------
  657|      3|        (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes)) {
  ------------------
  |  Branch (657:10): [True: 0, False: 3]
  |  Branch (657:48): [True: 0, False: 0]
  ------------------
  658|      0|        if (! getArithemeticFloat16Enabled()) {
  ------------------
  |  Branch (658:13): [True: 0, False: 0]
  ------------------
  659|      0|            return nullptr;
  660|      0|        }
  661|      0|    }
  662|       |
  663|      3|    TIntermUnary* newNode = nullptr;
  664|      3|    TOperator newOp = EOpNull;
  665|      3|    if (!buildConvertOp(convertTo, node->getBasicType(), newOp)) {
  ------------------
  |  Branch (665:9): [True: 0, False: 3]
  ------------------
  666|      0|        return nullptr;
  667|      0|    }
  668|       |
  669|      3|    TType newType(convertTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
  670|      3|    if (node->getType().isLongVector()) {
  ------------------
  |  Branch (670:9): [True: 0, False: 3]
  ------------------
  671|      0|        newType.shallowCopy(node->getType());
  672|      0|        newType.setBasicType(convertTo);
  673|      0|        newType.makeTemporary();
  674|      0|        newType.getQualifier().clear();
  675|      0|    }
  676|      3|    newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
  677|       |
  678|      3|    if (node->getAsConstantUnion()) {
  ------------------
  |  Branch (678:9): [True: 0, False: 3]
  ------------------
  679|       |        // 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions
  680|       |        // to those types
  681|      0|        if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) &&
  ------------------
  |  Branch (681:14): [True: 0, False: 0]
  |  Branch (681:47): [True: 0, False: 0]
  |  Branch (681:71): [True: 0, False: 0]
  ------------------
  682|      0|            (getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) &&
  ------------------
  |  Branch (682:14): [True: 0, False: 0]
  |  Branch (682:48): [True: 0, False: 0]
  |  Branch (682:73): [True: 0, False: 0]
  ------------------
  683|      0|            (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16)))
  ------------------
  |  Branch (683:14): [True: 0, False: 0]
  |  Branch (683:48): [True: 0, False: 0]
  ------------------
  684|      0|        {
  685|      0|            TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
  686|      0|            if (folded)
  ------------------
  |  Branch (686:17): [True: 0, False: 0]
  ------------------
  687|      0|                return folded;
  688|      0|        }
  689|      0|    }
  690|       |
  691|       |    // Propagate specialization-constant-ness, if allowed
  692|      3|    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
  ------------------
  |  Branch (692:9): [True: 0, False: 3]
  |  Branch (692:60): [True: 0, False: 0]
  ------------------
  693|      0|        newNode->getWritableType().getQualifier().makeSpecConstant();
  694|       |
  695|      3|    return newNode;
  696|      3|}
_ZN7glslang13TIntermediate17addPairConversionENS_9TOperatorEPNS_12TIntermTypedES3_:
  717|     24|{
  718|     24|    if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1))
  ------------------
  |  Branch (718:9): [True: 0, False: 24]
  |  Branch (718:44): [True: 1, False: 23]
  ------------------
  719|      1|        return std::make_tuple(nullptr, nullptr);
  720|       |
  721|     23|    if (node0->getType() != node1->getType()) {
  ------------------
  |  Branch (721:9): [True: 18, False: 5]
  ------------------
  722|       |        // If differing structure, then no conversions.
  723|     18|        if (node0->isStruct() || node1->isStruct())
  ------------------
  |  Branch (723:13): [True: 0, False: 18]
  |  Branch (723:34): [True: 0, False: 18]
  ------------------
  724|      0|            return std::make_tuple(nullptr, nullptr);
  725|       |
  726|       |        // If differing arrays, then no conversions.
  727|     18|        if (node0->getType().isArray() || node1->getType().isArray())
  ------------------
  |  Branch (727:13): [True: 0, False: 18]
  |  Branch (727:43): [True: 0, False: 18]
  ------------------
  728|      0|            return std::make_tuple(nullptr, nullptr);
  729|       |
  730|       |        // No implicit conversions for operations involving cooperative matrices
  731|     18|        if (node0->getType().isCoopMat() || node1->getType().isCoopMat())
  ------------------
  |  Branch (731:13): [True: 0, False: 18]
  |  Branch (731:45): [True: 0, False: 18]
  ------------------
  732|      0|            return std::make_tuple(node0, node1);
  733|     18|    }
  734|       |
  735|     23|    auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
  736|       |
  737|     23|    switch (op) {
  738|       |    //
  739|       |    // List all the binary ops that can implicitly convert one operand to the other's type;
  740|       |    // This implements the 'policy' for implicit type conversion.
  741|       |    //
  742|      0|    case EOpLessThan:
  ------------------
  |  Branch (742:5): [True: 0, False: 23]
  ------------------
  743|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (743:5): [True: 0, False: 23]
  ------------------
  744|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (744:5): [True: 0, False: 23]
  ------------------
  745|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (745:5): [True: 0, False: 23]
  ------------------
  746|      0|    case EOpEqual:
  ------------------
  |  Branch (746:5): [True: 0, False: 23]
  ------------------
  747|      0|    case EOpNotEqual:
  ------------------
  |  Branch (747:5): [True: 0, False: 23]
  ------------------
  748|       |
  749|      3|    case EOpAdd:
  ------------------
  |  Branch (749:5): [True: 3, False: 20]
  ------------------
  750|      6|    case EOpSub:
  ------------------
  |  Branch (750:5): [True: 3, False: 20]
  ------------------
  751|      9|    case EOpMul:
  ------------------
  |  Branch (751:5): [True: 3, False: 20]
  ------------------
  752|      9|    case EOpDiv:
  ------------------
  |  Branch (752:5): [True: 0, False: 23]
  ------------------
  753|      9|    case EOpMod:
  ------------------
  |  Branch (753:5): [True: 0, False: 23]
  ------------------
  754|       |
  755|      9|    case EOpVectorTimesScalar:
  ------------------
  |  Branch (755:5): [True: 0, False: 23]
  ------------------
  756|      9|    case EOpVectorTimesMatrix:
  ------------------
  |  Branch (756:5): [True: 0, False: 23]
  ------------------
  757|      9|    case EOpMatrixTimesVector:
  ------------------
  |  Branch (757:5): [True: 0, False: 23]
  ------------------
  758|      9|    case EOpMatrixTimesScalar:
  ------------------
  |  Branch (758:5): [True: 0, False: 23]
  ------------------
  759|       |
  760|      9|    case EOpAnd:
  ------------------
  |  Branch (760:5): [True: 0, False: 23]
  ------------------
  761|      9|    case EOpInclusiveOr:
  ------------------
  |  Branch (761:5): [True: 0, False: 23]
  ------------------
  762|      9|    case EOpExclusiveOr:
  ------------------
  |  Branch (762:5): [True: 0, False: 23]
  ------------------
  763|       |
  764|     23|    case EOpSequence:          // used by ?:
  ------------------
  |  Branch (764:5): [True: 14, False: 9]
  ------------------
  765|       |
  766|     23|        if (node0->getBasicType() == node1->getBasicType())
  ------------------
  |  Branch (766:13): [True: 5, False: 18]
  ------------------
  767|      5|            return std::make_tuple(node0, node1);
  768|       |
  769|     18|        promoteTo = getConversionDestinationType(node0->getBasicType(), node1->getBasicType(), op);
  770|     18|        if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
  ------------------
  |  Branch (770:13): [True: 0, False: 18]
  |  Branch (770:54): [True: 0, False: 18]
  ------------------
  771|      0|            return std::make_tuple(nullptr, nullptr);
  772|       |
  773|     18|        break;
  774|       |
  775|     18|    case EOpLogicalAnd:
  ------------------
  |  Branch (775:5): [True: 0, False: 23]
  ------------------
  776|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (776:5): [True: 0, False: 23]
  ------------------
  777|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (777:5): [True: 0, False: 23]
  ------------------
  778|      0|        if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (778:13): [True: 0, False: 0]
  ------------------
  779|      0|            promoteTo = std::make_tuple(EbtBool, EbtBool);
  780|      0|        else
  781|      0|            return std::make_tuple(node0, node1);
  782|      0|        break;
  783|       |
  784|       |    // There are no conversions needed for GLSL; the shift amount just needs to be an
  785|       |    // integer type, as does the base.
  786|       |    // HLSL can promote bools to ints to make this work.
  787|      0|    case EOpLeftShift:
  ------------------
  |  Branch (787:5): [True: 0, False: 23]
  ------------------
  788|      0|    case EOpRightShift:
  ------------------
  |  Branch (788:5): [True: 0, False: 23]
  ------------------
  789|      0|        if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (789:13): [True: 0, False: 0]
  ------------------
  790|      0|            TBasicType node0BasicType = node0->getBasicType();
  791|      0|            if (node0BasicType == EbtBool)
  ------------------
  |  Branch (791:17): [True: 0, False: 0]
  ------------------
  792|      0|                node0BasicType = EbtInt;
  793|      0|            if (node1->getBasicType() == EbtBool)
  ------------------
  |  Branch (793:17): [True: 0, False: 0]
  ------------------
  794|      0|                promoteTo = std::make_tuple(node0BasicType, EbtInt);
  795|      0|            else
  796|      0|                promoteTo = std::make_tuple(node0BasicType, node1->getBasicType());
  797|      0|        } else {
  798|      0|            if (isTypeInt(node0->getBasicType()) && isTypeInt(node1->getBasicType()))
  ------------------
  |  Branch (798:17): [True: 0, False: 0]
  |  Branch (798:53): [True: 0, False: 0]
  ------------------
  799|      0|                return std::make_tuple(node0, node1);
  800|      0|            else
  801|      0|                return std::make_tuple(nullptr, nullptr);
  802|      0|        }
  803|      0|        break;
  804|       |
  805|      0|    default:
  ------------------
  |  Branch (805:5): [True: 0, False: 23]
  ------------------
  806|      0|        if (node0->getType() == node1->getType())
  ------------------
  |  Branch (806:13): [True: 0, False: 0]
  ------------------
  807|      0|            return std::make_tuple(node0, node1);
  808|       |
  809|      0|        return std::make_tuple(nullptr, nullptr);
  810|     23|    }
  811|       |
  812|     18|    TIntermTyped* newNode0;
  813|     18|    TIntermTyped* newNode1;
  814|       |
  815|     18|    if (std::get<0>(promoteTo) != node0->getType().getBasicType()) {
  ------------------
  |  Branch (815:9): [True: 18, False: 0]
  ------------------
  816|     18|        if (node0->getAsConstantUnion())
  ------------------
  |  Branch (816:13): [True: 18, False: 0]
  ------------------
  817|     18|            newNode0 = promoteConstantUnion(std::get<0>(promoteTo), node0->getAsConstantUnion());
  818|      0|        else
  819|      0|            newNode0 = createConversion(std::get<0>(promoteTo), node0);
  820|     18|    } else
  821|      0|        newNode0 = node0;
  822|       |
  823|     18|    if (std::get<1>(promoteTo) != node1->getType().getBasicType()) {
  ------------------
  |  Branch (823:9): [True: 0, False: 18]
  ------------------
  824|      0|        if (node1->getAsConstantUnion())
  ------------------
  |  Branch (824:13): [True: 0, False: 0]
  ------------------
  825|      0|            newNode1 = promoteConstantUnion(std::get<1>(promoteTo), node1->getAsConstantUnion());
  826|      0|        else
  827|      0|            newNode1 = createConversion(std::get<1>(promoteTo), node1);
  828|      0|    } else
  829|     18|        newNode1 = node1;
  830|       |
  831|     18|    return std::make_tuple(newNode0, newNode1);
  832|     23|}
_ZN7glslang13TIntermediate13addConversionENS_9TOperatorERKNS_5TTypeEPNS_12TIntermTypedE:
  850|   156k|{
  851|   156k|    if (!isConversionAllowed(op, node))
  ------------------
  |  Branch (851:9): [True: 0, False: 156k]
  ------------------
  852|      0|        return nullptr;
  853|       |
  854|       |    // Otherwise, if types are identical, no problem
  855|   156k|    if (type == node->getType())
  ------------------
  |  Branch (855:9): [True: 150k, False: 5.53k]
  ------------------
  856|   150k|        return node;
  857|       |
  858|       |    // If one's a structure, then no conversions.
  859|  5.53k|    if (type.isStruct() || node->isStruct())
  ------------------
  |  Branch (859:9): [True: 0, False: 5.53k]
  |  Branch (859:28): [True: 0, False: 5.53k]
  ------------------
  860|      0|        return nullptr;
  861|       |
  862|       |    // If one's an array, then no conversions.
  863|  5.53k|    if (type.isArray() || node->getType().isArray())
  ------------------
  |  Branch (863:9): [True: 0, False: 5.53k]
  |  Branch (863:27): [True: 0, False: 5.53k]
  ------------------
  864|      0|        return nullptr;
  865|       |
  866|       |    // Reject implicit conversions to cooperative matrix types
  867|  5.53k|    if (node->getType().isCoopMat() &&
  ------------------
  |  Branch (867:9): [True: 0, False: 5.53k]
  ------------------
  868|      0|        op != EOpConstructCooperativeMatrixNV &&
  ------------------
  |  Branch (868:9): [True: 0, False: 0]
  ------------------
  869|      0|        op != EOpConstructCooperativeMatrixKHR &&
  ------------------
  |  Branch (869:9): [True: 0, False: 0]
  ------------------
  870|      0|        op != glslang::EOpCompositeConstructCoopMatQCOM)
  ------------------
  |  Branch (870:9): [True: 0, False: 0]
  ------------------
  871|      0|        return nullptr;
  872|       |
  873|  5.53k|    if (node->getType().isTensorLayoutNV() ||
  ------------------
  |  Branch (873:9): [True: 0, False: 5.53k]
  ------------------
  874|  5.53k|        node->getType().isTensorViewNV())
  ------------------
  |  Branch (874:9): [True: 0, False: 5.53k]
  ------------------
  875|      0|        return nullptr;
  876|       |
  877|       |    // Reject implicit conversions to cooperative vector types
  878|  5.53k|    if (node->getType().isCoopVecNV() &&
  ------------------
  |  Branch (878:9): [True: 0, False: 5.53k]
  ------------------
  879|      0|        op != EOpConstructCooperativeVectorNV)
  ------------------
  |  Branch (879:9): [True: 0, False: 0]
  ------------------
  880|      0|        return nullptr;
  881|       |
  882|       |    // Note: callers are responsible for other aspects of shape,
  883|       |    // like vector and matrix sizes.
  884|       |
  885|  5.53k|    switch (op) {
  886|       |    //
  887|       |    // Explicit conversions (unary operations)
  888|       |    //
  889|      6|    case EOpConstructBool:
  ------------------
  |  Branch (889:5): [True: 6, False: 5.52k]
  ------------------
  890|      6|    case EOpConstructFloat:
  ------------------
  |  Branch (890:5): [True: 0, False: 5.53k]
  ------------------
  891|      9|    case EOpConstructInt:
  ------------------
  |  Branch (891:5): [True: 3, False: 5.52k]
  ------------------
  892|  5.51k|    case EOpConstructUint:
  ------------------
  |  Branch (892:5): [True: 5.50k, False: 22]
  ------------------
  893|  5.51k|    case EOpConstructDouble:
  ------------------
  |  Branch (893:5): [True: 0, False: 5.53k]
  ------------------
  894|  5.51k|    case EOpConstructFloat16:
  ------------------
  |  Branch (894:5): [True: 0, False: 5.53k]
  ------------------
  895|  5.51k|    case EOpConstructBFloat16:
  ------------------
  |  Branch (895:5): [True: 0, False: 5.53k]
  ------------------
  896|  5.51k|    case EOpConstructFloatE5M2:
  ------------------
  |  Branch (896:5): [True: 0, False: 5.53k]
  ------------------
  897|  5.51k|    case EOpConstructFloatE4M3:
  ------------------
  |  Branch (897:5): [True: 0, False: 5.53k]
  ------------------
  898|  5.51k|    case EOpConstructFloatE2M1:
  ------------------
  |  Branch (898:5): [True: 0, False: 5.53k]
  ------------------
  899|  5.51k|    case EOpConstructFloatE3M2:
  ------------------
  |  Branch (899:5): [True: 0, False: 5.53k]
  ------------------
  900|  5.51k|    case EOpConstructFloatE2M3:
  ------------------
  |  Branch (900:5): [True: 0, False: 5.53k]
  ------------------
  901|  5.51k|    case EOpConstructFloatUE8M0:
  ------------------
  |  Branch (901:5): [True: 0, False: 5.53k]
  ------------------
  902|  5.51k|    case EOpConstructFloatMXINT8:
  ------------------
  |  Branch (902:5): [True: 0, False: 5.53k]
  ------------------
  903|  5.51k|    case EOpConstructInt8:
  ------------------
  |  Branch (903:5): [True: 0, False: 5.53k]
  ------------------
  904|  5.51k|    case EOpConstructUint8:
  ------------------
  |  Branch (904:5): [True: 0, False: 5.53k]
  ------------------
  905|  5.51k|    case EOpConstructInt16:
  ------------------
  |  Branch (905:5): [True: 0, False: 5.53k]
  ------------------
  906|  5.51k|    case EOpConstructUint16:
  ------------------
  |  Branch (906:5): [True: 0, False: 5.53k]
  ------------------
  907|  5.51k|    case EOpConstructInt64:
  ------------------
  |  Branch (907:5): [True: 0, False: 5.53k]
  ------------------
  908|  5.51k|    case EOpConstructUint64:
  ------------------
  |  Branch (908:5): [True: 0, False: 5.53k]
  ------------------
  909|  5.51k|    case EOpConstructSaturated:
  ------------------
  |  Branch (909:5): [True: 0, False: 5.53k]
  ------------------
  910|  5.51k|        break;
  911|       |
  912|       |    //
  913|       |    // Implicit conversions
  914|       |    //
  915|     12|    case EOpLogicalNot:
  ------------------
  |  Branch (915:5): [True: 12, False: 5.51k]
  ------------------
  916|       |
  917|     12|    case EOpFunctionCall:
  ------------------
  |  Branch (917:5): [True: 0, False: 5.53k]
  ------------------
  918|       |
  919|     12|    case EOpReturn:
  ------------------
  |  Branch (919:5): [True: 0, False: 5.53k]
  ------------------
  920|     13|    case EOpAssign:
  ------------------
  |  Branch (920:5): [True: 1, False: 5.52k]
  ------------------
  921|     13|    case EOpAddAssign:
  ------------------
  |  Branch (921:5): [True: 0, False: 5.53k]
  ------------------
  922|     13|    case EOpSubAssign:
  ------------------
  |  Branch (922:5): [True: 0, False: 5.53k]
  ------------------
  923|     13|    case EOpMulAssign:
  ------------------
  |  Branch (923:5): [True: 0, False: 5.53k]
  ------------------
  924|     13|    case EOpVectorTimesScalarAssign:
  ------------------
  |  Branch (924:5): [True: 0, False: 5.53k]
  ------------------
  925|     13|    case EOpMatrixTimesScalarAssign:
  ------------------
  |  Branch (925:5): [True: 0, False: 5.53k]
  ------------------
  926|     13|    case EOpDivAssign:
  ------------------
  |  Branch (926:5): [True: 0, False: 5.53k]
  ------------------
  927|     13|    case EOpModAssign:
  ------------------
  |  Branch (927:5): [True: 0, False: 5.53k]
  ------------------
  928|     13|    case EOpAndAssign:
  ------------------
  |  Branch (928:5): [True: 0, False: 5.53k]
  ------------------
  929|     13|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (929:5): [True: 0, False: 5.53k]
  ------------------
  930|     13|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (930:5): [True: 0, False: 5.53k]
  ------------------
  931|       |
  932|     13|    case EOpAtan:
  ------------------
  |  Branch (932:5): [True: 0, False: 5.53k]
  ------------------
  933|     13|    case EOpClamp:
  ------------------
  |  Branch (933:5): [True: 0, False: 5.53k]
  ------------------
  934|     13|    case EOpCross:
  ------------------
  |  Branch (934:5): [True: 0, False: 5.53k]
  ------------------
  935|     13|    case EOpDistance:
  ------------------
  |  Branch (935:5): [True: 0, False: 5.53k]
  ------------------
  936|     13|    case EOpDot:
  ------------------
  |  Branch (936:5): [True: 0, False: 5.53k]
  ------------------
  937|     13|    case EOpDst:
  ------------------
  |  Branch (937:5): [True: 0, False: 5.53k]
  ------------------
  938|     13|    case EOpFaceForward:
  ------------------
  |  Branch (938:5): [True: 0, False: 5.53k]
  ------------------
  939|     13|    case EOpFma:
  ------------------
  |  Branch (939:5): [True: 0, False: 5.53k]
  ------------------
  940|     13|    case EOpFrexp:
  ------------------
  |  Branch (940:5): [True: 0, False: 5.53k]
  ------------------
  941|     13|    case EOpLdexp:
  ------------------
  |  Branch (941:5): [True: 0, False: 5.53k]
  ------------------
  942|     13|    case EOpMix:
  ------------------
  |  Branch (942:5): [True: 0, False: 5.53k]
  ------------------
  943|     13|    case EOpLit:
  ------------------
  |  Branch (943:5): [True: 0, False: 5.53k]
  ------------------
  944|     13|    case EOpMax:
  ------------------
  |  Branch (944:5): [True: 0, False: 5.53k]
  ------------------
  945|     13|    case EOpMin:
  ------------------
  |  Branch (945:5): [True: 0, False: 5.53k]
  ------------------
  946|     13|    case EOpMod:
  ------------------
  |  Branch (946:5): [True: 0, False: 5.53k]
  ------------------
  947|     13|    case EOpModf:
  ------------------
  |  Branch (947:5): [True: 0, False: 5.53k]
  ------------------
  948|     13|    case EOpPow:
  ------------------
  |  Branch (948:5): [True: 0, False: 5.53k]
  ------------------
  949|     13|    case EOpReflect:
  ------------------
  |  Branch (949:5): [True: 0, False: 5.53k]
  ------------------
  950|     13|    case EOpRefract:
  ------------------
  |  Branch (950:5): [True: 0, False: 5.53k]
  ------------------
  951|     13|    case EOpSmoothStep:
  ------------------
  |  Branch (951:5): [True: 0, False: 5.53k]
  ------------------
  952|     13|    case EOpStep:
  ------------------
  |  Branch (952:5): [True: 0, False: 5.53k]
  ------------------
  953|       |
  954|     13|    case EOpSequence:
  ------------------
  |  Branch (954:5): [True: 0, False: 5.53k]
  ------------------
  955|     13|    case EOpConstructStruct:
  ------------------
  |  Branch (955:5): [True: 0, False: 5.53k]
  ------------------
  956|     13|    case EOpConstructCooperativeMatrixNV:
  ------------------
  |  Branch (956:5): [True: 0, False: 5.53k]
  ------------------
  957|     13|    case EOpConstructCooperativeMatrixKHR:
  ------------------
  |  Branch (957:5): [True: 0, False: 5.53k]
  ------------------
  958|     13|    case EOpConstructCooperativeVectorNV:
  ------------------
  |  Branch (958:5): [True: 0, False: 5.53k]
  ------------------
  959|       |
  960|     13|        if (type.isReference() || node->getType().isReference()) {
  ------------------
  |  Branch (960:13): [True: 0, False: 13]
  |  Branch (960:35): [True: 0, False: 13]
  ------------------
  961|       |            // types must match to assign a reference
  962|      0|            if (type == node->getType())
  ------------------
  |  Branch (962:17): [True: 0, False: 0]
  ------------------
  963|      0|                return node;
  964|      0|            else
  965|      0|                return nullptr;
  966|      0|        }
  967|       |
  968|     13|        if (type.getBasicType() == node->getType().getBasicType())
  ------------------
  |  Branch (968:13): [True: 0, False: 13]
  ------------------
  969|      0|            return node;
  970|       |
  971|     13|        if (! canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op))
  ------------------
  |  Branch (971:13): [True: 1, False: 12]
  ------------------
  972|      1|            return nullptr;
  973|     12|        break;
  974|       |
  975|       |    // For GLSL, there are no conversions needed; the shift amount just needs to be an
  976|       |    // integer type, as do the base/result.
  977|       |    // HLSL can convert the shift from a bool to an int.
  978|     12|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (978:5): [True: 0, False: 5.53k]
  ------------------
  979|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (979:5): [True: 0, False: 5.53k]
  ------------------
  980|      0|    {
  981|      0|        if (!(getSource() == EShSourceHlsl && node->getType().getBasicType() == EbtBool)) {
  ------------------
  |  Branch (981:15): [True: 0, False: 0]
  |  Branch (981:47): [True: 0, False: 0]
  ------------------
  982|      0|            if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType()))
  ------------------
  |  Branch (982:17): [True: 0, False: 0]
  |  Branch (982:51): [True: 0, False: 0]
  ------------------
  983|      0|                return node;
  984|      0|            else
  985|      0|                return nullptr;
  986|      0|        }
  987|      0|        break;
  988|      0|    }
  989|       |
  990|      0|    default:
  ------------------
  |  Branch (990:5): [True: 0, False: 5.53k]
  ------------------
  991|       |        // default is to require a match; all exceptions should have case statements above
  992|       |
  993|      0|        if (type.getBasicType() == node->getType().getBasicType())
  ------------------
  |  Branch (993:13): [True: 0, False: 0]
  ------------------
  994|      0|            return node;
  995|      0|        else
  996|      0|            return nullptr;
  997|  5.53k|    }
  998|       |
  999|  5.52k|    bool canPromoteConstant = true;
 1000|       |    // GL_EXT_shader_16bit_storage can't do OpConstantComposite with
 1001|       |    // 16-bit types, so disable promotion for those types.
 1002|       |    // Many issues with this, from JohnK:
 1003|       |    //  - this isn't really right to discuss SPIR-V here
 1004|       |    //  - this could easily be entirely about scalars, so is overstepping
 1005|       |    //  - we should be looking at what the shader asked for, and saying whether or
 1006|       |    //    not it can be done, in the parser, by calling requireExtensions(), not
 1007|       |    //    changing language sementics on the fly by asking what extensions are in use
 1008|       |    //  - at the time of this writing (14-Aug-2020), no test results are changed by this.
 1009|  5.52k|    switch (op) {
 1010|      0|    case EOpConstructBFloat16:
  ------------------
  |  Branch (1010:5): [True: 0, False: 5.52k]
  ------------------
 1011|      0|    case EOpConstructFloatE5M2:
  ------------------
  |  Branch (1011:5): [True: 0, False: 5.52k]
  ------------------
 1012|      0|    case EOpConstructFloatE4M3:
  ------------------
  |  Branch (1012:5): [True: 0, False: 5.52k]
  ------------------
 1013|      0|    case EOpConstructFloatE2M1:
  ------------------
  |  Branch (1013:5): [True: 0, False: 5.52k]
  ------------------
 1014|      0|    case EOpConstructFloatE3M2:
  ------------------
  |  Branch (1014:5): [True: 0, False: 5.52k]
  ------------------
 1015|      0|    case EOpConstructFloatE2M3:
  ------------------
  |  Branch (1015:5): [True: 0, False: 5.52k]
  ------------------
 1016|      0|    case EOpConstructFloatUE8M0:
  ------------------
  |  Branch (1016:5): [True: 0, False: 5.52k]
  ------------------
 1017|      0|    case EOpConstructFloatMXINT8:
  ------------------
  |  Branch (1017:5): [True: 0, False: 5.52k]
  ------------------
 1018|      0|        canPromoteConstant = true;
 1019|      0|        break;
 1020|      0|    case EOpConstructFloat16:
  ------------------
  |  Branch (1020:5): [True: 0, False: 5.52k]
  ------------------
 1021|      0|        canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1021:30): [True: 0, False: 0]
  ------------------
 1022|      0|                             numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16);
  ------------------
  |  Branch (1022:30): [True: 0, False: 0]
  ------------------
 1023|      0|        break;
 1024|      0|    case EOpConstructInt8:
  ------------------
  |  Branch (1024:5): [True: 0, False: 5.52k]
  ------------------
 1025|      0|    case EOpConstructUint8:
  ------------------
  |  Branch (1025:5): [True: 0, False: 5.52k]
  ------------------
 1026|      0|        canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1026:30): [True: 0, False: 0]
  ------------------
 1027|      0|                             numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8);
  ------------------
  |  Branch (1027:30): [True: 0, False: 0]
  ------------------
 1028|      0|        break;
 1029|      0|    case EOpConstructInt16:
  ------------------
  |  Branch (1029:5): [True: 0, False: 5.52k]
  ------------------
 1030|      0|    case EOpConstructUint16:
  ------------------
  |  Branch (1030:5): [True: 0, False: 5.52k]
  ------------------
 1031|      0|        canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1031:30): [True: 0, False: 0]
  ------------------
 1032|      0|                             numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16);
  ------------------
  |  Branch (1032:30): [True: 0, False: 0]
  ------------------
 1033|      0|        break;
 1034|  5.52k|    default:
  ------------------
  |  Branch (1034:5): [True: 5.52k, False: 0]
  ------------------
 1035|  5.52k|        break;
 1036|  5.52k|    }
 1037|       |
 1038|  5.52k|    if (canPromoteConstant && node->getAsConstantUnion())
  ------------------
  |  Branch (1038:9): [True: 5.52k, False: 0]
  |  Branch (1038:31): [True: 5.52k, False: 3]
  ------------------
 1039|  5.52k|        return promoteConstantUnion(type.getBasicType(), node->getAsConstantUnion());
 1040|       |
 1041|       |    //
 1042|       |    // Add a new newNode for the conversion.
 1043|       |    //
 1044|      3|    TIntermTyped* newNode = createConversion(type.getBasicType(), node);
 1045|       |
 1046|      3|    return newNode;
 1047|  5.52k|}
_ZN7glslang13TIntermediate21addUniShapeConversionENS_9TOperatorERKNS_5TTypeEPNS_12TIntermTypedE:
 1062|      7|{
 1063|       |    // some source languages don't do this
 1064|      7|    switch (getSource()) {
 1065|      7|    case EShSourceHlsl:
  ------------------
  |  Branch (1065:5): [True: 7, False: 0]
  ------------------
 1066|      7|        break;
 1067|      0|    case EShSourceGlsl:
  ------------------
  |  Branch (1067:5): [True: 0, False: 7]
  ------------------
 1068|      0|    default:
  ------------------
  |  Branch (1068:5): [True: 0, False: 7]
  ------------------
 1069|      0|        return node;
 1070|      7|    }
 1071|       |
 1072|       |    // some operations don't do this
 1073|      7|    switch (op) {
 1074|      0|    case EOpFunctionCall:
  ------------------
  |  Branch (1074:5): [True: 0, False: 7]
  ------------------
 1075|      0|    case EOpReturn:
  ------------------
  |  Branch (1075:5): [True: 0, False: 7]
  ------------------
 1076|      0|        break;
 1077|       |
 1078|      0|    case EOpMulAssign:
  ------------------
  |  Branch (1078:5): [True: 0, False: 7]
  ------------------
 1079|       |        // want to support vector *= scalar native ops in AST and lower, not smear, similarly for
 1080|       |        // matrix *= scalar, etc.
 1081|       |
 1082|      0|    case EOpAddAssign:
  ------------------
  |  Branch (1082:5): [True: 0, False: 7]
  ------------------
 1083|      0|    case EOpSubAssign:
  ------------------
  |  Branch (1083:5): [True: 0, False: 7]
  ------------------
 1084|      0|    case EOpDivAssign:
  ------------------
  |  Branch (1084:5): [True: 0, False: 7]
  ------------------
 1085|      0|    case EOpAndAssign:
  ------------------
  |  Branch (1085:5): [True: 0, False: 7]
  ------------------
 1086|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (1086:5): [True: 0, False: 7]
  ------------------
 1087|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (1087:5): [True: 0, False: 7]
  ------------------
 1088|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (1088:5): [True: 0, False: 7]
  ------------------
 1089|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (1089:5): [True: 0, False: 7]
  ------------------
 1090|      0|        if (node->getVectorSize() == 1)
  ------------------
  |  Branch (1090:13): [True: 0, False: 0]
  ------------------
 1091|      0|            return node;
 1092|      0|        break;
 1093|       |
 1094|      1|    case EOpAssign:
  ------------------
  |  Branch (1094:5): [True: 1, False: 6]
  ------------------
 1095|      1|        break;
 1096|       |
 1097|      6|    case EOpMix:
  ------------------
  |  Branch (1097:5): [True: 6, False: 1]
  ------------------
 1098|      6|        break;
 1099|       |
 1100|      0|    default:
  ------------------
  |  Branch (1100:5): [True: 0, False: 7]
  ------------------
 1101|      0|        return node;
 1102|      7|    }
 1103|       |
 1104|      7|    return addShapeConversion(type, node);
 1105|      7|}
_ZN7glslang13TIntermediate20addBiShapeConversionENS_9TOperatorERPNS_12TIntermTypedES4_:
 1115|     20|{
 1116|       |    // some source languages don't do this
 1117|     20|    switch (getSource()) {
 1118|     15|    case EShSourceHlsl:
  ------------------
  |  Branch (1118:5): [True: 15, False: 5]
  ------------------
 1119|     15|        break;
 1120|      5|    case EShSourceGlsl:
  ------------------
  |  Branch (1120:5): [True: 5, False: 15]
  ------------------
 1121|      5|    default:
  ------------------
  |  Branch (1121:5): [True: 0, False: 20]
  ------------------
 1122|      5|        return;
 1123|     20|    }
 1124|       |
 1125|       |    // some operations don't do this
 1126|       |    // 'break' will mean attempt bidirectional conversion
 1127|     15|    switch (op) {
 1128|      0|    case EOpMulAssign:
  ------------------
  |  Branch (1128:5): [True: 0, False: 15]
  ------------------
 1129|      0|    case EOpAssign:
  ------------------
  |  Branch (1129:5): [True: 0, False: 15]
  ------------------
 1130|      0|    case EOpAddAssign:
  ------------------
  |  Branch (1130:5): [True: 0, False: 15]
  ------------------
 1131|      0|    case EOpSubAssign:
  ------------------
  |  Branch (1131:5): [True: 0, False: 15]
  ------------------
 1132|      0|    case EOpDivAssign:
  ------------------
  |  Branch (1132:5): [True: 0, False: 15]
  ------------------
 1133|      0|    case EOpAndAssign:
  ------------------
  |  Branch (1133:5): [True: 0, False: 15]
  ------------------
 1134|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (1134:5): [True: 0, False: 15]
  ------------------
 1135|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (1135:5): [True: 0, False: 15]
  ------------------
 1136|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (1136:5): [True: 0, False: 15]
  ------------------
 1137|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (1137:5): [True: 0, False: 15]
  ------------------
 1138|       |        // switch to unidirectional conversion (the lhs can't change)
 1139|      0|        rhsNode = addUniShapeConversion(op, lhsNode->getType(), rhsNode);
 1140|      0|        return;
 1141|       |
 1142|      0|    case EOpMul:
  ------------------
  |  Branch (1142:5): [True: 0, False: 15]
  ------------------
 1143|       |        // matrix multiply does not change shapes
 1144|      0|        if (lhsNode->isMatrix() && rhsNode->isMatrix())
  ------------------
  |  Branch (1144:13): [True: 0, False: 0]
  |  Branch (1144:36): [True: 0, False: 0]
  ------------------
 1145|      0|            return;
 1146|      0|        [[fallthrough]];
 1147|      3|    case EOpAdd:
  ------------------
  |  Branch (1147:5): [True: 3, False: 12]
  ------------------
 1148|      6|    case EOpSub:
  ------------------
  |  Branch (1148:5): [True: 3, False: 12]
  ------------------
 1149|      6|    case EOpDiv:
  ------------------
  |  Branch (1149:5): [True: 0, False: 15]
  ------------------
 1150|       |        // want to support vector * scalar native ops in AST and lower, not smear, similarly for
 1151|       |        // matrix * vector, etc.
 1152|      6|        if (lhsNode->getVectorSize() == 1 || rhsNode->getVectorSize() == 1)
  ------------------
  |  Branch (1152:13): [True: 6, False: 0]
  |  Branch (1152:46): [True: 0, False: 0]
  ------------------
 1153|      6|            return;
 1154|      0|        break;
 1155|       |
 1156|      0|    case EOpRightShift:
  ------------------
  |  Branch (1156:5): [True: 0, False: 15]
  ------------------
 1157|      0|    case EOpLeftShift:
  ------------------
  |  Branch (1157:5): [True: 0, False: 15]
  ------------------
 1158|       |        // can natively support the right operand being a scalar and the left a vector,
 1159|       |        // but not the reverse
 1160|      0|        if (rhsNode->getVectorSize() == 1)
  ------------------
  |  Branch (1160:13): [True: 0, False: 0]
  ------------------
 1161|      0|            return;
 1162|      0|        break;
 1163|       |
 1164|      0|    case EOpLessThan:
  ------------------
  |  Branch (1164:5): [True: 0, False: 15]
  ------------------
 1165|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (1165:5): [True: 0, False: 15]
  ------------------
 1166|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (1166:5): [True: 0, False: 15]
  ------------------
 1167|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (1167:5): [True: 0, False: 15]
  ------------------
 1168|       |
 1169|      0|    case EOpEqual:
  ------------------
  |  Branch (1169:5): [True: 0, False: 15]
  ------------------
 1170|      0|    case EOpNotEqual:
  ------------------
  |  Branch (1170:5): [True: 0, False: 15]
  ------------------
 1171|       |
 1172|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (1172:5): [True: 0, False: 15]
  ------------------
 1173|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (1173:5): [True: 0, False: 15]
  ------------------
 1174|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (1174:5): [True: 0, False: 15]
  ------------------
 1175|       |
 1176|      0|    case EOpAnd:
  ------------------
  |  Branch (1176:5): [True: 0, False: 15]
  ------------------
 1177|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (1177:5): [True: 0, False: 15]
  ------------------
 1178|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (1178:5): [True: 0, False: 15]
  ------------------
 1179|       |
 1180|      9|    case EOpMix:
  ------------------
  |  Branch (1180:5): [True: 9, False: 6]
  ------------------
 1181|      9|        break;
 1182|       |
 1183|      0|    default:
  ------------------
  |  Branch (1183:5): [True: 0, False: 15]
  ------------------
 1184|      0|        return;
 1185|     15|    }
 1186|       |
 1187|       |    // Do bidirectional conversions
 1188|      9|    if (lhsNode->getType().isScalarOrVec1() || rhsNode->getType().isScalarOrVec1()) {
  ------------------
  |  Branch (1188:9): [True: 9, False: 0]
  |  Branch (1188:48): [True: 0, False: 0]
  ------------------
 1189|      9|        if (lhsNode->getType().isScalarOrVec1())
  ------------------
  |  Branch (1189:13): [True: 9, False: 0]
  ------------------
 1190|      9|            lhsNode = addShapeConversion(rhsNode->getType(), lhsNode);
 1191|      0|        else
 1192|      0|            rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
 1193|      9|    }
 1194|      9|    lhsNode = addShapeConversion(rhsNode->getType(), lhsNode);
 1195|      9|    rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
 1196|      9|}
_ZN7glslang13TIntermediate18addShapeConversionERKNS_5TTypeEPNS_12TIntermTypedE:
 1208|     34|{
 1209|       |    // no conversion needed
 1210|     34|    if (node->getType() == type)
  ------------------
  |  Branch (1210:9): [True: 22, False: 12]
  ------------------
 1211|     22|        return node;
 1212|       |
 1213|       |    // structures and arrays don't change shape, either to or from
 1214|     12|    if (node->getType().isStruct() || node->getType().isArray() ||
  ------------------
  |  Branch (1214:9): [True: 0, False: 12]
  |  Branch (1214:39): [True: 0, False: 12]
  ------------------
 1215|     12|        type.isStruct() || type.isArray())
  ------------------
  |  Branch (1215:9): [True: 0, False: 12]
  |  Branch (1215:28): [True: 0, False: 12]
  ------------------
 1216|      0|        return node;
 1217|       |
 1218|       |    // The new node that handles the conversion
 1219|     12|    TOperator constructorOp = mapTypeToConstructorOp(type);
 1220|       |
 1221|     12|    if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (1221:9): [True: 12, False: 0]
  ------------------
 1222|       |        // HLSL rules for scalar, vector and matrix conversions:
 1223|       |        // 1) scalar can become anything, initializing every component with its value
 1224|       |        // 2) vector and matrix can become scalar, first element is used (warning: truncation)
 1225|       |        // 3) matrix can become matrix with less rows and/or columns (warning: truncation)
 1226|       |        // 4) vector can become vector with less rows size (warning: truncation)
 1227|       |        // 5a) vector 4 can become 2x2 matrix (special case) (same packing layout, its a reinterpret)
 1228|       |        // 5b) 2x2 matrix can become vector 4 (special case) (same packing layout, its a reinterpret)
 1229|       |
 1230|     12|        const TType &sourceType = node->getType();
 1231|       |
 1232|       |        // rule 1 for scalar to matrix is special
 1233|     12|        if (sourceType.isScalarOrVec1() && type.isMatrix()) {
  ------------------
  |  Branch (1233:13): [True: 12, False: 0]
  |  Branch (1233:44): [True: 0, False: 12]
  ------------------
 1234|       |
 1235|       |            // HLSL semantics: the scalar (or vec1) is replicated to every component of the matrix.  Left to its
 1236|       |            // own devices, the constructor from a scalar would populate the diagonal.  This forces replication
 1237|       |            // to every matrix element.
 1238|       |
 1239|       |            // Note that if the node is complex (e.g, a function call), we don't want to duplicate it here
 1240|       |            // repeatedly, so we copy it to a temp, then use the temp.
 1241|      0|            const int matSize = type.computeNumComponents();
 1242|      0|            TIntermAggregate* rhsAggregate = new TIntermAggregate();
 1243|       |
 1244|      0|            const bool isSimple = (node->getAsSymbolNode() != nullptr) || (node->getAsConstantUnion() != nullptr);
  ------------------
  |  Branch (1244:35): [True: 0, False: 0]
  |  Branch (1244:75): [True: 0, False: 0]
  ------------------
 1245|       |
 1246|      0|            if (!isSimple) {
  ------------------
  |  Branch (1246:17): [True: 0, False: 0]
  ------------------
 1247|      0|                assert(0); // TODO: use node replicator service when available.
 1248|      0|            }
 1249|       |
 1250|      0|            for (int x = 0; x < matSize; ++x)
  ------------------
  |  Branch (1250:29): [True: 0, False: 0]
  ------------------
 1251|      0|                rhsAggregate->getSequence().push_back(node);
 1252|       |
 1253|      0|            return setAggregateOperator(rhsAggregate, constructorOp, type, node->getLoc());
 1254|      0|        }
 1255|       |
 1256|       |        // rule 1 and 2
 1257|     12|        if ((sourceType.isScalar() && !type.isScalar()) || (!sourceType.isScalar() && type.isScalar()))
  ------------------
  |  Branch (1257:14): [True: 12, False: 0]
  |  Branch (1257:39): [True: 12, False: 0]
  |  Branch (1257:61): [True: 0, False: 0]
  |  Branch (1257:87): [True: 0, False: 0]
  ------------------
 1258|     12|            return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 1259|       |
 1260|       |        // rule 3 and 5b
 1261|      0|        if (sourceType.isMatrix()) {
  ------------------
  |  Branch (1261:13): [True: 0, False: 0]
  ------------------
 1262|       |            // rule 3
 1263|      0|            if (type.isMatrix()) {
  ------------------
  |  Branch (1263:17): [True: 0, False: 0]
  ------------------
 1264|      0|                if ((sourceType.getMatrixCols() != type.getMatrixCols() || sourceType.getMatrixRows() != type.getMatrixRows()) &&
  ------------------
  |  Branch (1264:22): [True: 0, False: 0]
  |  Branch (1264:76): [True: 0, False: 0]
  ------------------
 1265|      0|                    sourceType.getMatrixCols() >= type.getMatrixCols() && sourceType.getMatrixRows() >= type.getMatrixRows())
  ------------------
  |  Branch (1265:21): [True: 0, False: 0]
  |  Branch (1265:75): [True: 0, False: 0]
  ------------------
 1266|      0|                    return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 1267|       |            // rule 5b
 1268|      0|            } else if (type.isVector()) {
  ------------------
  |  Branch (1268:24): [True: 0, False: 0]
  ------------------
 1269|      0|                if (type.getVectorSize() == 4 && sourceType.getMatrixCols() == 2 && sourceType.getMatrixRows() == 2)
  ------------------
  |  Branch (1269:21): [True: 0, False: 0]
  |  Branch (1269:50): [True: 0, False: 0]
  |  Branch (1269:85): [True: 0, False: 0]
  ------------------
 1270|      0|                    return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 1271|      0|            }
 1272|      0|        }
 1273|       |
 1274|       |        // rule 4 and 5a
 1275|      0|        if (sourceType.isVector()) {
  ------------------
  |  Branch (1275:13): [True: 0, False: 0]
  ------------------
 1276|       |            // rule 4
 1277|      0|            if (type.isVector())
  ------------------
  |  Branch (1277:17): [True: 0, False: 0]
  ------------------
 1278|      0|            {
 1279|      0|                if (sourceType.getVectorSize() > type.getVectorSize())
  ------------------
  |  Branch (1279:21): [True: 0, False: 0]
  ------------------
 1280|      0|                    return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 1281|       |            // rule 5a
 1282|      0|            } else if (type.isMatrix()) {
  ------------------
  |  Branch (1282:24): [True: 0, False: 0]
  ------------------
 1283|      0|                if (sourceType.getVectorSize() == 4 && type.getMatrixCols() == 2 && type.getMatrixRows() == 2)
  ------------------
  |  Branch (1283:21): [True: 0, False: 0]
  |  Branch (1283:56): [True: 0, False: 0]
  |  Branch (1283:85): [True: 0, False: 0]
  ------------------
 1284|      0|                    return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 1285|      0|            }
 1286|      0|        }
 1287|      0|    }
 1288|       |
 1289|       |    // scalar -> vector or vec1 -> vector or
 1290|       |    // vector -> scalar or
 1291|       |    // bigger vector -> smaller vector
 1292|      0|    if ((node->getType().isScalarOrVec1() && type.isVector()) ||
  ------------------
  |  Branch (1292:10): [True: 0, False: 0]
  |  Branch (1292:46): [True: 0, False: 0]
  ------------------
 1293|      0|        (node->getType().isVector() && type.isScalar()) ||
  ------------------
  |  Branch (1293:10): [True: 0, False: 0]
  |  Branch (1293:40): [True: 0, False: 0]
  ------------------
 1294|      0|        (node->isVector() && type.isVector() && node->getVectorSize() > type.getVectorSize()))
  ------------------
  |  Branch (1294:10): [True: 0, False: 0]
  |  Branch (1294:30): [True: 0, False: 0]
  |  Branch (1294:49): [True: 0, False: 0]
  ------------------
 1295|      0|        return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 1296|       |
 1297|      0|    return node;
 1298|      0|}
_ZNK7glslang13TIntermediate19isIntegralPromotionENS_10TBasicTypeES1_:
 1301|      1|{
 1302|       |    // integral promotions
 1303|      1|    if (to == EbtInt) {
  ------------------
  |  Branch (1303:9): [True: 1, False: 0]
  ------------------
 1304|      1|        switch(from) {
 1305|      0|        case EbtInt8:
  ------------------
  |  Branch (1305:9): [True: 0, False: 1]
  ------------------
 1306|      0|        case EbtInt16:
  ------------------
  |  Branch (1306:9): [True: 0, False: 1]
  ------------------
 1307|      0|        case EbtUint8:
  ------------------
  |  Branch (1307:9): [True: 0, False: 1]
  ------------------
 1308|      0|        case EbtUint16:
  ------------------
  |  Branch (1308:9): [True: 0, False: 1]
  ------------------
 1309|      0|            return true;
 1310|      1|        default:
  ------------------
  |  Branch (1310:9): [True: 1, False: 0]
  ------------------
 1311|      1|            break;
 1312|      1|        }
 1313|      1|    }
 1314|      1|    return false;
 1315|      1|}
_ZNK7glslang13TIntermediate13isFPPromotionENS_10TBasicTypeES1_:
 1318|      1|{
 1319|       |    // floating-point promotions
 1320|      1|    if (to == EbtDouble) {
  ------------------
  |  Branch (1320:9): [True: 0, False: 1]
  ------------------
 1321|      0|        switch(from) {
 1322|      0|        case EbtBFloat16:
  ------------------
  |  Branch (1322:9): [True: 0, False: 0]
  ------------------
 1323|      0|        case EbtFloatE5M2:
  ------------------
  |  Branch (1323:9): [True: 0, False: 0]
  ------------------
 1324|      0|        case EbtFloatE4M3:
  ------------------
  |  Branch (1324:9): [True: 0, False: 0]
  ------------------
 1325|      0|        case EbtFloatE2M1:
  ------------------
  |  Branch (1325:9): [True: 0, False: 0]
  ------------------
 1326|      0|        case EbtFloatE3M2:
  ------------------
  |  Branch (1326:9): [True: 0, False: 0]
  ------------------
 1327|      0|        case EbtFloatE2M3:
  ------------------
  |  Branch (1327:9): [True: 0, False: 0]
  ------------------
 1328|      0|        case EbtFloatMXINT8:
  ------------------
  |  Branch (1328:9): [True: 0, False: 0]
  ------------------
 1329|      0|        case EbtFloat16:
  ------------------
  |  Branch (1329:9): [True: 0, False: 0]
  ------------------
 1330|      0|        case EbtFloat:
  ------------------
  |  Branch (1330:9): [True: 0, False: 0]
  ------------------
 1331|      0|            return true;
 1332|      0|        default:
  ------------------
  |  Branch (1332:9): [True: 0, False: 0]
  ------------------
 1333|      0|            break;
 1334|      0|        }
 1335|      0|    }
 1336|      1|    return false;
 1337|      1|}
_ZNK7glslang13TIntermediate20isIntegralConversionENS_10TBasicTypeES1_:
 1340|      1|{
 1341|      1|    switch (from) {
 1342|      0|    case EbtInt:
  ------------------
  |  Branch (1342:5): [True: 0, False: 1]
  ------------------
 1343|      0|        switch(to) {
 1344|      0|        case EbtUint:
  ------------------
  |  Branch (1344:9): [True: 0, False: 0]
  ------------------
 1345|      0|            return version >= 400 || getSource() == EShSourceHlsl;
  ------------------
  |  Branch (1345:20): [True: 0, False: 0]
  |  Branch (1345:38): [True: 0, False: 0]
  ------------------
 1346|      0|        case EbtInt64:
  ------------------
  |  Branch (1346:9): [True: 0, False: 0]
  ------------------
 1347|      0|        case EbtUint64:
  ------------------
  |  Branch (1347:9): [True: 0, False: 0]
  ------------------
 1348|      0|            return true;
 1349|      0|        default:
  ------------------
  |  Branch (1349:9): [True: 0, False: 0]
  ------------------
 1350|      0|            break;
 1351|      0|        }
 1352|      0|        break;
 1353|      0|    case EbtUint:
  ------------------
  |  Branch (1353:5): [True: 0, False: 1]
  ------------------
 1354|      0|        switch(to) {
 1355|      0|        case EbtInt64:
  ------------------
  |  Branch (1355:9): [True: 0, False: 0]
  ------------------
 1356|      0|        case EbtUint64:
  ------------------
  |  Branch (1356:9): [True: 0, False: 0]
  ------------------
 1357|      0|            return true;
 1358|      0|        default:
  ------------------
  |  Branch (1358:9): [True: 0, False: 0]
  ------------------
 1359|      0|            break;
 1360|      0|        }
 1361|      0|        break;
 1362|      0|    case EbtInt8:
  ------------------
  |  Branch (1362:5): [True: 0, False: 1]
  ------------------
 1363|      0|        switch (to) {
 1364|      0|        case EbtUint8:
  ------------------
  |  Branch (1364:9): [True: 0, False: 0]
  ------------------
 1365|      0|        case EbtInt16:
  ------------------
  |  Branch (1365:9): [True: 0, False: 0]
  ------------------
 1366|      0|        case EbtUint16:
  ------------------
  |  Branch (1366:9): [True: 0, False: 0]
  ------------------
 1367|      0|        case EbtUint:
  ------------------
  |  Branch (1367:9): [True: 0, False: 0]
  ------------------
 1368|      0|        case EbtInt64:
  ------------------
  |  Branch (1368:9): [True: 0, False: 0]
  ------------------
 1369|      0|        case EbtUint64:
  ------------------
  |  Branch (1369:9): [True: 0, False: 0]
  ------------------
 1370|      0|            return true;
 1371|      0|        default:
  ------------------
  |  Branch (1371:9): [True: 0, False: 0]
  ------------------
 1372|      0|            break;
 1373|      0|        }
 1374|      0|        break;
 1375|      0|    case EbtUint8:
  ------------------
  |  Branch (1375:5): [True: 0, False: 1]
  ------------------
 1376|      0|        switch (to) {
 1377|      0|        case EbtInt16:
  ------------------
  |  Branch (1377:9): [True: 0, False: 0]
  ------------------
 1378|      0|        case EbtUint16:
  ------------------
  |  Branch (1378:9): [True: 0, False: 0]
  ------------------
 1379|      0|        case EbtUint:
  ------------------
  |  Branch (1379:9): [True: 0, False: 0]
  ------------------
 1380|      0|        case EbtInt64:
  ------------------
  |  Branch (1380:9): [True: 0, False: 0]
  ------------------
 1381|      0|        case EbtUint64:
  ------------------
  |  Branch (1381:9): [True: 0, False: 0]
  ------------------
 1382|      0|            return true;
 1383|      0|        default:
  ------------------
  |  Branch (1383:9): [True: 0, False: 0]
  ------------------
 1384|      0|            break;
 1385|      0|        }
 1386|      0|        break;
 1387|      0|    case EbtInt16:
  ------------------
  |  Branch (1387:5): [True: 0, False: 1]
  ------------------
 1388|      0|        switch(to) {
 1389|      0|        case EbtUint16:
  ------------------
  |  Branch (1389:9): [True: 0, False: 0]
  ------------------
 1390|      0|        case EbtUint:
  ------------------
  |  Branch (1390:9): [True: 0, False: 0]
  ------------------
 1391|      0|        case EbtInt64:
  ------------------
  |  Branch (1391:9): [True: 0, False: 0]
  ------------------
 1392|      0|        case EbtUint64:
  ------------------
  |  Branch (1392:9): [True: 0, False: 0]
  ------------------
 1393|      0|            return true;
 1394|      0|        default:
  ------------------
  |  Branch (1394:9): [True: 0, False: 0]
  ------------------
 1395|      0|            break;
 1396|      0|        }
 1397|      0|        break;
 1398|      0|    case EbtUint16:
  ------------------
  |  Branch (1398:5): [True: 0, False: 1]
  ------------------
 1399|      0|        switch(to) {
 1400|      0|        case EbtUint:
  ------------------
  |  Branch (1400:9): [True: 0, False: 0]
  ------------------
 1401|      0|        case EbtInt64:
  ------------------
  |  Branch (1401:9): [True: 0, False: 0]
  ------------------
 1402|      0|        case EbtUint64:
  ------------------
  |  Branch (1402:9): [True: 0, False: 0]
  ------------------
 1403|      0|            return true;
 1404|      0|        default:
  ------------------
  |  Branch (1404:9): [True: 0, False: 0]
  ------------------
 1405|      0|            break;
 1406|      0|        }
 1407|      0|        break;
 1408|      0|    case EbtInt64:
  ------------------
  |  Branch (1408:5): [True: 0, False: 1]
  ------------------
 1409|      0|        if (to == EbtUint64) {
  ------------------
  |  Branch (1409:13): [True: 0, False: 0]
  ------------------
 1410|      0|            return true;
 1411|      0|        }
 1412|      0|        break;
 1413|      1|    default:
  ------------------
  |  Branch (1413:5): [True: 1, False: 0]
  ------------------
 1414|      1|        break;
 1415|      1|    }
 1416|      1|    return false;
 1417|      1|}
_ZNK7glslang13TIntermediate14isFPConversionENS_10TBasicTypeES1_:
 1420|      1|{
 1421|      1|    if (to == EbtFloat && (from == EbtFloat16 || from == EbtBFloat16 || from == EbtFloatE5M2 || from == EbtFloatE4M3 ||
  ------------------
  |  Branch (1421:9): [True: 0, False: 1]
  |  Branch (1421:28): [True: 0, False: 0]
  |  Branch (1421:50): [True: 0, False: 0]
  |  Branch (1421:73): [True: 0, False: 0]
  |  Branch (1421:97): [True: 0, False: 0]
  ------------------
 1422|      0|                           from == EbtFloatE2M1 || from == EbtFloatE3M2 || from == EbtFloatE2M3 || from == EbtFloatMXINT8)) {
  ------------------
  |  Branch (1422:28): [True: 0, False: 0]
  |  Branch (1422:52): [True: 0, False: 0]
  |  Branch (1422:76): [True: 0, False: 0]
  |  Branch (1422:100): [True: 0, False: 0]
  ------------------
 1423|      0|        return true;
 1424|      1|    } else {
 1425|      1|        return false;
 1426|      1|    }
 1427|      1|}
_ZNK7glslang13TIntermediate22isFPIntegralConversionENS_10TBasicTypeES1_:
 1430|      1|{
 1431|      1|    switch (from) {
 1432|      0|    case EbtInt:
  ------------------
  |  Branch (1432:5): [True: 0, False: 1]
  ------------------
 1433|      0|    case EbtUint:
  ------------------
  |  Branch (1433:5): [True: 0, False: 1]
  ------------------
 1434|      0|        switch(to) {
 1435|      0|        case EbtFloat:
  ------------------
  |  Branch (1435:9): [True: 0, False: 0]
  ------------------
 1436|      0|        case EbtDouble:
  ------------------
  |  Branch (1436:9): [True: 0, False: 0]
  ------------------
 1437|      0|            return true;
 1438|      0|        default:
  ------------------
  |  Branch (1438:9): [True: 0, False: 0]
  ------------------
 1439|      0|            break;
 1440|      0|        }
 1441|      0|        break;
 1442|      0|    case EbtInt8:
  ------------------
  |  Branch (1442:5): [True: 0, False: 1]
  ------------------
 1443|      0|    case EbtUint8:
  ------------------
  |  Branch (1443:5): [True: 0, False: 1]
  ------------------
 1444|      0|    case EbtInt16:
  ------------------
  |  Branch (1444:5): [True: 0, False: 1]
  ------------------
 1445|      0|    case EbtUint16:
  ------------------
  |  Branch (1445:5): [True: 0, False: 1]
  ------------------
 1446|      0|        switch (to) {
 1447|      0|        case EbtFloat16:
  ------------------
  |  Branch (1447:9): [True: 0, False: 0]
  ------------------
 1448|      0|        case EbtFloat:
  ------------------
  |  Branch (1448:9): [True: 0, False: 0]
  ------------------
 1449|      0|        case EbtDouble:
  ------------------
  |  Branch (1449:9): [True: 0, False: 0]
  ------------------
 1450|      0|            return true;
 1451|      0|        default:
  ------------------
  |  Branch (1451:9): [True: 0, False: 0]
  ------------------
 1452|      0|            break;
 1453|      0|        }
 1454|      0|        break;
 1455|      0|    case EbtInt64:
  ------------------
  |  Branch (1455:5): [True: 0, False: 1]
  ------------------
 1456|      0|    case EbtUint64:
  ------------------
  |  Branch (1456:5): [True: 0, False: 1]
  ------------------
 1457|      0|        if (to == EbtDouble) {
  ------------------
  |  Branch (1457:13): [True: 0, False: 0]
  ------------------
 1458|      0|            return true;
 1459|      0|        }
 1460|      0|        break;
 1461|      1|    default:
  ------------------
  |  Branch (1461:5): [True: 1, False: 0]
  ------------------
 1462|      1|        break;
 1463|      1|    }
 1464|      1|    return false;
 1465|      1|}
_ZNK7glslang13TIntermediate20canImplicitlyPromoteENS_10TBasicTypeES1_NS_9TOperatorE:
 1472|     49|{
 1473|     49|    if ((isEsProfile() && version < 310 ) || version == 110)
  ------------------
  |  Branch (1473:10): [True: 1, False: 48]
  |  Branch (1473:27): [True: 0, False: 1]
  |  Branch (1473:46): [True: 0, False: 49]
  ------------------
 1474|      0|        return false;
 1475|       |
 1476|     49|    if (from == to)
  ------------------
  |  Branch (1476:9): [True: 0, False: 49]
  ------------------
 1477|      0|        return true;
 1478|       |
 1479|       |    // TODO: Move more policies into language-specific handlers.
 1480|       |    // Some languages allow more general (or potentially, more specific) conversions under some conditions.
 1481|     49|    if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (1481:9): [True: 48, False: 1]
  ------------------
 1482|     48|        const bool fromConvertable = (from == EbtFloat || from == EbtDouble || from == EbtInt || from == EbtUint || from == EbtBool);
  ------------------
  |  Branch (1482:39): [True: 0, False: 48]
  |  Branch (1482:59): [True: 0, False: 48]
  |  Branch (1482:80): [True: 27, False: 21]
  |  Branch (1482:98): [True: 15, False: 6]
  |  Branch (1482:117): [True: 6, False: 0]
  ------------------
 1483|     48|        const bool toConvertable = (to == EbtFloat || to == EbtDouble || to == EbtInt || to == EbtUint || to == EbtBool);
  ------------------
  |  Branch (1483:37): [True: 0, False: 48]
  |  Branch (1483:55): [True: 0, False: 48]
  |  Branch (1483:74): [True: 15, False: 33]
  |  Branch (1483:90): [True: 15, False: 18]
  |  Branch (1483:107): [True: 18, False: 0]
  ------------------
 1484|       |
 1485|     48|        if (fromConvertable && toConvertable) {
  ------------------
  |  Branch (1485:13): [True: 48, False: 0]
  |  Branch (1485:32): [True: 48, False: 0]
  ------------------
 1486|     48|            switch (op) {
 1487|      0|            case EOpAndAssign:               // assignments can perform arbitrary conversions
  ------------------
  |  Branch (1487:13): [True: 0, False: 48]
  ------------------
 1488|      0|            case EOpInclusiveOrAssign:       // ...
  ------------------
  |  Branch (1488:13): [True: 0, False: 48]
  ------------------
 1489|      0|            case EOpExclusiveOrAssign:       // ...
  ------------------
  |  Branch (1489:13): [True: 0, False: 48]
  ------------------
 1490|      0|            case EOpAssign:                  // ...
  ------------------
  |  Branch (1490:13): [True: 0, False: 48]
  ------------------
 1491|      0|            case EOpAddAssign:               // ...
  ------------------
  |  Branch (1491:13): [True: 0, False: 48]
  ------------------
 1492|      0|            case EOpSubAssign:               // ...
  ------------------
  |  Branch (1492:13): [True: 0, False: 48]
  ------------------
 1493|      0|            case EOpMulAssign:               // ...
  ------------------
  |  Branch (1493:13): [True: 0, False: 48]
  ------------------
 1494|      0|            case EOpVectorTimesScalarAssign: // ...
  ------------------
  |  Branch (1494:13): [True: 0, False: 48]
  ------------------
 1495|      0|            case EOpMatrixTimesScalarAssign: // ...
  ------------------
  |  Branch (1495:13): [True: 0, False: 48]
  ------------------
 1496|      0|            case EOpDivAssign:               // ...
  ------------------
  |  Branch (1496:13): [True: 0, False: 48]
  ------------------
 1497|      0|            case EOpModAssign:               // ...
  ------------------
  |  Branch (1497:13): [True: 0, False: 48]
  ------------------
 1498|      0|            case EOpReturn:                  // function returns can also perform arbitrary conversions
  ------------------
  |  Branch (1498:13): [True: 0, False: 48]
  ------------------
 1499|      0|            case EOpFunctionCall:            // conversion of a calling parameter
  ------------------
  |  Branch (1499:13): [True: 0, False: 48]
  ------------------
 1500|     12|            case EOpLogicalNot:
  ------------------
  |  Branch (1500:13): [True: 12, False: 36]
  ------------------
 1501|     12|            case EOpLogicalAnd:
  ------------------
  |  Branch (1501:13): [True: 0, False: 48]
  ------------------
 1502|     12|            case EOpLogicalOr:
  ------------------
  |  Branch (1502:13): [True: 0, False: 48]
  ------------------
 1503|     12|            case EOpLogicalXor:
  ------------------
  |  Branch (1503:13): [True: 0, False: 48]
  ------------------
 1504|     12|            case EOpConstructStruct:
  ------------------
  |  Branch (1504:13): [True: 0, False: 48]
  ------------------
 1505|     12|                return true;
 1506|     36|            default:
  ------------------
  |  Branch (1506:13): [True: 36, False: 12]
  ------------------
 1507|     36|                break;
 1508|     48|            }
 1509|     48|        }
 1510|     48|    }
 1511|       |
 1512|     37|    if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (1512:9): [True: 36, False: 1]
  ------------------
 1513|       |        // HLSL
 1514|     36|        if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
  ------------------
  |  Branch (1514:13): [True: 6, False: 30]
  |  Branch (1514:33): [True: 3, False: 3]
  |  Branch (1514:49): [True: 3, False: 0]
  |  Branch (1514:66): [True: 0, False: 0]
  ------------------
 1515|      6|            return true;
 1516|     36|    } else {
 1517|       |        // GLSL
 1518|      1|        if (isIntegralPromotion(from, to) ||
  ------------------
  |  Branch (1518:13): [True: 0, False: 1]
  ------------------
 1519|      1|            isFPPromotion(from, to) ||
  ------------------
  |  Branch (1519:13): [True: 0, False: 1]
  ------------------
 1520|      1|            isIntegralConversion(from, to) ||
  ------------------
  |  Branch (1520:13): [True: 0, False: 1]
  ------------------
 1521|      1|            isFPConversion(from, to) ||
  ------------------
  |  Branch (1521:13): [True: 0, False: 1]
  ------------------
 1522|      1|            isFPIntegralConversion(from, to)) {
  ------------------
  |  Branch (1522:13): [True: 0, False: 1]
  ------------------
 1523|       |
 1524|      0|            if (numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1524:17): [True: 0, False: 0]
  ------------------
 1525|      0|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8) ||
  ------------------
  |  Branch (1525:17): [True: 0, False: 0]
  ------------------
 1526|      0|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16) ||
  ------------------
  |  Branch (1526:17): [True: 0, False: 0]
  ------------------
 1527|      0|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int32) ||
  ------------------
  |  Branch (1527:17): [True: 0, False: 0]
  ------------------
 1528|      0|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int64) ||
  ------------------
  |  Branch (1528:17): [True: 0, False: 0]
  ------------------
 1529|      0|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16) ||
  ------------------
  |  Branch (1529:17): [True: 0, False: 0]
  ------------------
 1530|      0|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float32) ||
  ------------------
  |  Branch (1530:17): [True: 0, False: 0]
  ------------------
 1531|      0|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float64)) {
  ------------------
  |  Branch (1531:17): [True: 0, False: 0]
  ------------------
 1532|      0|                return true;
 1533|      0|            }
 1534|      0|        }
 1535|      1|    }
 1536|       |
 1537|     31|    if (isEsProfile()) {
  ------------------
  |  Branch (1537:9): [True: 1, False: 30]
  ------------------
 1538|      1|        switch (to) {
 1539|      0|            case EbtFloat:
  ------------------
  |  Branch (1539:13): [True: 0, False: 1]
  ------------------
 1540|      0|                switch (from) {
 1541|      0|                case EbtInt:
  ------------------
  |  Branch (1541:17): [True: 0, False: 0]
  ------------------
 1542|      0|                case EbtUint:
  ------------------
  |  Branch (1542:17): [True: 0, False: 0]
  ------------------
 1543|      0|                    return numericFeatures.contains(TNumericFeatures::shader_implicit_conversions);
 1544|      0|                default:
  ------------------
  |  Branch (1544:17): [True: 0, False: 0]
  ------------------
 1545|      0|                    return false;
 1546|      0|                }
 1547|      0|            case EbtUint:
  ------------------
  |  Branch (1547:13): [True: 0, False: 1]
  ------------------
 1548|      0|                switch (from) {
 1549|      0|                case EbtInt:
  ------------------
  |  Branch (1549:17): [True: 0, False: 0]
  ------------------
 1550|      0|                    return numericFeatures.contains(TNumericFeatures::shader_implicit_conversions);
 1551|      0|                default:
  ------------------
  |  Branch (1551:17): [True: 0, False: 0]
  ------------------
 1552|      0|                    return false;
 1553|      0|                }
 1554|      1|            default:
  ------------------
  |  Branch (1554:13): [True: 1, False: 0]
  ------------------
 1555|      1|                return false;
 1556|      1|        }        
 1557|     30|    } else {
 1558|     30|        switch (to) {
 1559|      0|        case EbtDouble:
  ------------------
  |  Branch (1559:9): [True: 0, False: 30]
  ------------------
 1560|      0|            switch (from) {
 1561|      0|            case EbtInt:
  ------------------
  |  Branch (1561:13): [True: 0, False: 0]
  ------------------
 1562|      0|            case EbtUint:
  ------------------
  |  Branch (1562:13): [True: 0, False: 0]
  ------------------
 1563|      0|            case EbtInt64:
  ------------------
  |  Branch (1563:13): [True: 0, False: 0]
  ------------------
 1564|      0|            case EbtUint64:
  ------------------
  |  Branch (1564:13): [True: 0, False: 0]
  ------------------
 1565|      0|            case EbtFloat:
  ------------------
  |  Branch (1565:13): [True: 0, False: 0]
  ------------------
 1566|      0|                return version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64);
  ------------------
  |  Branch (1566:24): [True: 0, False: 0]
  |  Branch (1566:42): [True: 0, False: 0]
  ------------------
 1567|      0|            case EbtInt16:
  ------------------
  |  Branch (1567:13): [True: 0, False: 0]
  ------------------
 1568|      0|            case EbtUint16:
  ------------------
  |  Branch (1568:13): [True: 0, False: 0]
  ------------------
 1569|      0|                return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) &&
  ------------------
  |  Branch (1569:25): [True: 0, False: 0]
  |  Branch (1569:43): [True: 0, False: 0]
  ------------------
 1570|      0|                                         (numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || 
  ------------------
  |  Branch (1570:43): [True: 0, False: 0]
  ------------------
 1571|      0|                                          numericFeatures.contains(TNumericFeatures::gpu_shader_int16));
  ------------------
  |  Branch (1571:43): [True: 0, False: 0]
  ------------------
 1572|      0|            case EbtFloat16:
  ------------------
  |  Branch (1572:13): [True: 0, False: 0]
  ------------------
 1573|      0|                return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) &&
  ------------------
  |  Branch (1573:25): [True: 0, False: 0]
  |  Branch (1573:43): [True: 0, False: 0]
  ------------------
 1574|      0|                                        (numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || 
  ------------------
  |  Branch (1574:42): [True: 0, False: 0]
  ------------------
 1575|      0|                                        numericFeatures.contains(TNumericFeatures::gpu_shader_half_float));
  ------------------
  |  Branch (1575:41): [True: 0, False: 0]
  ------------------
 1576|      0|            case EbtBFloat16:
  ------------------
  |  Branch (1576:13): [True: 0, False: 0]
  ------------------
 1577|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1577:13): [True: 0, False: 0]
  ------------------
 1578|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1578:13): [True: 0, False: 0]
  ------------------
 1579|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (1579:13): [True: 0, False: 0]
  ------------------
 1580|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (1580:13): [True: 0, False: 0]
  ------------------
 1581|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (1581:13): [True: 0, False: 0]
  ------------------
 1582|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (1582:13): [True: 0, False: 0]
  ------------------
 1583|      0|                return true;
 1584|      0|            case EbtInt8:
  ------------------
  |  Branch (1584:13): [True: 0, False: 0]
  ------------------
 1585|      0|            case EbtUint8:
  ------------------
  |  Branch (1585:13): [True: 0, False: 0]
  ------------------
 1586|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1587|      0|            default:
  ------------------
  |  Branch (1587:13): [True: 0, False: 0]
  ------------------
 1588|      0|                return false;
 1589|      0|           }
 1590|      0|        case EbtFloat:
  ------------------
  |  Branch (1590:9): [True: 0, False: 30]
  ------------------
 1591|      0|            switch (from) {
 1592|      0|            case EbtInt:
  ------------------
  |  Branch (1592:13): [True: 0, False: 0]
  ------------------
 1593|      0|            case EbtUint:
  ------------------
  |  Branch (1593:13): [True: 0, False: 0]
  ------------------
 1594|      0|                 return true;
 1595|      0|            case EbtBool:
  ------------------
  |  Branch (1595:13): [True: 0, False: 0]
  ------------------
 1596|      0|                 return getSource() == EShSourceHlsl;
 1597|      0|            case EbtInt16:
  ------------------
  |  Branch (1597:13): [True: 0, False: 0]
  ------------------
 1598|      0|            case EbtUint16:
  ------------------
  |  Branch (1598:13): [True: 0, False: 0]
  ------------------
 1599|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1599:24): [True: 0, False: 0]
  ------------------
 1600|      0|                       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1600:24): [True: 0, False: 0]
  ------------------
 1601|      0|            case EbtFloat16:
  ------------------
  |  Branch (1601:13): [True: 0, False: 0]
  ------------------
 1602|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) ||
  ------------------
  |  Branch (1602:24): [True: 0, False: 0]
  ------------------
 1603|      0|                    numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) ||
  ------------------
  |  Branch (1603:21): [True: 0, False: 0]
  ------------------
 1604|      0|                    getSource() == EShSourceHlsl;
  ------------------
  |  Branch (1604:21): [True: 0, False: 0]
  ------------------
 1605|      0|            case EbtBFloat16:
  ------------------
  |  Branch (1605:13): [True: 0, False: 0]
  ------------------
 1606|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1606:13): [True: 0, False: 0]
  ------------------
 1607|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1607:13): [True: 0, False: 0]
  ------------------
 1608|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (1608:13): [True: 0, False: 0]
  ------------------
 1609|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (1609:13): [True: 0, False: 0]
  ------------------
 1610|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (1610:13): [True: 0, False: 0]
  ------------------
 1611|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (1611:13): [True: 0, False: 0]
  ------------------
 1612|      0|                return true;
 1613|      0|            case EbtInt8:
  ------------------
  |  Branch (1613:13): [True: 0, False: 0]
  ------------------
 1614|      0|            case EbtUint8:
  ------------------
  |  Branch (1614:13): [True: 0, False: 0]
  ------------------
 1615|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1616|      0|            default:
  ------------------
  |  Branch (1616:13): [True: 0, False: 0]
  ------------------
 1617|      0|                 return false;
 1618|      0|            }
 1619|     12|        case EbtUint:
  ------------------
  |  Branch (1619:9): [True: 12, False: 18]
  ------------------
 1620|     12|            switch (from) {
 1621|     12|            case EbtInt:
  ------------------
  |  Branch (1621:13): [True: 12, False: 0]
  ------------------
 1622|     12|                return version >= 400 || getSource() == EShSourceHlsl || 
  ------------------
  |  Branch (1622:24): [True: 12, False: 0]
  |  Branch (1622:42): [True: 0, False: 0]
  ------------------
 1623|      0|						IsRequestedExtension(E_GL_ARB_gpu_shader5) ||
  ------------------
  |  Branch (1623:7): [True: 0, False: 0]
  ------------------
 1624|      0|						numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1624:7): [True: 0, False: 0]
  ------------------
 1625|      0|            case EbtBool:
  ------------------
  |  Branch (1625:13): [True: 0, False: 12]
  ------------------
 1626|      0|                return getSource() == EShSourceHlsl;
 1627|      0|            case EbtInt16:
  ------------------
  |  Branch (1627:13): [True: 0, False: 12]
  ------------------
 1628|      0|            case EbtUint16:
  ------------------
  |  Branch (1628:13): [True: 0, False: 12]
  ------------------
 1629|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1629:24): [True: 0, False: 0]
  ------------------
 1630|      0|                       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1630:24): [True: 0, False: 0]
  ------------------
 1631|      0|            case EbtInt8:
  ------------------
  |  Branch (1631:13): [True: 0, False: 12]
  ------------------
 1632|      0|            case EbtUint8:
  ------------------
  |  Branch (1632:13): [True: 0, False: 12]
  ------------------
 1633|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1634|      0|            default:
  ------------------
  |  Branch (1634:13): [True: 0, False: 12]
  ------------------
 1635|      0|                return false;
 1636|     12|            }
 1637|     12|        case EbtInt:
  ------------------
  |  Branch (1637:9): [True: 12, False: 18]
  ------------------
 1638|     12|            switch (from) {
 1639|      0|            case EbtBool:
  ------------------
  |  Branch (1639:13): [True: 0, False: 12]
  ------------------
 1640|      0|                return getSource() == EShSourceHlsl;
 1641|      0|            case EbtInt16:
  ------------------
  |  Branch (1641:13): [True: 0, False: 12]
  ------------------
 1642|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1642:24): [True: 0, False: 0]
  ------------------
 1643|      0|                       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1643:24): [True: 0, False: 0]
  ------------------
 1644|      0|            case EbtInt8:
  ------------------
  |  Branch (1644:13): [True: 0, False: 12]
  ------------------
 1645|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1646|     12|            default:
  ------------------
  |  Branch (1646:13): [True: 12, False: 0]
  ------------------
 1647|     12|                return false;
 1648|     12|            }
 1649|      0|        case EbtUint64:
  ------------------
  |  Branch (1649:9): [True: 0, False: 30]
  ------------------
 1650|      0|            switch (from) {
 1651|      0|            case EbtInt:
  ------------------
  |  Branch (1651:13): [True: 0, False: 0]
  ------------------
 1652|      0|            case EbtUint:
  ------------------
  |  Branch (1652:13): [True: 0, False: 0]
  ------------------
 1653|      0|            case EbtInt64:
  ------------------
  |  Branch (1653:13): [True: 0, False: 0]
  ------------------
 1654|      0|                return true;
 1655|      0|            case EbtInt16:
  ------------------
  |  Branch (1655:13): [True: 0, False: 0]
  ------------------
 1656|      0|            case EbtUint16:
  ------------------
  |  Branch (1656:13): [True: 0, False: 0]
  ------------------
 1657|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1657:24): [True: 0, False: 0]
  ------------------
 1658|      0|                	numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1658:18): [True: 0, False: 0]
  ------------------
 1659|      0|            case EbtInt8:
  ------------------
  |  Branch (1659:13): [True: 0, False: 0]
  ------------------
 1660|      0|            case EbtUint8:
  ------------------
  |  Branch (1660:13): [True: 0, False: 0]
  ------------------
 1661|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1662|      0|            default:
  ------------------
  |  Branch (1662:13): [True: 0, False: 0]
  ------------------
 1663|      0|                return false;
 1664|      0|            }
 1665|      0|        case EbtInt64:
  ------------------
  |  Branch (1665:9): [True: 0, False: 30]
  ------------------
 1666|      0|            switch (from) {
 1667|      0|            case EbtInt:
  ------------------
  |  Branch (1667:13): [True: 0, False: 0]
  ------------------
 1668|      0|                return true;
 1669|      0|            case EbtInt8:
  ------------------
  |  Branch (1669:13): [True: 0, False: 0]
  ------------------
 1670|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1671|      0|            case EbtInt16:
  ------------------
  |  Branch (1671:13): [True: 0, False: 0]
  ------------------
 1672|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1672:24): [True: 0, False: 0]
  ------------------
 1673|      0|				       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1673:12): [True: 0, False: 0]
  ------------------
 1674|      0|            default:
  ------------------
  |  Branch (1674:13): [True: 0, False: 0]
  ------------------
 1675|      0|                return false;
 1676|      0|            }
 1677|      0|        case EbtFloat16:
  ------------------
  |  Branch (1677:9): [True: 0, False: 30]
  ------------------
 1678|      0|            switch (from) {
 1679|      0|            case EbtInt16:
  ------------------
  |  Branch (1679:13): [True: 0, False: 0]
  ------------------
 1680|      0|            case EbtUint16:
  ------------------
  |  Branch (1680:13): [True: 0, False: 0]
  ------------------
 1681|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16);
 1682|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1682:13): [True: 0, False: 0]
  ------------------
 1683|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1683:13): [True: 0, False: 0]
  ------------------
 1684|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (1684:13): [True: 0, False: 0]
  ------------------
 1685|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (1685:13): [True: 0, False: 0]
  ------------------
 1686|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (1686:13): [True: 0, False: 0]
  ------------------
 1687|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (1687:13): [True: 0, False: 0]
  ------------------
 1688|      0|                return true;
 1689|      0|            default:
  ------------------
  |  Branch (1689:13): [True: 0, False: 0]
  ------------------
 1690|      0|                break;
 1691|      0|            }
 1692|      0|            return false;
 1693|      0|        case EbtBFloat16:
  ------------------
  |  Branch (1693:9): [True: 0, False: 30]
  ------------------
 1694|      0|            switch (from) {
 1695|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1695:13): [True: 0, False: 0]
  ------------------
 1696|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1696:13): [True: 0, False: 0]
  ------------------
 1697|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (1697:13): [True: 0, False: 0]
  ------------------
 1698|      0|            case EbtFloatE3M2:
  ------------------
  |  Branch (1698:13): [True: 0, False: 0]
  ------------------
 1699|      0|            case EbtFloatE2M3:
  ------------------
  |  Branch (1699:13): [True: 0, False: 0]
  ------------------
 1700|      0|            case EbtFloatMXINT8:
  ------------------
  |  Branch (1700:13): [True: 0, False: 0]
  ------------------
 1701|      0|                return true;
 1702|      0|            default:
  ------------------
  |  Branch (1702:13): [True: 0, False: 0]
  ------------------
 1703|      0|                break;
 1704|      0|            }
 1705|      0|            return false;
 1706|      0|        case EbtFloatE4M3:
  ------------------
  |  Branch (1706:9): [True: 0, False: 30]
  ------------------
 1707|      0|        case EbtFloatE5M2:
  ------------------
  |  Branch (1707:9): [True: 0, False: 30]
  ------------------
 1708|      0|            switch (from) {
 1709|      0|            case EbtFloatE2M1:
  ------------------
  |  Branch (1709:13): [True: 0, False: 0]
  ------------------
 1710|      0|                return true;
 1711|      0|            default:
  ------------------
  |  Branch (1711:13): [True: 0, False: 0]
  ------------------
 1712|      0|                break;
 1713|      0|            }
 1714|      0|            return false;
 1715|      0|        case EbtUint16:
  ------------------
  |  Branch (1715:9): [True: 0, False: 30]
  ------------------
 1716|      0|            switch (from) {
 1717|      0|            case EbtInt16:
  ------------------
  |  Branch (1717:13): [True: 0, False: 0]
  ------------------
 1718|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16);
 1719|      0|            default:
  ------------------
  |  Branch (1719:13): [True: 0, False: 0]
  ------------------
 1720|      0|                break;
 1721|      0|            }
 1722|      0|            return false;
 1723|      6|        default:
  ------------------
  |  Branch (1723:9): [True: 6, False: 24]
  ------------------
 1724|      6|            return false;
 1725|     30|        }
 1726|     30|    }
 1727|       |
 1728|      0|    return false;
 1729|     31|}
_ZNK7glslang13TIntermediate28getConversionDestinationTypeENS_10TBasicTypeES1_NS_9TOperatorE:
 1837|     18|{
 1838|     18|    TBasicType res0 = EbtNumTypes;
 1839|     18|    TBasicType res1 = EbtNumTypes;
 1840|       |
 1841|     18|    if ((isEsProfile() && 
  ------------------
  |  Branch (1841:10): [True: 0, False: 18]
  ------------------
 1842|      0|        (version < 310 || !numericFeatures.contains(TNumericFeatures::shader_implicit_conversions))) || 
  ------------------
  |  Branch (1842:10): [True: 0, False: 0]
  |  Branch (1842:27): [True: 0, False: 0]
  ------------------
 1843|     18|        version == 110)
  ------------------
  |  Branch (1843:9): [True: 0, False: 18]
  ------------------
 1844|      0|        return std::make_tuple(res0, res1);
 1845|       |
 1846|     18|    if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (1846:9): [True: 18, False: 0]
  ------------------
 1847|     18|        if (canImplicitlyPromote(type1, type0, op)) {
  ------------------
  |  Branch (1847:13): [True: 0, False: 18]
  ------------------
 1848|      0|            res0 = type0;
 1849|      0|            res1 = type0;
 1850|     18|        } else if (canImplicitlyPromote(type0, type1, op)) {
  ------------------
  |  Branch (1850:20): [True: 18, False: 0]
  ------------------
 1851|     18|            res0 = type1;
 1852|     18|            res1 = type1;
 1853|     18|        }
 1854|     18|        return std::make_tuple(res0, res1);
 1855|     18|    }
 1856|       |
 1857|      0|    if ((type0 == EbtDouble && canImplicitlyPromote(type1, EbtDouble, op)) ||
  ------------------
  |  Branch (1857:10): [True: 0, False: 0]
  |  Branch (1857:32): [True: 0, False: 0]
  ------------------
 1858|      0|        (type1 == EbtDouble && canImplicitlyPromote(type0, EbtDouble, op)) ) {
  ------------------
  |  Branch (1858:10): [True: 0, False: 0]
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|        res0 = EbtDouble;
 1860|      0|        res1 = EbtDouble;
 1861|      0|    } else if ((type0 == EbtFloat && canImplicitlyPromote(type1, EbtFloat, op)) ||
  ------------------
  |  Branch (1861:17): [True: 0, False: 0]
  |  Branch (1861:38): [True: 0, False: 0]
  ------------------
 1862|      0|               (type1 == EbtFloat && canImplicitlyPromote(type0, EbtFloat, op)) ) {
  ------------------
  |  Branch (1862:17): [True: 0, False: 0]
  |  Branch (1862:38): [True: 0, False: 0]
  ------------------
 1863|      0|        res0 = EbtFloat;
 1864|      0|        res1 = EbtFloat;
 1865|      0|    } else if ((type0 == EbtFloat16 && canImplicitlyPromote(type1, EbtFloat16, op)) ||
  ------------------
  |  Branch (1865:17): [True: 0, False: 0]
  |  Branch (1865:40): [True: 0, False: 0]
  ------------------
 1866|      0|               (type1 == EbtFloat16 && canImplicitlyPromote(type0, EbtFloat16, op)) ) {
  ------------------
  |  Branch (1866:17): [True: 0, False: 0]
  |  Branch (1866:40): [True: 0, False: 0]
  ------------------
 1867|      0|        res0 = EbtFloat16;
 1868|      0|        res1 = EbtFloat16;
 1869|      0|    } else if ((type0 == EbtBFloat16 && canImplicitlyPromote(type1, EbtBFloat16, op)) ||
  ------------------
  |  Branch (1869:17): [True: 0, False: 0]
  |  Branch (1869:41): [True: 0, False: 0]
  ------------------
 1870|      0|               (type1 == EbtBFloat16 && canImplicitlyPromote(type0, EbtBFloat16, op)) ) {
  ------------------
  |  Branch (1870:17): [True: 0, False: 0]
  |  Branch (1870:41): [True: 0, False: 0]
  ------------------
 1871|      0|        res0 = EbtBFloat16;
 1872|      0|        res1 = EbtBFloat16;
 1873|      0|    } else if (isTypeInt(type0) && isTypeInt(type1) &&
  ------------------
  |  Branch (1873:16): [True: 0, False: 0]
  |  Branch (1873:36): [True: 0, False: 0]
  ------------------
 1874|      0|               (canImplicitlyPromote(type0, type1, op) || canImplicitlyPromote(type1, type0, op))) {
  ------------------
  |  Branch (1874:17): [True: 0, False: 0]
  |  Branch (1874:59): [True: 0, False: 0]
  ------------------
 1875|      0|        if ((isTypeSignedInt(type0) && isTypeSignedInt(type1)) ||
  ------------------
  |  Branch (1875:14): [True: 0, False: 0]
  |  Branch (1875:40): [True: 0, False: 0]
  ------------------
 1876|      0|            (isTypeUnsignedInt(type0) && isTypeUnsignedInt(type1))) {
  ------------------
  |  Branch (1876:14): [True: 0, False: 0]
  |  Branch (1876:42): [True: 0, False: 0]
  ------------------
 1877|      0|            if (getTypeRank(type0) < getTypeRank(type1)) {
  ------------------
  |  Branch (1877:17): [True: 0, False: 0]
  ------------------
 1878|      0|                res0 = type1;
 1879|      0|                res1 = type1;
 1880|      0|            } else {
 1881|      0|                res0 = type0;
 1882|      0|                res1 = type0;
 1883|      0|            }
 1884|      0|        } else if (isTypeUnsignedInt(type0) && (getTypeRank(type0) > getTypeRank(type1))) {
  ------------------
  |  Branch (1884:20): [True: 0, False: 0]
  |  Branch (1884:48): [True: 0, False: 0]
  ------------------
 1885|      0|            res0 = type0;
 1886|      0|            res1 = type0;
 1887|      0|        } else if (isTypeUnsignedInt(type1) && (getTypeRank(type1) > getTypeRank(type0))) {
  ------------------
  |  Branch (1887:20): [True: 0, False: 0]
  |  Branch (1887:48): [True: 0, False: 0]
  ------------------
 1888|      0|            res0 = type1;
 1889|      0|            res1 = type1;
 1890|      0|        } else if (isTypeSignedInt(type0)) {
  ------------------
  |  Branch (1890:20): [True: 0, False: 0]
  ------------------
 1891|      0|            if (canSignedIntTypeRepresentAllUnsignedValues(type0, type1)) {
  ------------------
  |  Branch (1891:17): [True: 0, False: 0]
  ------------------
 1892|      0|                res0 = type0;
 1893|      0|                res1 = type0;
 1894|      0|            } else {
 1895|      0|                res0 = getCorrespondingUnsignedType(type0);
 1896|      0|                res1 = getCorrespondingUnsignedType(type0);
 1897|      0|            }
 1898|      0|        } else if (isTypeSignedInt(type1)) {
  ------------------
  |  Branch (1898:20): [True: 0, False: 0]
  ------------------
 1899|      0|            if (canSignedIntTypeRepresentAllUnsignedValues(type1, type0)) {
  ------------------
  |  Branch (1899:17): [True: 0, False: 0]
  ------------------
 1900|      0|                res0 = type1;
 1901|      0|                res1 = type1;
 1902|      0|            } else {
 1903|      0|                res0 = getCorrespondingUnsignedType(type1);
 1904|      0|                res1 = getCorrespondingUnsignedType(type1);
 1905|      0|            }
 1906|      0|        }
 1907|      0|    }
 1908|       |
 1909|      0|    return std::make_tuple(res0, res1);
 1910|     18|}
_ZNK7glslang13TIntermediate22mapTypeToConstructorOpERKNS_5TTypeE:
 1916|  9.16k|{
 1917|  9.16k|    TOperator op = EOpNull;
 1918|       |
 1919|  9.16k|    if (type.getQualifier().isNonUniform())
  ------------------
  |  Branch (1919:9): [True: 0, False: 9.16k]
  ------------------
 1920|      0|        return EOpConstructNonuniform;
 1921|       |
 1922|  9.16k|    if (type.isCoopMatNV())
  ------------------
  |  Branch (1922:9): [True: 0, False: 9.16k]
  ------------------
 1923|      0|        return EOpConstructCooperativeMatrixNV;
 1924|       |
 1925|  9.16k|    if (type.isCoopMatKHR())
  ------------------
  |  Branch (1925:9): [True: 0, False: 9.16k]
  ------------------
 1926|      0|        return EOpConstructCooperativeMatrixKHR;
 1927|       |
 1928|  9.16k|    if (type.isCoopVecOrLongVector())
  ------------------
  |  Branch (1928:9): [True: 0, False: 9.16k]
  ------------------
 1929|      0|        return EOpConstructCooperativeVectorNV;
 1930|       |
 1931|  9.16k|    switch (type.getBasicType()) {
 1932|      0|    case EbtStruct:
  ------------------
  |  Branch (1932:5): [True: 0, False: 9.16k]
  ------------------
 1933|      0|        op = EOpConstructStruct;
 1934|      0|        break;
 1935|      0|    case EbtSampler:
  ------------------
  |  Branch (1935:5): [True: 0, False: 9.16k]
  ------------------
 1936|      0|        if (type.getSampler().isCombined())
  ------------------
  |  Branch (1936:13): [True: 0, False: 0]
  ------------------
 1937|      0|            op = EOpConstructTextureSampler;
 1938|      0|        break;
 1939|      0|    case EbtFloat:
  ------------------
  |  Branch (1939:5): [True: 0, False: 9.16k]
  ------------------
 1940|      0|        if (type.isMatrix()) {
  ------------------
  |  Branch (1940:13): [True: 0, False: 0]
  ------------------
 1941|      0|            switch (type.getMatrixCols()) {
 1942|      0|            case 2:
  ------------------
  |  Branch (1942:13): [True: 0, False: 0]
  ------------------
 1943|      0|                switch (type.getMatrixRows()) {
 1944|      0|                case 2: op = EOpConstructMat2x2; break;
  ------------------
  |  Branch (1944:17): [True: 0, False: 0]
  ------------------
 1945|      0|                case 3: op = EOpConstructMat2x3; break;
  ------------------
  |  Branch (1945:17): [True: 0, False: 0]
  ------------------
 1946|      0|                case 4: op = EOpConstructMat2x4; break;
  ------------------
  |  Branch (1946:17): [True: 0, False: 0]
  ------------------
 1947|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1947:17): [True: 0, False: 0]
  ------------------
 1948|      0|                }
 1949|      0|                break;
 1950|      0|            case 3:
  ------------------
  |  Branch (1950:13): [True: 0, False: 0]
  ------------------
 1951|      0|                switch (type.getMatrixRows()) {
 1952|      0|                case 2: op = EOpConstructMat3x2; break;
  ------------------
  |  Branch (1952:17): [True: 0, False: 0]
  ------------------
 1953|      0|                case 3: op = EOpConstructMat3x3; break;
  ------------------
  |  Branch (1953:17): [True: 0, False: 0]
  ------------------
 1954|      0|                case 4: op = EOpConstructMat3x4; break;
  ------------------
  |  Branch (1954:17): [True: 0, False: 0]
  ------------------
 1955|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1955:17): [True: 0, False: 0]
  ------------------
 1956|      0|                }
 1957|      0|                break;
 1958|      0|            case 4:
  ------------------
  |  Branch (1958:13): [True: 0, False: 0]
  ------------------
 1959|      0|                switch (type.getMatrixRows()) {
 1960|      0|                case 2: op = EOpConstructMat4x2; break;
  ------------------
  |  Branch (1960:17): [True: 0, False: 0]
  ------------------
 1961|      0|                case 3: op = EOpConstructMat4x3; break;
  ------------------
  |  Branch (1961:17): [True: 0, False: 0]
  ------------------
 1962|      0|                case 4: op = EOpConstructMat4x4; break;
  ------------------
  |  Branch (1962:17): [True: 0, False: 0]
  ------------------
 1963|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1963:17): [True: 0, False: 0]
  ------------------
 1964|      0|                }
 1965|      0|                break;
 1966|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (1966:13): [True: 0, False: 0]
  ------------------
 1967|      0|            }
 1968|      0|        } else {
 1969|      0|            switch(type.getVectorSize()) {
 1970|      0|            case 1: op = EOpConstructFloat; break;
  ------------------
  |  Branch (1970:13): [True: 0, False: 0]
  ------------------
 1971|      0|            case 2: op = EOpConstructVec2;  break;
  ------------------
  |  Branch (1971:13): [True: 0, False: 0]
  ------------------
 1972|      0|            case 3: op = EOpConstructVec3;  break;
  ------------------
  |  Branch (1972:13): [True: 0, False: 0]
  ------------------
 1973|      0|            case 4: op = EOpConstructVec4;  break;
  ------------------
  |  Branch (1973:13): [True: 0, False: 0]
  ------------------
 1974|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (1974:13): [True: 0, False: 0]
  ------------------
 1975|      0|            }
 1976|      0|        }
 1977|      0|        break;
 1978|  5.47k|    case EbtInt:
  ------------------
  |  Branch (1978:5): [True: 5.47k, False: 3.68k]
  ------------------
 1979|  5.47k|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (1979:13): [True: 0, False: 5.47k]
  ------------------
 1980|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (1980:21): [True: 0, False: 0]
  ------------------
 1981|      0|            case 2:
  ------------------
  |  Branch (1981:13): [True: 0, False: 0]
  ------------------
 1982|      0|                switch (type.getMatrixRows()) {
 1983|      0|                case 2: op = EOpConstructIMat2x2; break;
  ------------------
  |  Branch (1983:17): [True: 0, False: 0]
  ------------------
 1984|      0|                case 3: op = EOpConstructIMat2x3; break;
  ------------------
  |  Branch (1984:17): [True: 0, False: 0]
  ------------------
 1985|      0|                case 4: op = EOpConstructIMat2x4; break;
  ------------------
  |  Branch (1985:17): [True: 0, False: 0]
  ------------------
 1986|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1986:17): [True: 0, False: 0]
  ------------------
 1987|      0|                }
 1988|      0|                break;
 1989|      0|            case 3:
  ------------------
  |  Branch (1989:13): [True: 0, False: 0]
  ------------------
 1990|      0|                switch (type.getMatrixRows()) {
 1991|      0|                case 2: op = EOpConstructIMat3x2; break;
  ------------------
  |  Branch (1991:17): [True: 0, False: 0]
  ------------------
 1992|      0|                case 3: op = EOpConstructIMat3x3; break;
  ------------------
  |  Branch (1992:17): [True: 0, False: 0]
  ------------------
 1993|      0|                case 4: op = EOpConstructIMat3x4; break;
  ------------------
  |  Branch (1993:17): [True: 0, False: 0]
  ------------------
 1994|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1994:17): [True: 0, False: 0]
  ------------------
 1995|      0|                }
 1996|      0|                break;
 1997|      0|            case 4:
  ------------------
  |  Branch (1997:13): [True: 0, False: 0]
  ------------------
 1998|      0|                switch (type.getMatrixRows()) {
 1999|      0|                case 2: op = EOpConstructIMat4x2; break;
  ------------------
  |  Branch (1999:17): [True: 0, False: 0]
  ------------------
 2000|      0|                case 3: op = EOpConstructIMat4x3; break;
  ------------------
  |  Branch (2000:17): [True: 0, False: 0]
  ------------------
 2001|      0|                case 4: op = EOpConstructIMat4x4; break;
  ------------------
  |  Branch (2001:17): [True: 0, False: 0]
  ------------------
 2002|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2002:17): [True: 0, False: 0]
  ------------------
 2003|      0|                }
 2004|      0|                break;
 2005|      0|            }
 2006|  5.47k|        } else {
 2007|  5.47k|            switch(type.getVectorSize()) {
 2008|    337|            case 1: op = EOpConstructInt;   break;
  ------------------
  |  Branch (2008:13): [True: 337, False: 5.13k]
  ------------------
 2009|      3|            case 2: op = EOpConstructIVec2; break;
  ------------------
  |  Branch (2009:13): [True: 3, False: 5.46k]
  ------------------
 2010|  5.13k|            case 3: op = EOpConstructIVec3; break;
  ------------------
  |  Branch (2010:13): [True: 5.13k, False: 340]
  ------------------
 2011|      0|            case 4: op = EOpConstructIVec4; break;
  ------------------
  |  Branch (2011:13): [True: 0, False: 5.47k]
  ------------------
 2012|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2012:13): [True: 0, False: 5.47k]
  ------------------
 2013|  5.47k|            }
 2014|  5.47k|        }
 2015|  5.47k|        break;
 2016|  5.47k|    case EbtUint:
  ------------------
  |  Branch (2016:5): [True: 3.68k, False: 5.47k]
  ------------------
 2017|  3.68k|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (2017:13): [True: 0, False: 3.68k]
  ------------------
 2018|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (2018:21): [True: 0, False: 0]
  ------------------
 2019|      0|            case 2:
  ------------------
  |  Branch (2019:13): [True: 0, False: 0]
  ------------------
 2020|      0|                switch (type.getMatrixRows()) {
 2021|      0|                case 2: op = EOpConstructUMat2x2; break;
  ------------------
  |  Branch (2021:17): [True: 0, False: 0]
  ------------------
 2022|      0|                case 3: op = EOpConstructUMat2x3; break;
  ------------------
  |  Branch (2022:17): [True: 0, False: 0]
  ------------------
 2023|      0|                case 4: op = EOpConstructUMat2x4; break;
  ------------------
  |  Branch (2023:17): [True: 0, False: 0]
  ------------------
 2024|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2024:17): [True: 0, False: 0]
  ------------------
 2025|      0|                }
 2026|      0|                break;
 2027|      0|            case 3:
  ------------------
  |  Branch (2027:13): [True: 0, False: 0]
  ------------------
 2028|      0|                switch (type.getMatrixRows()) {
 2029|      0|                case 2: op = EOpConstructUMat3x2; break;
  ------------------
  |  Branch (2029:17): [True: 0, False: 0]
  ------------------
 2030|      0|                case 3: op = EOpConstructUMat3x3; break;
  ------------------
  |  Branch (2030:17): [True: 0, False: 0]
  ------------------
 2031|      0|                case 4: op = EOpConstructUMat3x4; break;
  ------------------
  |  Branch (2031:17): [True: 0, False: 0]
  ------------------
 2032|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2032:17): [True: 0, False: 0]
  ------------------
 2033|      0|                }
 2034|      0|                break;
 2035|      0|            case 4:
  ------------------
  |  Branch (2035:13): [True: 0, False: 0]
  ------------------
 2036|      0|                switch (type.getMatrixRows()) {
 2037|      0|                case 2: op = EOpConstructUMat4x2; break;
  ------------------
  |  Branch (2037:17): [True: 0, False: 0]
  ------------------
 2038|      0|                case 3: op = EOpConstructUMat4x3; break;
  ------------------
  |  Branch (2038:17): [True: 0, False: 0]
  ------------------
 2039|      0|                case 4: op = EOpConstructUMat4x4; break;
  ------------------
  |  Branch (2039:17): [True: 0, False: 0]
  ------------------
 2040|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2040:17): [True: 0, False: 0]
  ------------------
 2041|      0|                }
 2042|      0|                break;
 2043|      0|            }
 2044|  3.68k|        } else {
 2045|  3.68k|            switch(type.getVectorSize()) {
 2046|      0|            case 1: op = EOpConstructUint;  break;
  ------------------
  |  Branch (2046:13): [True: 0, False: 3.68k]
  ------------------
 2047|     12|            case 2: op = EOpConstructUVec2; break;
  ------------------
  |  Branch (2047:13): [True: 12, False: 3.67k]
  ------------------
 2048|  3.67k|            case 3: op = EOpConstructUVec3; break;
  ------------------
  |  Branch (2048:13): [True: 3.67k, False: 12]
  ------------------
 2049|      0|            case 4: op = EOpConstructUVec4; break;
  ------------------
  |  Branch (2049:13): [True: 0, False: 3.68k]
  ------------------
 2050|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2050:13): [True: 0, False: 3.68k]
  ------------------
 2051|  3.68k|            }
 2052|  3.68k|        }
 2053|  3.68k|        break;
 2054|  3.68k|    case EbtBool:
  ------------------
  |  Branch (2054:5): [True: 0, False: 9.16k]
  ------------------
 2055|      0|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (2055:13): [True: 0, False: 0]
  ------------------
 2056|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (2056:21): [True: 0, False: 0]
  ------------------
 2057|      0|            case 2:
  ------------------
  |  Branch (2057:13): [True: 0, False: 0]
  ------------------
 2058|      0|                switch (type.getMatrixRows()) {
 2059|      0|                case 2: op = EOpConstructBMat2x2; break;
  ------------------
  |  Branch (2059:17): [True: 0, False: 0]
  ------------------
 2060|      0|                case 3: op = EOpConstructBMat2x3; break;
  ------------------
  |  Branch (2060:17): [True: 0, False: 0]
  ------------------
 2061|      0|                case 4: op = EOpConstructBMat2x4; break;
  ------------------
  |  Branch (2061:17): [True: 0, False: 0]
  ------------------
 2062|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2062:17): [True: 0, False: 0]
  ------------------
 2063|      0|                }
 2064|      0|                break;
 2065|      0|            case 3:
  ------------------
  |  Branch (2065:13): [True: 0, False: 0]
  ------------------
 2066|      0|                switch (type.getMatrixRows()) {
 2067|      0|                case 2: op = EOpConstructBMat3x2; break;
  ------------------
  |  Branch (2067:17): [True: 0, False: 0]
  ------------------
 2068|      0|                case 3: op = EOpConstructBMat3x3; break;
  ------------------
  |  Branch (2068:17): [True: 0, False: 0]
  ------------------
 2069|      0|                case 4: op = EOpConstructBMat3x4; break;
  ------------------
  |  Branch (2069:17): [True: 0, False: 0]
  ------------------
 2070|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2070:17): [True: 0, False: 0]
  ------------------
 2071|      0|                }
 2072|      0|                break;
 2073|      0|            case 4:
  ------------------
  |  Branch (2073:13): [True: 0, False: 0]
  ------------------
 2074|      0|                switch (type.getMatrixRows()) {
 2075|      0|                case 2: op = EOpConstructBMat4x2; break;
  ------------------
  |  Branch (2075:17): [True: 0, False: 0]
  ------------------
 2076|      0|                case 3: op = EOpConstructBMat4x3; break;
  ------------------
  |  Branch (2076:17): [True: 0, False: 0]
  ------------------
 2077|      0|                case 4: op = EOpConstructBMat4x4; break;
  ------------------
  |  Branch (2077:17): [True: 0, False: 0]
  ------------------
 2078|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2078:17): [True: 0, False: 0]
  ------------------
 2079|      0|                }
 2080|      0|                break;
 2081|      0|            }
 2082|      0|        } else {
 2083|      0|            switch(type.getVectorSize()) {
 2084|      0|            case 1:  op = EOpConstructBool;  break;
  ------------------
  |  Branch (2084:13): [True: 0, False: 0]
  ------------------
 2085|      0|            case 2:  op = EOpConstructBVec2; break;
  ------------------
  |  Branch (2085:13): [True: 0, False: 0]
  ------------------
 2086|      0|            case 3:  op = EOpConstructBVec3; break;
  ------------------
  |  Branch (2086:13): [True: 0, False: 0]
  ------------------
 2087|      0|            case 4:  op = EOpConstructBVec4; break;
  ------------------
  |  Branch (2087:13): [True: 0, False: 0]
  ------------------
 2088|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2088:13): [True: 0, False: 0]
  ------------------
 2089|      0|            }
 2090|      0|        }
 2091|      0|        break;
 2092|      0|    case EbtDouble:
  ------------------
  |  Branch (2092:5): [True: 0, False: 9.16k]
  ------------------
 2093|      0|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (2093:13): [True: 0, False: 0]
  ------------------
 2094|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (2094:21): [True: 0, False: 0]
  ------------------
 2095|      0|            case 2:
  ------------------
  |  Branch (2095:13): [True: 0, False: 0]
  ------------------
 2096|      0|                switch (type.getMatrixRows()) {
 2097|      0|                case 2: op = EOpConstructDMat2x2; break;
  ------------------
  |  Branch (2097:17): [True: 0, False: 0]
  ------------------
 2098|      0|                case 3: op = EOpConstructDMat2x3; break;
  ------------------
  |  Branch (2098:17): [True: 0, False: 0]
  ------------------
 2099|      0|                case 4: op = EOpConstructDMat2x4; break;
  ------------------
  |  Branch (2099:17): [True: 0, False: 0]
  ------------------
 2100|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2100:17): [True: 0, False: 0]
  ------------------
 2101|      0|                }
 2102|      0|                break;
 2103|      0|            case 3:
  ------------------
  |  Branch (2103:13): [True: 0, False: 0]
  ------------------
 2104|      0|                switch (type.getMatrixRows()) {
 2105|      0|                case 2: op = EOpConstructDMat3x2; break;
  ------------------
  |  Branch (2105:17): [True: 0, False: 0]
  ------------------
 2106|      0|                case 3: op = EOpConstructDMat3x3; break;
  ------------------
  |  Branch (2106:17): [True: 0, False: 0]
  ------------------
 2107|      0|                case 4: op = EOpConstructDMat3x4; break;
  ------------------
  |  Branch (2107:17): [True: 0, False: 0]
  ------------------
 2108|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2108:17): [True: 0, False: 0]
  ------------------
 2109|      0|                }
 2110|      0|                break;
 2111|      0|            case 4:
  ------------------
  |  Branch (2111:13): [True: 0, False: 0]
  ------------------
 2112|      0|                switch (type.getMatrixRows()) {
 2113|      0|                case 2: op = EOpConstructDMat4x2; break;
  ------------------
  |  Branch (2113:17): [True: 0, False: 0]
  ------------------
 2114|      0|                case 3: op = EOpConstructDMat4x3; break;
  ------------------
  |  Branch (2114:17): [True: 0, False: 0]
  ------------------
 2115|      0|                case 4: op = EOpConstructDMat4x4; break;
  ------------------
  |  Branch (2115:17): [True: 0, False: 0]
  ------------------
 2116|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2116:17): [True: 0, False: 0]
  ------------------
 2117|      0|                }
 2118|      0|                break;
 2119|      0|            }
 2120|      0|        } else {
 2121|      0|            switch(type.getVectorSize()) {
 2122|      0|            case 1: op = EOpConstructDouble; break;
  ------------------
  |  Branch (2122:13): [True: 0, False: 0]
  ------------------
 2123|      0|            case 2: op = EOpConstructDVec2;  break;
  ------------------
  |  Branch (2123:13): [True: 0, False: 0]
  ------------------
 2124|      0|            case 3: op = EOpConstructDVec3;  break;
  ------------------
  |  Branch (2124:13): [True: 0, False: 0]
  ------------------
 2125|      0|            case 4: op = EOpConstructDVec4;  break;
  ------------------
  |  Branch (2125:13): [True: 0, False: 0]
  ------------------
 2126|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2126:13): [True: 0, False: 0]
  ------------------
 2127|      0|            }
 2128|      0|        }
 2129|      0|        break;
 2130|      0|    case EbtFloat16:
  ------------------
  |  Branch (2130:5): [True: 0, False: 9.16k]
  ------------------
 2131|      0|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (2131:13): [True: 0, False: 0]
  ------------------
 2132|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (2132:21): [True: 0, False: 0]
  ------------------
 2133|      0|            case 2:
  ------------------
  |  Branch (2133:13): [True: 0, False: 0]
  ------------------
 2134|      0|                switch (type.getMatrixRows()) {
 2135|      0|                case 2: op = EOpConstructF16Mat2x2; break;
  ------------------
  |  Branch (2135:17): [True: 0, False: 0]
  ------------------
 2136|      0|                case 3: op = EOpConstructF16Mat2x3; break;
  ------------------
  |  Branch (2136:17): [True: 0, False: 0]
  ------------------
 2137|      0|                case 4: op = EOpConstructF16Mat2x4; break;
  ------------------
  |  Branch (2137:17): [True: 0, False: 0]
  ------------------
 2138|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2138:17): [True: 0, False: 0]
  ------------------
 2139|      0|                }
 2140|      0|                break;
 2141|      0|            case 3:
  ------------------
  |  Branch (2141:13): [True: 0, False: 0]
  ------------------
 2142|      0|                switch (type.getMatrixRows()) {
 2143|      0|                case 2: op = EOpConstructF16Mat3x2; break;
  ------------------
  |  Branch (2143:17): [True: 0, False: 0]
  ------------------
 2144|      0|                case 3: op = EOpConstructF16Mat3x3; break;
  ------------------
  |  Branch (2144:17): [True: 0, False: 0]
  ------------------
 2145|      0|                case 4: op = EOpConstructF16Mat3x4; break;
  ------------------
  |  Branch (2145:17): [True: 0, False: 0]
  ------------------
 2146|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2146:17): [True: 0, False: 0]
  ------------------
 2147|      0|                }
 2148|      0|                break;
 2149|      0|            case 4:
  ------------------
  |  Branch (2149:13): [True: 0, False: 0]
  ------------------
 2150|      0|                switch (type.getMatrixRows()) {
 2151|      0|                case 2: op = EOpConstructF16Mat4x2; break;
  ------------------
  |  Branch (2151:17): [True: 0, False: 0]
  ------------------
 2152|      0|                case 3: op = EOpConstructF16Mat4x3; break;
  ------------------
  |  Branch (2152:17): [True: 0, False: 0]
  ------------------
 2153|      0|                case 4: op = EOpConstructF16Mat4x4; break;
  ------------------
  |  Branch (2153:17): [True: 0, False: 0]
  ------------------
 2154|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2154:17): [True: 0, False: 0]
  ------------------
 2155|      0|                }
 2156|      0|                break;
 2157|      0|            }
 2158|      0|        }
 2159|      0|        else {
 2160|      0|            switch (type.getVectorSize()) {
 2161|      0|            case 1: op = EOpConstructFloat16;  break;
  ------------------
  |  Branch (2161:13): [True: 0, False: 0]
  ------------------
 2162|      0|            case 2: op = EOpConstructF16Vec2;  break;
  ------------------
  |  Branch (2162:13): [True: 0, False: 0]
  ------------------
 2163|      0|            case 3: op = EOpConstructF16Vec3;  break;
  ------------------
  |  Branch (2163:13): [True: 0, False: 0]
  ------------------
 2164|      0|            case 4: op = EOpConstructF16Vec4;  break;
  ------------------
  |  Branch (2164:13): [True: 0, False: 0]
  ------------------
 2165|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2165:13): [True: 0, False: 0]
  ------------------
 2166|      0|            }
 2167|      0|        }
 2168|      0|        break;
 2169|      0|    case EbtBFloat16:
  ------------------
  |  Branch (2169:5): [True: 0, False: 9.16k]
  ------------------
 2170|      0|        switch (type.getVectorSize()) {
 2171|      0|        case 1: op = EOpConstructBFloat16;  break;
  ------------------
  |  Branch (2171:9): [True: 0, False: 0]
  ------------------
 2172|      0|        case 2: op = EOpConstructBF16Vec2;  break;
  ------------------
  |  Branch (2172:9): [True: 0, False: 0]
  ------------------
 2173|      0|        case 3: op = EOpConstructBF16Vec3;  break;
  ------------------
  |  Branch (2173:9): [True: 0, False: 0]
  ------------------
 2174|      0|        case 4: op = EOpConstructBF16Vec4;  break;
  ------------------
  |  Branch (2174:9): [True: 0, False: 0]
  ------------------
 2175|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2175:9): [True: 0, False: 0]
  ------------------
 2176|      0|        }
 2177|      0|        break;
 2178|      0|    case EbtFloatE5M2:
  ------------------
  |  Branch (2178:5): [True: 0, False: 9.16k]
  ------------------
 2179|      0|        switch (type.getVectorSize()) {
 2180|      0|        case 1: op = EOpConstructFloatE5M2;  break;
  ------------------
  |  Branch (2180:9): [True: 0, False: 0]
  ------------------
 2181|      0|        case 2: op = EOpConstructFloatE5M2Vec2;  break;
  ------------------
  |  Branch (2181:9): [True: 0, False: 0]
  ------------------
 2182|      0|        case 3: op = EOpConstructFloatE5M2Vec3;  break;
  ------------------
  |  Branch (2182:9): [True: 0, False: 0]
  ------------------
 2183|      0|        case 4: op = EOpConstructFloatE5M2Vec4;  break;
  ------------------
  |  Branch (2183:9): [True: 0, False: 0]
  ------------------
 2184|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2184:9): [True: 0, False: 0]
  ------------------
 2185|      0|        }
 2186|      0|        break;
 2187|      0|    case EbtFloatE4M3:
  ------------------
  |  Branch (2187:5): [True: 0, False: 9.16k]
  ------------------
 2188|      0|        switch (type.getVectorSize()) {
 2189|      0|        case 1: op = EOpConstructFloatE4M3;  break;
  ------------------
  |  Branch (2189:9): [True: 0, False: 0]
  ------------------
 2190|      0|        case 2: op = EOpConstructFloatE4M3Vec2;  break;
  ------------------
  |  Branch (2190:9): [True: 0, False: 0]
  ------------------
 2191|      0|        case 3: op = EOpConstructFloatE4M3Vec3;  break;
  ------------------
  |  Branch (2191:9): [True: 0, False: 0]
  ------------------
 2192|      0|        case 4: op = EOpConstructFloatE4M3Vec4;  break;
  ------------------
  |  Branch (2192:9): [True: 0, False: 0]
  ------------------
 2193|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2193:9): [True: 0, False: 0]
  ------------------
 2194|      0|        }
 2195|      0|        break;
 2196|      0|    case EbtFloatE2M1:
  ------------------
  |  Branch (2196:5): [True: 0, False: 9.16k]
  ------------------
 2197|      0|        switch (type.getVectorSize()) {
 2198|      0|        case 1: op = EOpConstructFloatE2M1;  break;
  ------------------
  |  Branch (2198:9): [True: 0, False: 0]
  ------------------
 2199|      0|        case 2: op = EOpConstructFloatE2M1Vec2;  break;
  ------------------
  |  Branch (2199:9): [True: 0, False: 0]
  ------------------
 2200|      0|        case 3: op = EOpConstructFloatE2M1Vec3;  break;
  ------------------
  |  Branch (2200:9): [True: 0, False: 0]
  ------------------
 2201|      0|        case 4: op = EOpConstructFloatE2M1Vec4;  break;
  ------------------
  |  Branch (2201:9): [True: 0, False: 0]
  ------------------
 2202|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2202:9): [True: 0, False: 0]
  ------------------
 2203|      0|        }
 2204|      0|        break;
 2205|      0|    case EbtFloatE3M2:
  ------------------
  |  Branch (2205:5): [True: 0, False: 9.16k]
  ------------------
 2206|      0|        switch (type.getVectorSize()) {
 2207|      0|        case 1: op = EOpConstructFloatE3M2;  break;
  ------------------
  |  Branch (2207:9): [True: 0, False: 0]
  ------------------
 2208|      0|        case 2: op = EOpConstructFloatE3M2Vec2;  break;
  ------------------
  |  Branch (2208:9): [True: 0, False: 0]
  ------------------
 2209|      0|        case 3: op = EOpConstructFloatE3M2Vec3;  break;
  ------------------
  |  Branch (2209:9): [True: 0, False: 0]
  ------------------
 2210|      0|        case 4: op = EOpConstructFloatE3M2Vec4;  break;
  ------------------
  |  Branch (2210:9): [True: 0, False: 0]
  ------------------
 2211|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2211:9): [True: 0, False: 0]
  ------------------
 2212|      0|        }
 2213|      0|        break;
 2214|      0|    case EbtFloatE2M3:
  ------------------
  |  Branch (2214:5): [True: 0, False: 9.16k]
  ------------------
 2215|      0|        switch (type.getVectorSize()) {
 2216|      0|        case 1: op = EOpConstructFloatE2M3;  break;
  ------------------
  |  Branch (2216:9): [True: 0, False: 0]
  ------------------
 2217|      0|        case 2: op = EOpConstructFloatE2M3Vec2;  break;
  ------------------
  |  Branch (2217:9): [True: 0, False: 0]
  ------------------
 2218|      0|        case 3: op = EOpConstructFloatE2M3Vec3;  break;
  ------------------
  |  Branch (2218:9): [True: 0, False: 0]
  ------------------
 2219|      0|        case 4: op = EOpConstructFloatE2M3Vec4;  break;
  ------------------
  |  Branch (2219:9): [True: 0, False: 0]
  ------------------
 2220|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2220:9): [True: 0, False: 0]
  ------------------
 2221|      0|        }
 2222|      0|        break;
 2223|      0|    case EbtFloatUE8M0:
  ------------------
  |  Branch (2223:5): [True: 0, False: 9.16k]
  ------------------
 2224|      0|        switch (type.getVectorSize()) {
 2225|      0|        case 1: op = EOpConstructFloatUE8M0;  break;
  ------------------
  |  Branch (2225:9): [True: 0, False: 0]
  ------------------
 2226|      0|        case 2: op = EOpConstructFloatUE8M0Vec2;  break;
  ------------------
  |  Branch (2226:9): [True: 0, False: 0]
  ------------------
 2227|      0|        case 3: op = EOpConstructFloatUE8M0Vec3;  break;
  ------------------
  |  Branch (2227:9): [True: 0, False: 0]
  ------------------
 2228|      0|        case 4: op = EOpConstructFloatUE8M0Vec4;  break;
  ------------------
  |  Branch (2228:9): [True: 0, False: 0]
  ------------------
 2229|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2229:9): [True: 0, False: 0]
  ------------------
 2230|      0|        }
 2231|      0|        break;
 2232|      0|    case EbtFloatMXINT8:
  ------------------
  |  Branch (2232:5): [True: 0, False: 9.16k]
  ------------------
 2233|      0|        switch (type.getVectorSize()) {
 2234|      0|        case 1: op = EOpConstructFloatMXINT8;  break;
  ------------------
  |  Branch (2234:9): [True: 0, False: 0]
  ------------------
 2235|      0|        case 2: op = EOpConstructFloatMXINT8Vec2;  break;
  ------------------
  |  Branch (2235:9): [True: 0, False: 0]
  ------------------
 2236|      0|        case 3: op = EOpConstructFloatMXINT8Vec3;  break;
  ------------------
  |  Branch (2236:9): [True: 0, False: 0]
  ------------------
 2237|      0|        case 4: op = EOpConstructFloatMXINT8Vec4;  break;
  ------------------
  |  Branch (2237:9): [True: 0, False: 0]
  ------------------
 2238|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2238:9): [True: 0, False: 0]
  ------------------
 2239|      0|        }
 2240|      0|        break;
 2241|      0|    case EbtInt8:
  ------------------
  |  Branch (2241:5): [True: 0, False: 9.16k]
  ------------------
 2242|      0|        switch(type.getVectorSize()) {
 2243|      0|        case 1: op = EOpConstructInt8;   break;
  ------------------
  |  Branch (2243:9): [True: 0, False: 0]
  ------------------
 2244|      0|        case 2: op = EOpConstructI8Vec2; break;
  ------------------
  |  Branch (2244:9): [True: 0, False: 0]
  ------------------
 2245|      0|        case 3: op = EOpConstructI8Vec3; break;
  ------------------
  |  Branch (2245:9): [True: 0, False: 0]
  ------------------
 2246|      0|        case 4: op = EOpConstructI8Vec4; break;
  ------------------
  |  Branch (2246:9): [True: 0, False: 0]
  ------------------
 2247|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2247:9): [True: 0, False: 0]
  ------------------
 2248|      0|        }
 2249|      0|        break;
 2250|      0|    case EbtUint8:
  ------------------
  |  Branch (2250:5): [True: 0, False: 9.16k]
  ------------------
 2251|      0|        switch(type.getVectorSize()) {
 2252|      0|        case 1: op = EOpConstructUint8;  break;
  ------------------
  |  Branch (2252:9): [True: 0, False: 0]
  ------------------
 2253|      0|        case 2: op = EOpConstructU8Vec2; break;
  ------------------
  |  Branch (2253:9): [True: 0, False: 0]
  ------------------
 2254|      0|        case 3: op = EOpConstructU8Vec3; break;
  ------------------
  |  Branch (2254:9): [True: 0, False: 0]
  ------------------
 2255|      0|        case 4: op = EOpConstructU8Vec4; break;
  ------------------
  |  Branch (2255:9): [True: 0, False: 0]
  ------------------
 2256|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2256:9): [True: 0, False: 0]
  ------------------
 2257|      0|        }
 2258|      0|        break;
 2259|      0|    case EbtInt16:
  ------------------
  |  Branch (2259:5): [True: 0, False: 9.16k]
  ------------------
 2260|      0|        switch(type.getVectorSize()) {
 2261|      0|        case 1: op = EOpConstructInt16;   break;
  ------------------
  |  Branch (2261:9): [True: 0, False: 0]
  ------------------
 2262|      0|        case 2: op = EOpConstructI16Vec2; break;
  ------------------
  |  Branch (2262:9): [True: 0, False: 0]
  ------------------
 2263|      0|        case 3: op = EOpConstructI16Vec3; break;
  ------------------
  |  Branch (2263:9): [True: 0, False: 0]
  ------------------
 2264|      0|        case 4: op = EOpConstructI16Vec4; break;
  ------------------
  |  Branch (2264:9): [True: 0, False: 0]
  ------------------
 2265|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2265:9): [True: 0, False: 0]
  ------------------
 2266|      0|        }
 2267|      0|        break;
 2268|      0|    case EbtUint16:
  ------------------
  |  Branch (2268:5): [True: 0, False: 9.16k]
  ------------------
 2269|      0|        switch(type.getVectorSize()) {
 2270|      0|        case 1: op = EOpConstructUint16;  break;
  ------------------
  |  Branch (2270:9): [True: 0, False: 0]
  ------------------
 2271|      0|        case 2: op = EOpConstructU16Vec2; break;
  ------------------
  |  Branch (2271:9): [True: 0, False: 0]
  ------------------
 2272|      0|        case 3: op = EOpConstructU16Vec3; break;
  ------------------
  |  Branch (2272:9): [True: 0, False: 0]
  ------------------
 2273|      0|        case 4: op = EOpConstructU16Vec4; break;
  ------------------
  |  Branch (2273:9): [True: 0, False: 0]
  ------------------
 2274|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2274:9): [True: 0, False: 0]
  ------------------
 2275|      0|        }
 2276|      0|        break;
 2277|      0|    case EbtInt64:
  ------------------
  |  Branch (2277:5): [True: 0, False: 9.16k]
  ------------------
 2278|      0|        switch(type.getVectorSize()) {
 2279|      0|        case 1: op = EOpConstructInt64;   break;
  ------------------
  |  Branch (2279:9): [True: 0, False: 0]
  ------------------
 2280|      0|        case 2: op = EOpConstructI64Vec2; break;
  ------------------
  |  Branch (2280:9): [True: 0, False: 0]
  ------------------
 2281|      0|        case 3: op = EOpConstructI64Vec3; break;
  ------------------
  |  Branch (2281:9): [True: 0, False: 0]
  ------------------
 2282|      0|        case 4: op = EOpConstructI64Vec4; break;
  ------------------
  |  Branch (2282:9): [True: 0, False: 0]
  ------------------
 2283|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2283:9): [True: 0, False: 0]
  ------------------
 2284|      0|        }
 2285|      0|        break;
 2286|      4|    case EbtUint64:
  ------------------
  |  Branch (2286:5): [True: 4, False: 9.15k]
  ------------------
 2287|      4|        switch(type.getVectorSize()) {
 2288|      4|        case 1: op = EOpConstructUint64;  break;
  ------------------
  |  Branch (2288:9): [True: 4, False: 0]
  ------------------
 2289|      0|        case 2: op = EOpConstructU64Vec2; break;
  ------------------
  |  Branch (2289:9): [True: 0, False: 4]
  ------------------
 2290|      0|        case 3: op = EOpConstructU64Vec3; break;
  ------------------
  |  Branch (2290:9): [True: 0, False: 4]
  ------------------
 2291|      0|        case 4: op = EOpConstructU64Vec4; break;
  ------------------
  |  Branch (2291:9): [True: 0, False: 4]
  ------------------
 2292|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2292:9): [True: 0, False: 4]
  ------------------
 2293|      4|        }
 2294|      4|        break;
 2295|      4|    case EbtReference:
  ------------------
  |  Branch (2295:5): [True: 0, False: 9.16k]
  ------------------
 2296|      0|        op = EOpConstructReference;
 2297|      0|        break;
 2298|       |
 2299|      0|    case EbtAccStruct:
  ------------------
  |  Branch (2299:5): [True: 0, False: 9.16k]
  ------------------
 2300|      0|        op = EOpConstructAccStruct;
 2301|      0|        break;
 2302|      0|    default:
  ------------------
  |  Branch (2302:5): [True: 0, False: 9.16k]
  ------------------
 2303|      0|        break;
 2304|  9.16k|    }
 2305|       |
 2306|  9.16k|    return op;
 2307|  9.16k|}
_ZN7glslang13TIntermediate13growAggregateEP11TIntermNodeS2_:
 2317|   432k|{
 2318|   432k|    if (left == nullptr && right == nullptr)
  ------------------
  |  Branch (2318:9): [True: 421k, False: 10.6k]
  |  Branch (2318:28): [True: 420k, False: 1.00k]
  ------------------
 2319|   420k|        return nullptr;
 2320|       |
 2321|  11.6k|    TIntermAggregate* aggNode = nullptr;
 2322|  11.6k|    if (left != nullptr)
  ------------------
  |  Branch (2322:9): [True: 10.6k, False: 1.00k]
  ------------------
 2323|  10.6k|        aggNode = left->getAsAggregate();
 2324|  11.6k|    if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
  ------------------
  |  Branch (2324:9): [True: 5.40k, False: 6.19k]
  |  Branch (2324:31): [True: 0, False: 6.19k]
  ------------------
 2325|  5.40k|        aggNode = new TIntermAggregate;
 2326|  5.40k|        if (left != nullptr)
  ------------------
  |  Branch (2326:13): [True: 4.40k, False: 1.00k]
  ------------------
 2327|  4.40k|            aggNode->getSequence().push_back(left);
 2328|  5.40k|    }
 2329|       |
 2330|  11.6k|    if (right != nullptr)
  ------------------
  |  Branch (2330:9): [True: 11.6k, False: 0]
  ------------------
 2331|  11.6k|        aggNode->getSequence().push_back(right);
 2332|       |
 2333|  11.6k|    return aggNode;
 2334|   432k|}
_ZN7glslang13TIntermediate13growAggregateEP11TIntermNodeS2_RKNS_10TSourceLocE:
 2337|   429k|{
 2338|   429k|    TIntermAggregate* aggNode = growAggregate(left, right);
 2339|   429k|    if (aggNode)
  ------------------
  |  Branch (2339:9): [True: 8.80k, False: 420k]
  ------------------
 2340|  8.80k|        aggNode->setLoc(loc);
 2341|       |
 2342|   429k|    return aggNode;
 2343|   429k|}
_ZN7glslang13TIntermediate13makeAggregateEP11TIntermNode:
 2385|     12|{
 2386|     12|    if (node == nullptr)
  ------------------
  |  Branch (2386:9): [True: 0, False: 12]
  ------------------
 2387|      0|        return nullptr;
 2388|       |
 2389|     12|    TIntermAggregate* aggNode = new TIntermAggregate;
 2390|     12|    aggNode->getSequence().push_back(node);
 2391|     12|    aggNode->setLoc(node->getLoc());
 2392|       |
 2393|     12|    return aggNode;
 2394|     12|}
_ZN7glslang13TIntermediate13makeAggregateERKNS_10TSourceLocE:
 2412|      3|{
 2413|      3|    TIntermAggregate* aggNode = new TIntermAggregate;
 2414|      3|    aggNode->setLoc(loc);
 2415|       |
 2416|      3|    return aggNode;
 2417|      3|}
_ZN7glslang13TIntermediate8addCommaEPNS_12TIntermTypedES2_RKNS_10TSourceLocE:
 2440|      1|{
 2441|       |    // However, the lowest precedence operators of the sequence operator ( , ) and the assignment operators
 2442|       |    // ... are not included in the operators that can create a constant expression.
 2443|       |    //
 2444|       |    // if (left->getType().getQualifier().storage == EvqConst &&
 2445|       |    //    right->getType().getQualifier().storage == EvqConst) {
 2446|       |
 2447|       |    //    return right;
 2448|       |    //}
 2449|       |
 2450|      1|    TIntermTyped *commaAggregate = growAggregate(left, right, loc);
 2451|      1|    commaAggregate->getAsAggregate()->setOperator(EOpComma);
 2452|      1|    commaAggregate->setType(right->getType());
 2453|      1|    commaAggregate->getWritableType().getQualifier().makeTemporary();
 2454|       |
 2455|      1|    return commaAggregate;
 2456|      1|}
_ZN7glslang13TIntermediate12addSelectionEPNS_12TIntermTypedES2_S2_RKNS_10TSourceLocE:
 2479|     14|{
 2480|       |    // If it's void, go to the if-then-else selection()
 2481|     14|    if (trueBlock->getBasicType() == EbtVoid && falseBlock->getBasicType() == EbtVoid) {
  ------------------
  |  Branch (2481:9): [True: 0, False: 14]
  |  Branch (2481:49): [True: 0, False: 0]
  ------------------
 2482|      0|        TIntermNodePair pair = { trueBlock, falseBlock };
 2483|      0|        TIntermSelection* selection = addSelection(cond, pair, loc);
 2484|      0|        if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (2484:13): [True: 0, False: 0]
  ------------------
 2485|      0|            selection->setNoShortCircuit();
 2486|       |
 2487|      0|        return selection;
 2488|      0|    }
 2489|       |
 2490|       |    //
 2491|       |    // Get compatible types.
 2492|       |    //
 2493|     14|    auto children = addPairConversion(EOpSequence, trueBlock, falseBlock);
 2494|     14|    trueBlock = std::get<0>(children);
 2495|     14|    falseBlock = std::get<1>(children);
 2496|       |
 2497|     14|    if (trueBlock == nullptr || falseBlock == nullptr ||
  ------------------
  |  Branch (2497:9): [True: 0, False: 14]
  |  Branch (2497:33): [True: 0, False: 14]
  ------------------
 2498|     14|        trueBlock->getBasicType() == EbtString || falseBlock->getBasicType() == EbtString)
  ------------------
  |  Branch (2498:9): [True: 0, False: 14]
  |  Branch (2498:51): [True: 0, False: 14]
  ------------------
 2499|      0|        return nullptr;
 2500|       |
 2501|       |    // Handle a vector condition as a mix
 2502|     14|    if (!cond->getType().isScalarOrVec1()) {
  ------------------
  |  Branch (2502:9): [True: 3, False: 11]
  ------------------
 2503|      3|        TType targetVectorType(trueBlock->getType().getBasicType(), EvqTemporary,
 2504|      3|                               cond->getType().getVectorSize());
 2505|       |        // smear true/false operands as needed
 2506|      3|        trueBlock = addUniShapeConversion(EOpMix, targetVectorType, trueBlock);
 2507|      3|        falseBlock = addUniShapeConversion(EOpMix, targetVectorType, falseBlock);
 2508|       |
 2509|       |        // After conversion, types have to match.
 2510|      3|        if (falseBlock->getType() != trueBlock->getType())
  ------------------
  |  Branch (2510:13): [True: 0, False: 3]
  ------------------
 2511|      0|            return nullptr;
 2512|       |
 2513|       |        // make the mix operation
 2514|      3|        TIntermAggregate* mix = makeAggregate(loc);
 2515|      3|        mix = growAggregate(mix, falseBlock);
 2516|      3|        mix = growAggregate(mix, trueBlock);
 2517|      3|        mix = growAggregate(mix, cond);
 2518|      3|        mix->setType(targetVectorType);
 2519|      3|        mix->setOp(EOpMix);
 2520|       |
 2521|      3|        return mix;
 2522|      3|    }
 2523|       |
 2524|       |    // Now have a scalar condition...
 2525|       |
 2526|       |    // Convert true and false expressions to matching types
 2527|     11|    addBiShapeConversion(EOpMix, trueBlock, falseBlock);
 2528|       |
 2529|       |    // After conversion, types have to match.
 2530|     11|    if (falseBlock->getType() != trueBlock->getType())
  ------------------
  |  Branch (2530:9): [True: 0, False: 11]
  ------------------
 2531|      0|        return nullptr;
 2532|       |
 2533|       |    // Eliminate the selection when the condition is a scalar and all operands are constant.
 2534|     11|    if (cond->getAsConstantUnion() && trueBlock->getAsConstantUnion() && falseBlock->getAsConstantUnion()) {
  ------------------
  |  Branch (2534:9): [True: 11, False: 0]
  |  Branch (2534:39): [True: 11, False: 0]
  |  Branch (2534:74): [True: 5, False: 6]
  ------------------
 2535|      5|        if (cond->getAsConstantUnion()->getConstArray()[0].getBConst())
  ------------------
  |  Branch (2535:13): [True: 3, False: 2]
  ------------------
 2536|      3|            return trueBlock;
 2537|      2|        else
 2538|      2|            return falseBlock;
 2539|      5|    }
 2540|       |
 2541|       |    //
 2542|       |    // Make a selection node.
 2543|       |    //
 2544|      6|    TIntermSelection* node = new TIntermSelection(cond, trueBlock, falseBlock, trueBlock->getType());
 2545|      6|    node->setLoc(loc);
 2546|      6|    node->getQualifier().precision = std::max(trueBlock->getQualifier().precision, falseBlock->getQualifier().precision);
 2547|       |
 2548|      6|    if ((cond->getQualifier().isConstant() && specConstantPropagates(*trueBlock, *falseBlock)) ||
  ------------------
  |  Branch (2548:10): [True: 6, False: 0]
  |  Branch (2548:47): [True: 0, False: 6]
  ------------------
 2549|      6|        (cond->getQualifier().isSpecConstant() && trueBlock->getQualifier().isConstant() &&
  ------------------
  |  Branch (2549:10): [True: 0, False: 6]
  |  Branch (2549:51): [True: 0, False: 0]
  ------------------
 2550|      0|                                                 falseBlock->getQualifier().isConstant()))
  ------------------
  |  Branch (2550:50): [True: 0, False: 0]
  ------------------
 2551|      0|        node->getQualifier().makeSpecConstant();
 2552|      6|    else
 2553|      6|        node->getQualifier().makeTemporary();
 2554|       |
 2555|      6|    if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (2555:9): [True: 6, False: 0]
  ------------------
 2556|      6|        node->setNoShortCircuit();
 2557|       |
 2558|      6|    return node;
 2559|     11|}
_ZNK7glslang13TIntermediate16addConstantUnionERKNS_16TConstUnionArrayERKNS_5TTypeERKNS_10TSourceLocEb:
 2568|   312k|{
 2569|   312k|    TIntermConstantUnion* node = new TIntermConstantUnion(unionArray, t);
 2570|   312k|    node->getQualifier().storage = EvqConst;
 2571|   312k|    node->setLoc(loc);
 2572|   312k|    if (literal)
  ------------------
  |  Branch (2572:9): [True: 302k, False: 9.96k]
  ------------------
 2573|   302k|        node->setLiteral();
 2574|       |
 2575|   312k|    return node;
 2576|   312k|}
_ZNK7glslang13TIntermediate16addConstantUnionEiRKNS_10TSourceLocEb:
 2610|   273k|{
 2611|   273k|    TConstUnionArray unionArray(1);
 2612|   273k|    unionArray[0].setIConst(i);
 2613|       |
 2614|   273k|    return addConstantUnion(unionArray, TType(EbtInt, EvqConst), loc, literal);
 2615|   273k|}
_ZNK7glslang13TIntermediate16addConstantUnionEjRKNS_10TSourceLocEb:
 2618|  28.4k|{
 2619|  28.4k|    TConstUnionArray unionArray(1);
 2620|  28.4k|    unionArray[0].setUConst(u);
 2621|       |
 2622|  28.4k|    return addConstantUnion(unionArray, TType(EbtUint, EvqConst), loc, literal);
 2623|  28.4k|}
_ZNK7glslang13TIntermediate16addConstantUnionEbRKNS_10TSourceLocEb:
 2642|      1|{
 2643|      1|    TConstUnionArray unionArray(1);
 2644|      1|    unionArray[0].setBConst(b);
 2645|       |
 2646|      1|    return addConstantUnion(unionArray, TType(EbtBool, EvqConst), loc, literal);
 2647|      1|}
_ZNK7glslang13TIntermediate16addConstantUnionEdNS_10TBasicTypeERKNS_10TSourceLocEb:
 2650|      2|{
 2651|      2|    assert(isTypeFloat(baseType));
 2652|       |
 2653|      2|    if (isEsProfile() && (baseType == EbtFloat || baseType == EbtFloat16)) {
  ------------------
  |  Branch (2653:9): [True: 1, False: 1]
  |  Branch (2653:27): [True: 1, False: 0]
  |  Branch (2653:51): [True: 0, False: 0]
  ------------------
 2654|      1|        int exponent = 0;
 2655|      1|        frexp(d, &exponent);
 2656|      1|        int minExp = baseType == EbtFloat ? -126 : -14;
  ------------------
  |  Branch (2656:22): [True: 1, False: 0]
  ------------------
 2657|      1|        int maxExp = baseType == EbtFloat ? 127 : 15;
  ------------------
  |  Branch (2657:22): [True: 1, False: 0]
  ------------------
 2658|      1|        if (exponent > maxExp) { //overflow, d = inf
  ------------------
  |  Branch (2658:13): [True: 0, False: 1]
  ------------------
 2659|      0|            d = std::numeric_limits<double>::infinity();
 2660|      1|        } else if (exponent < minExp) { //underflow, d = 0.0;
  ------------------
  |  Branch (2660:20): [True: 0, False: 1]
  ------------------
 2661|      0|            d = 0.0;
 2662|      0|        }
 2663|      1|    }
 2664|       |
 2665|      2|    TConstUnionArray unionArray(1);
 2666|      2|    unionArray[0].setDConst(d);
 2667|       |
 2668|      2|    return addConstantUnion(unionArray, TType(baseType, EvqConst), loc, literal);
 2669|      2|}
_ZN7glslang13TIntermediate18traverseLValueBaseEPKNS_12TIntermTypedEbbNSt3__18functionIFbRK11TIntermNodeEEE:
 2731|      4|{
 2732|      5|    do {
 2733|      5|        const TIntermBinary* binary = node->getAsBinaryNode();
 2734|      5|        if (binary == nullptr) {
  ------------------
  |  Branch (2734:13): [True: 4, False: 1]
  ------------------
 2735|      4|            if (proc) {
  ------------------
  |  Branch (2735:17): [True: 0, False: 4]
  ------------------
 2736|      0|                proc(*node);
 2737|      0|            }
 2738|      4|            return node;
 2739|      4|        }
 2740|      1|        TOperator op = binary->getOp();
 2741|      1|        if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle &&
  ------------------
  |  Branch (2741:13): [True: 1, False: 0]
  |  Branch (2741:37): [True: 1, False: 0]
  |  Branch (2741:63): [True: 0, False: 1]
  |  Branch (2741:93): [True: 0, False: 0]
  ------------------
 2742|      0|            op != EOpMatrixSwizzle)
  ------------------
  |  Branch (2742:13): [True: 0, False: 0]
  ------------------
 2743|      0|            return nullptr;
 2744|      1|        if (!swizzleOkay) {
  ------------------
  |  Branch (2744:13): [True: 0, False: 1]
  ------------------
 2745|      0|            if (op == EOpVectorSwizzle || op == EOpMatrixSwizzle)
  ------------------
  |  Branch (2745:17): [True: 0, False: 0]
  |  Branch (2745:43): [True: 0, False: 0]
  ------------------
 2746|      0|                return nullptr;
 2747|      0|            if ((op == EOpIndexDirect || op == EOpIndexIndirect) &&
  ------------------
  |  Branch (2747:18): [True: 0, False: 0]
  |  Branch (2747:42): [True: 0, False: 0]
  ------------------
 2748|      0|                (binary->getLeft()->getType().isVector() || binary->getLeft()->getType().isScalar()) &&
  ------------------
  |  Branch (2748:18): [True: 0, False: 0]
  |  Branch (2748:61): [True: 0, False: 0]
  ------------------
 2749|      0|                !binary->getLeft()->getType().isArray())
  ------------------
  |  Branch (2749:17): [True: 0, False: 0]
  ------------------
 2750|      0|                return nullptr;
 2751|      0|        }
 2752|      1|        if (proc) {
  ------------------
  |  Branch (2752:13): [True: 0, False: 1]
  ------------------
 2753|      0|            if (!proc(*node)) {
  ------------------
  |  Branch (2753:17): [True: 0, False: 0]
  ------------------
 2754|      0|                return node;
 2755|      0|            }
 2756|      0|        }
 2757|      1|        node = binary->getLeft();
 2758|      1|        if (bufferReferenceOk && node->isReference())
  ------------------
  |  Branch (2758:13): [True: 0, False: 1]
  |  Branch (2758:34): [True: 0, False: 0]
  ------------------
 2759|      0|            return node;
 2760|      1|    } while (true);
  ------------------
  |  Branch (2760:14): [True: 1, Folded]
  ------------------
 2761|      4|}
_ZN7glslang13TIntermediate11postProcessEP11TIntermNode11EShLanguage:
 2915|      4|{
 2916|      4|    if (root == nullptr)
  ------------------
  |  Branch (2916:9): [True: 0, False: 4]
  ------------------
 2917|      0|        return true;
 2918|       |
 2919|       |    // Finish off the top-level sequence
 2920|      4|    TIntermAggregate* aggRoot = root->getAsAggregate();
 2921|      4|    if (aggRoot && aggRoot->getOp() == EOpNull)
  ------------------
  |  Branch (2921:9): [True: 4, False: 0]
  |  Branch (2921:20): [True: 4, False: 0]
  ------------------
 2922|      4|        aggRoot->setOperator(EOpSequence);
 2923|       |
 2924|       |    // Propagate 'noContraction' label in backward from 'precise' variables.
 2925|      4|    glslang::PropagateNoContraction(*this);
 2926|       |
 2927|      4|    if (invertY && getSource() == EShSourceGlsl &&
  ------------------
  |  Branch (2927:9): [True: 0, False: 4]
  |  Branch (2927:20): [True: 0, False: 0]
  ------------------
 2928|      0|        (language == EShLangVertex ||
  ------------------
  |  Branch (2928:10): [True: 0, False: 0]
  ------------------
 2929|      0|         language == EShLangGeometry ||
  ------------------
  |  Branch (2929:10): [True: 0, False: 0]
  ------------------
 2930|      0|         language == EShLangTessEvaluation)) {
  ------------------
  |  Branch (2930:10): [True: 0, False: 0]
  ------------------
 2931|      0|        invertPositions(root);
 2932|      0|    }
 2933|       |
 2934|      4|    switch (textureSamplerTransformMode) {
  ------------------
  |  Branch (2934:13): [True: 4, False: 0]
  ------------------
 2935|      4|    case EShTexSampTransKeep:
  ------------------
  |  Branch (2935:5): [True: 4, False: 0]
  ------------------
 2936|      4|        break;
 2937|      0|    case EShTexSampTransUpgradeTextureRemoveSampler:
  ------------------
  |  Branch (2937:5): [True: 0, False: 4]
  ------------------
 2938|      0|        performTextureUpgradeAndSamplerRemovalTransformation(root);
 2939|      0|        break;
 2940|      0|    case EShTexSampTransCount:
  ------------------
  |  Branch (2940:5): [True: 0, False: 4]
  ------------------
 2941|      0|        assert(0);
 2942|      0|        break;
 2943|      4|    }
 2944|       |
 2945|      4|    return true;
 2946|      4|}
_ZN7glslang13TIntermediate21addSymbolLinkageNodesERPNS_16TIntermAggregateE11EShLanguageRNS_12TSymbolTableE:
 2949|  1.00k|{
 2950|       |    // Add top-level nodes for declarations that must be checked cross
 2951|       |    // compilation unit by a linker, yet might not have been referenced
 2952|       |    // by the AST.
 2953|       |    //
 2954|       |    // Almost entirely, translation of symbols is driven by what's present
 2955|       |    // in the AST traversal, not by translating the symbol table.
 2956|       |    //
 2957|       |    // However, there are some special cases:
 2958|       |    //  - From the specification: "Special built-in inputs gl_VertexID and
 2959|       |    //    gl_InstanceID are also considered active vertex attributes."
 2960|       |    //  - Linker-based type mismatch error reporting needs to see all
 2961|       |    //    uniforms/ins/outs variables and blocks.
 2962|       |    //  - ftransform() can make gl_Vertex and gl_ModelViewProjectionMatrix active.
 2963|       |    //
 2964|       |
 2965|       |    // if (ftransformUsed) {
 2966|       |        // TODO: 1.1 lowering functionality: track ftransform() usage
 2967|       |    //    addSymbolLinkageNode(root, symbolTable, "gl_Vertex");
 2968|       |    //    addSymbolLinkageNode(root, symbolTable, "gl_ModelViewProjectionMatrix");
 2969|       |    //}
 2970|       |
 2971|  1.00k|    if (language == EShLangVertex) {
  ------------------
  |  Branch (2971:9): [True: 1.00k, False: 0]
  ------------------
 2972|  1.00k|        addSymbolLinkageNode(linkage, symbolTable, "gl_VertexID");
 2973|  1.00k|        if ((version < 140 && requestedExtensions.find(E_GL_EXT_draw_instanced) != requestedExtensions.end()) || version >= 140)
  ------------------
  |  Branch (2973:13): [True: 984, False: 20]
  |  Branch (2973:14): [True: 20, False: 984]
  |  Branch (2973:31): [True: 0, False: 20]
  |  Branch (2973:114): [True: 984, False: 20]
  ------------------
 2974|    984|            addSymbolLinkageNode(linkage, symbolTable, "gl_InstanceID");
 2975|  1.00k|    }
 2976|       |
 2977|       |    // Add a child to the root node for the linker objects
 2978|  1.00k|    linkage->setOperator(EOpLinkerObjects);
 2979|  1.00k|    treeRoot = growAggregate(treeRoot, linkage);
 2980|  1.00k|}
_ZN7glslang13TIntermediate20addSymbolLinkageNodeERPNS_16TIntermAggregateERNS_12TSymbolTableERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 2988|  1.98k|{
 2989|  1.98k|    TSymbol* symbol = symbolTable.find(name);
 2990|  1.98k|    if (symbol)
  ------------------
  |  Branch (2990:9): [True: 1.78k, False: 202]
  ------------------
 2991|  1.78k|        addSymbolLinkageNode(linkage, *symbol->getAsVariable());
 2992|  1.98k|}
_ZN7glslang13TIntermediate20addSymbolLinkageNodeERPNS_16TIntermAggregateERKNS_7TSymbolE:
 2995|  1.78k|{
 2996|  1.78k|    const TVariable* variable = symbol.getAsVariable();
 2997|  1.78k|    if (! variable) {
  ------------------
  |  Branch (2997:9): [True: 0, False: 1.78k]
  ------------------
 2998|       |        // This must be a member of an anonymous block, and we need to add the whole block
 2999|      0|        const TAnonMember* anon = symbol.getAsAnonMember();
 3000|      0|        variable = &anon->getAnonContainer();
 3001|      0|    }
 3002|  1.78k|    TIntermSymbol* node = addSymbol(*variable);
 3003|  1.78k|    linkage = growAggregate(linkage, node);
 3004|  1.78k|}
_ZNK7glslang15TIntermOperator13isConstructorEv:
 3252|  8.83k|{
 3253|  8.83k|    return op > EOpConstructGuardStart && op < EOpConstructGuardEnd;
  ------------------
  |  Branch (3253:12): [True: 8.83k, False: 3]
  |  Branch (3253:43): [True: 8.83k, False: 0]
  ------------------
 3254|  8.83k|}
_ZN7glslang13TIntermediate7promoteEPNS_15TIntermOperatorE:
 3264|    930|{
 3265|    930|    if (node == nullptr)
  ------------------
  |  Branch (3265:9): [True: 0, False: 930]
  ------------------
 3266|      0|        return false;
 3267|       |
 3268|    930|    if (node->getAsUnaryNode())
  ------------------
  |  Branch (3268:9): [True: 920, False: 10]
  ------------------
 3269|    920|        return promoteUnary(*node->getAsUnaryNode());
 3270|       |
 3271|     10|    if (node->getAsBinaryNode())
  ------------------
  |  Branch (3271:9): [True: 10, False: 0]
  ------------------
 3272|     10|        return promoteBinary(*node->getAsBinaryNode());
 3273|       |
 3274|      0|    if (node->getAsAggregate())
  ------------------
  |  Branch (3274:9): [True: 0, False: 0]
  ------------------
 3275|      0|        return promoteAggregate(*node->getAsAggregate());
 3276|       |
 3277|      0|    return false;
 3278|      0|}
_ZN7glslang13TIntermediate12promoteUnaryERNS_12TIntermUnaryE:
 3284|    920|{
 3285|    920|    const TOperator op    = node.getOp();
 3286|    920|    TIntermTyped* operand = node.getOperand();
 3287|       |
 3288|    920|    switch (op) {
 3289|     15|    case EOpLogicalNot:
  ------------------
  |  Branch (3289:5): [True: 15, False: 905]
  ------------------
 3290|       |        // Convert operand to a boolean type
 3291|     15|        if (operand->getBasicType() != EbtBool) {
  ------------------
  |  Branch (3291:13): [True: 12, False: 3]
  ------------------
 3292|       |            // Add constructor to boolean type. If that fails, we can't do it, so return false.
 3293|     12|            TIntermTyped* converted = addConversion(op, TType(EbtBool), operand);
 3294|     12|            if (converted == nullptr)
  ------------------
  |  Branch (3294:17): [True: 0, False: 12]
  ------------------
 3295|      0|                return false;
 3296|       |
 3297|       |            // Use the result of converting the node to a bool.
 3298|     12|            node.setOperand(operand = converted); // also updates stack variable
 3299|     12|        }
 3300|     15|        break;
 3301|     15|    case EOpBitwiseNot:
  ------------------
  |  Branch (3301:5): [True: 5, False: 915]
  ------------------
 3302|      5|        if (!isTypeInt(operand->getBasicType()))
  ------------------
  |  Branch (3302:13): [True: 1, False: 4]
  ------------------
 3303|      1|            return false;
 3304|      4|        break;
 3305|    895|    case EOpNegative:
  ------------------
  |  Branch (3305:5): [True: 895, False: 25]
  ------------------
 3306|    896|    case EOpPostIncrement:
  ------------------
  |  Branch (3306:5): [True: 1, False: 919]
  ------------------
 3307|    897|    case EOpPostDecrement:
  ------------------
  |  Branch (3307:5): [True: 1, False: 919]
  ------------------
 3308|    898|    case EOpPreIncrement:
  ------------------
  |  Branch (3308:5): [True: 1, False: 919]
  ------------------
 3309|    900|    case EOpPreDecrement:
  ------------------
  |  Branch (3309:5): [True: 2, False: 918]
  ------------------
 3310|    900|        if (!isTypeInt(operand->getBasicType()) &&
  ------------------
  |  Branch (3310:13): [True: 1, False: 899]
  ------------------
 3311|      1|            operand->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (3311:13): [True: 1, False: 0]
  ------------------
 3312|      1|            operand->getBasicType() != EbtFloat16 &&
  ------------------
  |  Branch (3312:13): [True: 1, False: 0]
  ------------------
 3313|      1|            operand->getBasicType() != EbtDouble)
  ------------------
  |  Branch (3313:13): [True: 1, False: 0]
  ------------------
 3314|       |
 3315|      1|            return false;
 3316|    899|        break;
 3317|    899|    default:
  ------------------
  |  Branch (3317:5): [True: 0, False: 920]
  ------------------
 3318|       |        // HLSL uses this path for initial function signature finding for built-ins
 3319|       |        // taking a single argument, which generally don't participate in
 3320|       |        // operator-based type promotion (type conversion will occur later).
 3321|       |        // For now, scalar argument cases are relying on the setType() call below.
 3322|      0|        if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (3322:13): [True: 0, False: 0]
  ------------------
 3323|      0|            break;
 3324|       |
 3325|       |        // GLSL only allows integer arguments for the cases identified above in the
 3326|       |        // case statements.
 3327|      0|        if (operand->getBasicType() != EbtFloat)
  ------------------
  |  Branch (3327:13): [True: 0, False: 0]
  ------------------
 3328|      0|            return false;
 3329|    920|    }
 3330|       |
 3331|    918|    node.setType(operand->getType());
 3332|    918|    node.getWritableType().getQualifier().makeTemporary();
 3333|       |
 3334|    918|    return true;
 3335|    920|}
_ZN7glslang12TIntermUnary15updatePrecisionEv:
 3339|    921|{
 3340|    921|    if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
  ------------------
  |  Branch (3340:9): [True: 902, False: 19]
  |  Branch (3340:37): [True: 4, False: 15]
  ------------------
 3341|    906|        getBasicType() == EbtFloat) {
  ------------------
  |  Branch (3341:9): [True: 0, False: 15]
  ------------------
 3342|    906|        if (operand->getQualifier().precision > getQualifier().precision)
  ------------------
  |  Branch (3342:13): [True: 0, False: 906]
  ------------------
 3343|      0|            getQualifier().precision = operand->getQualifier().precision;
 3344|    906|    }
 3345|    921|}
_ZN7glslang13TIntermediate13promoteBinaryERNS_13TIntermBinaryE:
 3351|     10|{
 3352|     10|    TOperator     op    = node.getOp();
 3353|     10|    TIntermTyped* left  = node.getLeft();
 3354|     10|    TIntermTyped* right = node.getRight();
 3355|       |
 3356|       |    // Arrays and structures have to be exact matches.
 3357|     10|    if ((left->isArray() || right->isArray() || left->getBasicType() == EbtStruct || right->getBasicType() == EbtStruct)
  ------------------
  |  Branch (3357:10): [True: 1, False: 9]
  |  Branch (3357:29): [True: 0, False: 9]
  |  Branch (3357:49): [True: 0, False: 9]
  |  Branch (3357:86): [True: 0, False: 9]
  ------------------
 3358|      1|        && left->getType() != right->getType())
  ------------------
  |  Branch (3358:12): [True: 0, False: 1]
  ------------------
 3359|      0|        return false;
 3360|       |
 3361|       |    // Base assumption:  just make the type the same as the left
 3362|       |    // operand.  Only deviations from this will be coded.
 3363|     10|    node.setType(left->getType());
 3364|     10|    node.getWritableType().getQualifier().clear();
 3365|       |
 3366|       |    // Composite and opaque types don't having pending operator changes, e.g.,
 3367|       |    // array, structure, and samplers.  Just establish final type and correctness.
 3368|     10|    if (left->isArray() || left->getBasicType() == EbtStruct || left->getBasicType() == EbtSampler) {
  ------------------
  |  Branch (3368:9): [True: 1, False: 9]
  |  Branch (3368:28): [True: 0, False: 9]
  |  Branch (3368:65): [True: 0, False: 9]
  ------------------
 3369|      1|        switch (op) {
 3370|      0|        case EOpEqual:
  ------------------
  |  Branch (3370:9): [True: 0, False: 1]
  ------------------
 3371|      0|        case EOpNotEqual:
  ------------------
  |  Branch (3371:9): [True: 0, False: 1]
  ------------------
 3372|      0|            if (left->getBasicType() == EbtSampler) {
  ------------------
  |  Branch (3372:17): [True: 0, False: 0]
  ------------------
 3373|       |                // can't compare samplers
 3374|      0|                return false;
 3375|      0|            } else {
 3376|       |                // Promote to conditional
 3377|      0|                node.setType(TType(EbtBool));
 3378|      0|            }
 3379|       |
 3380|      0|            return true;
 3381|       |
 3382|      1|        case EOpAssign:
  ------------------
  |  Branch (3382:9): [True: 1, False: 0]
  ------------------
 3383|       |            // Keep type from above
 3384|       |
 3385|      1|            return true;
 3386|       |
 3387|      0|        default:
  ------------------
  |  Branch (3387:9): [True: 0, False: 1]
  ------------------
 3388|      0|            return false;
 3389|      1|        }
 3390|      1|    }
 3391|       |
 3392|       |    //
 3393|       |    // We now have only scalars, vectors, and matrices to worry about.
 3394|       |    //
 3395|       |
 3396|       |    // HLSL implicitly promotes bool -> int for numeric operations.
 3397|       |    // (Implicit conversions to make the operands match each other's types were already done.)
 3398|      9|    if (getSource() == EShSourceHlsl &&
  ------------------
  |  Branch (3398:9): [True: 6, False: 3]
  ------------------
 3399|      6|        (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool)) {
  ------------------
  |  Branch (3399:10): [True: 0, False: 6]
  |  Branch (3399:45): [True: 0, False: 6]
  ------------------
 3400|      0|        switch (op) {
 3401|      0|        case EOpLessThan:
  ------------------
  |  Branch (3401:9): [True: 0, False: 0]
  ------------------
 3402|      0|        case EOpGreaterThan:
  ------------------
  |  Branch (3402:9): [True: 0, False: 0]
  ------------------
 3403|      0|        case EOpLessThanEqual:
  ------------------
  |  Branch (3403:9): [True: 0, False: 0]
  ------------------
 3404|      0|        case EOpGreaterThanEqual:
  ------------------
  |  Branch (3404:9): [True: 0, False: 0]
  ------------------
 3405|       |
 3406|      0|        case EOpRightShift:
  ------------------
  |  Branch (3406:9): [True: 0, False: 0]
  ------------------
 3407|      0|        case EOpLeftShift:
  ------------------
  |  Branch (3407:9): [True: 0, False: 0]
  ------------------
 3408|       |
 3409|      0|        case EOpMod:
  ------------------
  |  Branch (3409:9): [True: 0, False: 0]
  ------------------
 3410|       |
 3411|      0|        case EOpAnd:
  ------------------
  |  Branch (3411:9): [True: 0, False: 0]
  ------------------
 3412|      0|        case EOpInclusiveOr:
  ------------------
  |  Branch (3412:9): [True: 0, False: 0]
  ------------------
 3413|      0|        case EOpExclusiveOr:
  ------------------
  |  Branch (3413:9): [True: 0, False: 0]
  ------------------
 3414|       |
 3415|      0|        case EOpAdd:
  ------------------
  |  Branch (3415:9): [True: 0, False: 0]
  ------------------
 3416|      0|        case EOpSub:
  ------------------
  |  Branch (3416:9): [True: 0, False: 0]
  ------------------
 3417|      0|        case EOpDiv:
  ------------------
  |  Branch (3417:9): [True: 0, False: 0]
  ------------------
 3418|      0|        case EOpMul:
  ------------------
  |  Branch (3418:9): [True: 0, False: 0]
  ------------------
 3419|      0|            if (left->getBasicType() == EbtBool)
  ------------------
  |  Branch (3419:17): [True: 0, False: 0]
  ------------------
 3420|      0|                left  = createConversion(EbtInt, left);
 3421|      0|            if (right->getBasicType() == EbtBool)
  ------------------
  |  Branch (3421:17): [True: 0, False: 0]
  ------------------
 3422|      0|                right = createConversion(EbtInt, right);
 3423|      0|            if (left == nullptr || right == nullptr)
  ------------------
  |  Branch (3423:17): [True: 0, False: 0]
  |  Branch (3423:36): [True: 0, False: 0]
  ------------------
 3424|      0|                return false;
 3425|      0|            node.setLeft(left);
 3426|      0|            node.setRight(right);
 3427|       |
 3428|       |            // Update the original base assumption on result type..
 3429|      0|            node.setType(left->getType());
 3430|      0|            node.getWritableType().getQualifier().clear();
 3431|       |
 3432|      0|            break;
 3433|       |
 3434|      0|        default:
  ------------------
  |  Branch (3434:9): [True: 0, False: 0]
  ------------------
 3435|      0|            break;
 3436|      0|        }
 3437|      0|    }
 3438|       |
 3439|      9|    const bool hasCoopMat = left->getType().isCoopMat() || right->getType().isCoopMat();
  ------------------
  |  Branch (3439:29): [True: 0, False: 9]
  |  Branch (3439:60): [True: 0, False: 9]
  ------------------
 3440|      9|    const bool hasLimitedFloatCoopMat =
 3441|      9|        (left->getType().isCoopMat() &&
  ------------------
  |  Branch (3441:10): [True: 0, False: 9]
  ------------------
 3442|      0|         (left->getType().containsBFloat16() || left->getType().contains8BitFloat())) ||
  ------------------
  |  Branch (3442:11): [True: 0, False: 0]
  |  Branch (3442:49): [True: 0, False: 0]
  ------------------
 3443|      9|        (right->getType().isCoopMat() &&
  ------------------
  |  Branch (3443:10): [True: 0, False: 9]
  ------------------
 3444|      0|         (right->getType().containsBFloat16() || right->getType().contains8BitFloat()));
  ------------------
  |  Branch (3444:11): [True: 0, False: 0]
  |  Branch (3444:50): [True: 0, False: 0]
  ------------------
 3445|       |
 3446|      9|    if (hasLimitedFloatCoopMat && op != EOpAssign)
  ------------------
  |  Branch (3446:9): [True: 0, False: 9]
  |  Branch (3446:35): [True: 0, False: 0]
  ------------------
 3447|      0|        return false;
 3448|       |
 3449|       |    // Do general type checks against individual operands (comparing left and right is coming up, checking mixed shapes after that)
 3450|      9|    switch (op) {
 3451|      0|    case EOpLessThan:
  ------------------
  |  Branch (3451:5): [True: 0, False: 9]
  ------------------
 3452|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (3452:5): [True: 0, False: 9]
  ------------------
 3453|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (3453:5): [True: 0, False: 9]
  ------------------
 3454|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (3454:5): [True: 0, False: 9]
  ------------------
 3455|       |        // Relational comparisons need numeric types and will promote to scalar Boolean.
 3456|      0|        if (left->getBasicType() == EbtBool)
  ------------------
  |  Branch (3456:13): [True: 0, False: 0]
  ------------------
 3457|      0|            return false;
 3458|       |
 3459|      0|        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
 3460|      0|        break;
 3461|       |
 3462|      0|    case EOpEqual:
  ------------------
  |  Branch (3462:5): [True: 0, False: 9]
  ------------------
 3463|      0|    case EOpNotEqual:
  ------------------
  |  Branch (3463:5): [True: 0, False: 9]
  ------------------
 3464|      0|        if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (3464:13): [True: 0, False: 0]
  ------------------
 3465|      0|            const int resultWidth = std::max(left->getVectorSize(), right->getVectorSize());
 3466|       |
 3467|       |            // In HLSL, == or != on vectors means component-wise comparison.
 3468|      0|            if (resultWidth > 1) {
  ------------------
  |  Branch (3468:17): [True: 0, False: 0]
  ------------------
 3469|      0|                op = (op == EOpEqual) ? EOpVectorEqual : EOpVectorNotEqual;
  ------------------
  |  Branch (3469:22): [True: 0, False: 0]
  ------------------
 3470|      0|                node.setOp(op);
 3471|      0|            }
 3472|       |
 3473|      0|            node.setType(TType(EbtBool, EvqTemporary, resultWidth));
 3474|      0|        } else {
 3475|       |            // All the above comparisons result in a bool (but not the vector compares)
 3476|      0|            node.setType(TType(EbtBool));
 3477|      0|        }
 3478|      0|        break;
 3479|       |
 3480|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (3480:5): [True: 0, False: 9]
  ------------------
 3481|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (3481:5): [True: 0, False: 9]
  ------------------
 3482|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (3482:5): [True: 0, False: 9]
  ------------------
 3483|       |        // logical ops operate only on Booleans or vectors of Booleans.
 3484|      0|        if (left->getBasicType() != EbtBool || left->isMatrix())
  ------------------
  |  Branch (3484:13): [True: 0, False: 0]
  |  Branch (3484:48): [True: 0, False: 0]
  ------------------
 3485|      0|                return false;
 3486|       |
 3487|      0|        if (getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (3487:13): [True: 0, False: 0]
  ------------------
 3488|       |            // logical ops operate only on scalar Booleans and will promote to scalar Boolean.
 3489|      0|            if (left->isVector())
  ------------------
  |  Branch (3489:17): [True: 0, False: 0]
  ------------------
 3490|      0|                return false;
 3491|      0|        }
 3492|       |
 3493|      0|        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
 3494|      0|        break;
 3495|       |
 3496|      0|    case EOpRightShift:
  ------------------
  |  Branch (3496:5): [True: 0, False: 9]
  ------------------
 3497|      0|    case EOpLeftShift:
  ------------------
  |  Branch (3497:5): [True: 0, False: 9]
  ------------------
 3498|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (3498:5): [True: 0, False: 9]
  ------------------
 3499|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (3499:5): [True: 0, False: 9]
  ------------------
 3500|       |
 3501|      0|    case EOpMod:
  ------------------
  |  Branch (3501:5): [True: 0, False: 9]
  ------------------
 3502|      0|    case EOpModAssign:
  ------------------
  |  Branch (3502:5): [True: 0, False: 9]
  ------------------
 3503|       |
 3504|      0|    case EOpAnd:
  ------------------
  |  Branch (3504:5): [True: 0, False: 9]
  ------------------
 3505|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (3505:5): [True: 0, False: 9]
  ------------------
 3506|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (3506:5): [True: 0, False: 9]
  ------------------
 3507|      0|    case EOpAndAssign:
  ------------------
  |  Branch (3507:5): [True: 0, False: 9]
  ------------------
 3508|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3508:5): [True: 0, False: 9]
  ------------------
 3509|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3509:5): [True: 0, False: 9]
  ------------------
 3510|      0|        if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (3510:13): [True: 0, False: 0]
  ------------------
 3511|      0|            break;
 3512|       |
 3513|       |        // Check for integer-only operands.
 3514|      0|        if (!isTypeInt(left->getBasicType()) && !isTypeInt(right->getBasicType()))
  ------------------
  |  Branch (3514:13): [True: 0, False: 0]
  |  Branch (3514:49): [True: 0, False: 0]
  ------------------
 3515|      0|            return false;
 3516|      0|        if (left->isMatrix() || right->isMatrix())
  ------------------
  |  Branch (3516:13): [True: 0, False: 0]
  |  Branch (3516:33): [True: 0, False: 0]
  ------------------
 3517|      0|            return false;
 3518|       |
 3519|      0|        break;
 3520|       |
 3521|      3|    case EOpAdd:
  ------------------
  |  Branch (3521:5): [True: 3, False: 6]
  ------------------
 3522|      6|    case EOpSub:
  ------------------
  |  Branch (3522:5): [True: 3, False: 6]
  ------------------
 3523|      6|    case EOpDiv:
  ------------------
  |  Branch (3523:5): [True: 0, False: 9]
  ------------------
 3524|      9|    case EOpMul:
  ------------------
  |  Branch (3524:5): [True: 3, False: 6]
  ------------------
 3525|      9|    case EOpAddAssign:
  ------------------
  |  Branch (3525:5): [True: 0, False: 9]
  ------------------
 3526|      9|    case EOpSubAssign:
  ------------------
  |  Branch (3526:5): [True: 0, False: 9]
  ------------------
 3527|      9|    case EOpMulAssign:
  ------------------
  |  Branch (3527:5): [True: 0, False: 9]
  ------------------
 3528|      9|    case EOpDivAssign:
  ------------------
  |  Branch (3528:5): [True: 0, False: 9]
  ------------------
 3529|       |        // check for non-Boolean operands
 3530|      9|        if (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool)
  ------------------
  |  Branch (3530:13): [True: 0, False: 9]
  |  Branch (3530:48): [True: 0, False: 9]
  ------------------
 3531|      0|            return false;
 3532|      9|        break;
 3533|       |
 3534|      9|    default:
  ------------------
  |  Branch (3534:5): [True: 0, False: 9]
  ------------------
 3535|      0|        break;
 3536|      9|    }
 3537|       |
 3538|       |    // Compare left and right, and finish with the cases where the operand types must match
 3539|      9|    switch (op) {
 3540|      0|    case EOpLessThan:
  ------------------
  |  Branch (3540:5): [True: 0, False: 9]
  ------------------
 3541|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (3541:5): [True: 0, False: 9]
  ------------------
 3542|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (3542:5): [True: 0, False: 9]
  ------------------
 3543|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (3543:5): [True: 0, False: 9]
  ------------------
 3544|       |
 3545|      0|    case EOpEqual:
  ------------------
  |  Branch (3545:5): [True: 0, False: 9]
  ------------------
 3546|      0|    case EOpNotEqual:
  ------------------
  |  Branch (3546:5): [True: 0, False: 9]
  ------------------
 3547|      0|    case EOpVectorEqual:
  ------------------
  |  Branch (3547:5): [True: 0, False: 9]
  ------------------
 3548|      0|    case EOpVectorNotEqual:
  ------------------
  |  Branch (3548:5): [True: 0, False: 9]
  ------------------
 3549|       |
 3550|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (3550:5): [True: 0, False: 9]
  ------------------
 3551|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (3551:5): [True: 0, False: 9]
  ------------------
 3552|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (3552:5): [True: 0, False: 9]
  ------------------
 3553|      0|        return left->getType() == right->getType();
 3554|       |
 3555|      0|    case EOpMod:
  ------------------
  |  Branch (3555:5): [True: 0, False: 9]
  ------------------
 3556|      0|    case EOpModAssign:
  ------------------
  |  Branch (3556:5): [True: 0, False: 9]
  ------------------
 3557|       |
 3558|      0|    case EOpAnd:
  ------------------
  |  Branch (3558:5): [True: 0, False: 9]
  ------------------
 3559|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (3559:5): [True: 0, False: 9]
  ------------------
 3560|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (3560:5): [True: 0, False: 9]
  ------------------
 3561|      0|    case EOpAndAssign:
  ------------------
  |  Branch (3561:5): [True: 0, False: 9]
  ------------------
 3562|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3562:5): [True: 0, False: 9]
  ------------------
 3563|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3563:5): [True: 0, False: 9]
  ------------------
 3564|       |
 3565|      3|    case EOpAdd:
  ------------------
  |  Branch (3565:5): [True: 3, False: 6]
  ------------------
 3566|      6|    case EOpSub:
  ------------------
  |  Branch (3566:5): [True: 3, False: 6]
  ------------------
 3567|      6|    case EOpDiv:
  ------------------
  |  Branch (3567:5): [True: 0, False: 9]
  ------------------
 3568|       |
 3569|      6|    case EOpAddAssign:
  ------------------
  |  Branch (3569:5): [True: 0, False: 9]
  ------------------
 3570|      6|    case EOpSubAssign:
  ------------------
  |  Branch (3570:5): [True: 0, False: 9]
  ------------------
 3571|      6|    case EOpDivAssign:
  ------------------
  |  Branch (3571:5): [True: 0, False: 9]
  ------------------
 3572|       |        // Quick out in case the types do match
 3573|      6|        if (left->getType() == right->getType())
  ------------------
  |  Branch (3573:13): [True: 6, False: 0]
  ------------------
 3574|      6|            return true;
 3575|       |
 3576|      0|        [[fallthrough]];
 3577|       |
 3578|      3|    case EOpMul:
  ------------------
  |  Branch (3578:5): [True: 3, False: 6]
  ------------------
 3579|      3|    case EOpMulAssign:
  ------------------
  |  Branch (3579:5): [True: 0, False: 9]
  ------------------
 3580|       |        // At least the basic type has to match
 3581|      3|        if (left->getBasicType() != right->getBasicType())
  ------------------
  |  Branch (3581:13): [True: 0, False: 3]
  ------------------
 3582|      0|            return false;
 3583|      3|        break;
 3584|       |
 3585|      3|    default:
  ------------------
  |  Branch (3585:5): [True: 0, False: 9]
  ------------------
 3586|      0|        break;
 3587|      9|    }
 3588|       |
 3589|      3|    if (hasCoopMat) {
  ------------------
  |  Branch (3589:9): [True: 0, False: 3]
  ------------------
 3590|       |        // Operations on two cooperative matrices must have identical types
 3591|      0|        if (left->getType().isCoopMat() && right->getType().isCoopMat() &&
  ------------------
  |  Branch (3591:13): [True: 0, False: 0]
  |  Branch (3591:44): [True: 0, False: 0]
  ------------------
 3592|      0|            left->getType() != right->getType()) {
  ------------------
  |  Branch (3592:13): [True: 0, False: 0]
  ------------------
 3593|      0|            return false;
 3594|      0|        }
 3595|      0|        switch (op) {
 3596|      0|        case EOpMul:
  ------------------
  |  Branch (3596:9): [True: 0, False: 0]
  ------------------
 3597|      0|        case EOpMulAssign:
  ------------------
  |  Branch (3597:9): [True: 0, False: 0]
  ------------------
 3598|       |            // Mul not supported in NV_cooperative_matrix
 3599|      0|            if (left->getType().isCoopMatNV() && right->getType().isCoopMatNV()) {
  ------------------
  |  Branch (3599:17): [True: 0, False: 0]
  |  Branch (3599:50): [True: 0, False: 0]
  ------------------
 3600|      0|                return false;
 3601|      0|            }
 3602|       |            // NV_cooperative_matrix supports MulAssign is for mat*=scalar only.
 3603|       |            // KHR_cooperative_matrix supports it for mat*=mat as well.
 3604|      0|            if (op == EOpMulAssign && right->getType().isCoopMatNV()) {
  ------------------
  |  Branch (3604:17): [True: 0, False: 0]
  |  Branch (3604:39): [True: 0, False: 0]
  ------------------
 3605|      0|                return false;
 3606|      0|            }
 3607|       |            // Use MatrixTimesScalar if either operand is not a matrix. Otherwise use Mul.
 3608|      0|            if (!left->getType().isCoopMat() || !right->getType().isCoopMat()) {
  ------------------
  |  Branch (3608:17): [True: 0, False: 0]
  |  Branch (3608:49): [True: 0, False: 0]
  ------------------
 3609|      0|                node.setOp(op == EOpMulAssign ? EOpMatrixTimesScalarAssign : EOpMatrixTimesScalar);
  ------------------
  |  Branch (3609:28): [True: 0, False: 0]
  ------------------
 3610|      0|            }
 3611|       |            // In case of scalar*matrix, take the result type from the matrix.
 3612|      0|            if (right->getType().isCoopMat()) {
  ------------------
  |  Branch (3612:17): [True: 0, False: 0]
  ------------------
 3613|      0|                node.setType(right->getType());
 3614|      0|            }
 3615|      0|            return true;
 3616|      0|        case EOpAdd:
  ------------------
  |  Branch (3616:9): [True: 0, False: 0]
  ------------------
 3617|      0|        case EOpSub:
  ------------------
  |  Branch (3617:9): [True: 0, False: 0]
  ------------------
 3618|      0|        case EOpDiv:
  ------------------
  |  Branch (3618:9): [True: 0, False: 0]
  ------------------
 3619|      0|        case EOpAssign:
  ------------------
  |  Branch (3619:9): [True: 0, False: 0]
  ------------------
 3620|       |            // These require both to be cooperative matrices
 3621|      0|            if (!left->getType().isCoopMat() || !right->getType().isCoopMat()) {
  ------------------
  |  Branch (3621:17): [True: 0, False: 0]
  |  Branch (3621:49): [True: 0, False: 0]
  ------------------
 3622|      0|                return false;
 3623|      0|            }
 3624|      0|            return true;
 3625|      0|        default:
  ------------------
  |  Branch (3625:9): [True: 0, False: 0]
  ------------------
 3626|      0|            break;
 3627|      0|        }
 3628|      0|        return false;
 3629|      0|    }
 3630|       |
 3631|      3|    if (left->getType().isCoopVecNV() || right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3631:9): [True: 0, False: 3]
  |  Branch (3631:42): [True: 0, False: 3]
  ------------------
 3632|       |        // Operations on two cooperative vectors must have identical types
 3633|      0|        if (left->getType().isCoopVecNV() && right->getType().isCoopVecNV() &&
  ------------------
  |  Branch (3633:13): [True: 0, False: 0]
  |  Branch (3633:46): [True: 0, False: 0]
  ------------------
 3634|      0|            left->getType() != right->getType()) {
  ------------------
  |  Branch (3634:13): [True: 0, False: 0]
  ------------------
 3635|      0|            return false;
 3636|      0|        }
 3637|      0|        switch (op) {
 3638|      0|        case EOpMul:
  ------------------
  |  Branch (3638:9): [True: 0, False: 0]
  ------------------
 3639|      0|        case EOpMulAssign:
  ------------------
  |  Branch (3639:9): [True: 0, False: 0]
  ------------------
 3640|       |            // Use VectorTimesScalar if either operand is not a vector. Otherwise use Mul.
 3641|      0|            if (!left->getType().isCoopVecNV() || !right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3641:17): [True: 0, False: 0]
  |  Branch (3641:51): [True: 0, False: 0]
  ------------------
 3642|      0|                node.setOp(op == EOpMulAssign ? EOpVectorTimesScalarAssign : EOpVectorTimesScalar);
  ------------------
  |  Branch (3642:28): [True: 0, False: 0]
  ------------------
 3643|      0|            }
 3644|       |            // In case of scalar*vector, take the result type from the vector.
 3645|      0|            if (right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3645:17): [True: 0, False: 0]
  ------------------
 3646|      0|                node.setType(right->getType());
 3647|      0|            }
 3648|      0|            return true;
 3649|      0|        case EOpLeftShift:
  ------------------
  |  Branch (3649:9): [True: 0, False: 0]
  ------------------
 3650|      0|        case EOpLeftShiftAssign:
  ------------------
  |  Branch (3650:9): [True: 0, False: 0]
  ------------------
 3651|      0|        case EOpRightShift:
  ------------------
  |  Branch (3651:9): [True: 0, False: 0]
  ------------------
 3652|      0|        case EOpRightShiftAssign:
  ------------------
  |  Branch (3652:9): [True: 0, False: 0]
  ------------------
 3653|      0|        case EOpAdd:
  ------------------
  |  Branch (3653:9): [True: 0, False: 0]
  ------------------
 3654|      0|        case EOpSub:
  ------------------
  |  Branch (3654:9): [True: 0, False: 0]
  ------------------
 3655|      0|        case EOpDiv:
  ------------------
  |  Branch (3655:9): [True: 0, False: 0]
  ------------------
 3656|      0|        case EOpAssign:
  ------------------
  |  Branch (3656:9): [True: 0, False: 0]
  ------------------
 3657|       |            // These require both to be cooperative vectors
 3658|      0|            if (!left->getType().isCoopVecNV() || !right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3658:17): [True: 0, False: 0]
  |  Branch (3658:51): [True: 0, False: 0]
  ------------------
 3659|      0|                return false;
 3660|      0|            }
 3661|      0|            return true;
 3662|      0|        default:
  ------------------
  |  Branch (3662:9): [True: 0, False: 0]
  ------------------
 3663|      0|            break;
 3664|      0|        }
 3665|      0|        return false;
 3666|      0|    }
 3667|       |
 3668|      3|    bool vectorAndLongVectorMatch = TType::vectorAndLongVectorMatch(left->getType(), right->getType());
 3669|       |
 3670|       |    // Finish handling the case, for all ops, where both operands are scalars.
 3671|      3|    if (left->isScalar() && right->isScalar())
  ------------------
  |  Branch (3671:9): [True: 3, False: 0]
  |  Branch (3671:29): [True: 3, False: 0]
  ------------------
 3672|      3|        return true;
 3673|       |
 3674|       |    // Finish handling the case, for all ops, where there are two vectors of different sizes
 3675|      0|    if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize() && right->getVectorSize() > 1)
  ------------------
  |  Branch (3675:9): [True: 0, False: 0]
  |  Branch (3675:29): [True: 0, False: 0]
  |  Branch (3675:50): [True: 0, False: 0]
  |  Branch (3675:101): [True: 0, False: 0]
  ------------------
 3676|      0|        return false;
 3677|       |
 3678|       |    // Finish handling the case, for all ops, where there are two vectors of different sizes
 3679|      0|    if (left->getType().isLongVector() && right->getType().isLongVector() && !left->getType().sameLongVectorShape(right->getType()))
  ------------------
  |  Branch (3679:9): [True: 0, False: 0]
  |  Branch (3679:43): [True: 0, False: 0]
  |  Branch (3679:78): [True: 0, False: 0]
  ------------------
 3680|      0|        return false;
 3681|       |
 3682|       |    //
 3683|       |    // We now have a mix of scalars, vectors, or matrices, for non-relational operations.
 3684|       |    //
 3685|       |
 3686|       |    // Can these two operands be combined, what is the resulting type?
 3687|      0|    TBasicType basicType = left->getBasicType();
 3688|      0|    switch (op) {
 3689|      0|    case EOpMul:
  ------------------
  |  Branch (3689:5): [True: 0, False: 0]
  ------------------
 3690|      0|        if (!left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3690:13): [True: 0, False: 0]
  |  Branch (3690:34): [True: 0, False: 0]
  ------------------
 3691|      0|            if (left->isVector()) {
  ------------------
  |  Branch (3691:17): [True: 0, False: 0]
  ------------------
 3692|      0|                if (left->getVectorSize() != right->getMatrixRows())
  ------------------
  |  Branch (3692:21): [True: 0, False: 0]
  ------------------
 3693|      0|                    return false;
 3694|      0|                node.setOp(op = EOpVectorTimesMatrix);
 3695|      0|                node.setType(TType(basicType, EvqTemporary, right->getMatrixCols()));
 3696|      0|            } else {
 3697|      0|                node.setOp(op = EOpMatrixTimesScalar);
 3698|      0|                node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), right->getMatrixRows()));
 3699|      0|            }
 3700|      0|        } else if (left->isMatrix() && !right->isMatrix()) {
  ------------------
  |  Branch (3700:20): [True: 0, False: 0]
  |  Branch (3700:40): [True: 0, False: 0]
  ------------------
 3701|      0|            if (right->isVector()) {
  ------------------
  |  Branch (3701:17): [True: 0, False: 0]
  ------------------
 3702|      0|                if (left->getMatrixCols() != right->getVectorSize())
  ------------------
  |  Branch (3702:21): [True: 0, False: 0]
  ------------------
 3703|      0|                    return false;
 3704|      0|                node.setOp(op = EOpMatrixTimesVector);
 3705|      0|                node.setType(TType(basicType, EvqTemporary, left->getMatrixRows()));
 3706|      0|            } else {
 3707|      0|                node.setOp(op = EOpMatrixTimesScalar);
 3708|      0|            }
 3709|      0|        } else if (left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3709:20): [True: 0, False: 0]
  |  Branch (3709:40): [True: 0, False: 0]
  ------------------
 3710|      0|            if (left->getMatrixCols() != right->getMatrixRows())
  ------------------
  |  Branch (3710:17): [True: 0, False: 0]
  ------------------
 3711|      0|                return false;
 3712|      0|            node.setOp(op = EOpMatrixTimesMatrix);
 3713|      0|            node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), left->getMatrixRows()));
 3714|      0|        } else if (! left->isMatrix() && ! right->isMatrix()) {
  ------------------
  |  Branch (3714:20): [True: 0, False: 0]
  |  Branch (3714:42): [True: 0, False: 0]
  ------------------
 3715|      0|            if (left->isVector() && right->isVector()) {
  ------------------
  |  Branch (3715:17): [True: 0, False: 0]
  |  Branch (3715:37): [True: 0, False: 0]
  ------------------
 3716|      0|                ; // leave as component product
 3717|      0|            } else if (left->isVector() || right->isVector()) {
  ------------------
  |  Branch (3717:24): [True: 0, False: 0]
  |  Branch (3717:44): [True: 0, False: 0]
  ------------------
 3718|      0|                node.setOp(op = EOpVectorTimesScalar);
 3719|      0|                if (right->isVector())
  ------------------
  |  Branch (3719:21): [True: 0, False: 0]
  ------------------
 3720|      0|                    node.setType(TType(basicType, EvqTemporary, right->getVectorSize()));
 3721|      0|            }
 3722|      0|        } else {
 3723|      0|            return false;
 3724|      0|        }
 3725|      0|        break;
 3726|      0|    case EOpMulAssign:
  ------------------
  |  Branch (3726:5): [True: 0, False: 0]
  ------------------
 3727|      0|        if (! left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3727:13): [True: 0, False: 0]
  |  Branch (3727:35): [True: 0, False: 0]
  ------------------
 3728|      0|            if (left->isVector()) {
  ------------------
  |  Branch (3728:17): [True: 0, False: 0]
  ------------------
 3729|      0|                if (left->getVectorSize() != right->getMatrixRows() || left->getVectorSize() != right->getMatrixCols())
  ------------------
  |  Branch (3729:21): [True: 0, False: 0]
  |  Branch (3729:72): [True: 0, False: 0]
  ------------------
 3730|      0|                    return false;
 3731|      0|                node.setOp(op = EOpVectorTimesMatrixAssign);
 3732|      0|            } else {
 3733|      0|                return false;
 3734|      0|            }
 3735|      0|        } else if (left->isMatrix() && !right->isMatrix()) {
  ------------------
  |  Branch (3735:20): [True: 0, False: 0]
  |  Branch (3735:40): [True: 0, False: 0]
  ------------------
 3736|      0|            if (right->isVector()) {
  ------------------
  |  Branch (3736:17): [True: 0, False: 0]
  ------------------
 3737|      0|                return false;
 3738|      0|            } else {
 3739|      0|                node.setOp(op = EOpMatrixTimesScalarAssign);
 3740|      0|            }
 3741|      0|        } else if (left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3741:20): [True: 0, False: 0]
  |  Branch (3741:40): [True: 0, False: 0]
  ------------------
 3742|      0|            if (left->getMatrixCols() != right->getMatrixCols() || left->getMatrixCols() != right->getMatrixRows())
  ------------------
  |  Branch (3742:17): [True: 0, False: 0]
  |  Branch (3742:68): [True: 0, False: 0]
  ------------------
 3743|      0|                return false;
 3744|      0|            node.setOp(op = EOpMatrixTimesMatrixAssign);
 3745|      0|        } else if (!left->isMatrix() && !right->isMatrix()) {
  ------------------
  |  Branch (3745:20): [True: 0, False: 0]
  |  Branch (3745:41): [True: 0, False: 0]
  ------------------
 3746|      0|            if (left->isVector() && right->isVector()) {
  ------------------
  |  Branch (3746:17): [True: 0, False: 0]
  |  Branch (3746:37): [True: 0, False: 0]
  ------------------
 3747|       |                // leave as component product
 3748|      0|            } else if (left->isVector() || right->isVector()) {
  ------------------
  |  Branch (3748:24): [True: 0, False: 0]
  |  Branch (3748:44): [True: 0, False: 0]
  ------------------
 3749|      0|                if (! left->isVector())
  ------------------
  |  Branch (3749:21): [True: 0, False: 0]
  ------------------
 3750|      0|                    return false;
 3751|      0|                node.setOp(op = EOpVectorTimesScalarAssign);
 3752|      0|            }
 3753|      0|        } else {
 3754|      0|            return false;
 3755|      0|        }
 3756|      0|        break;
 3757|       |
 3758|      0|    case EOpRightShift:
  ------------------
  |  Branch (3758:5): [True: 0, False: 0]
  ------------------
 3759|      0|    case EOpLeftShift:
  ------------------
  |  Branch (3759:5): [True: 0, False: 0]
  ------------------
 3760|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (3760:5): [True: 0, False: 0]
  ------------------
 3761|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (3761:5): [True: 0, False: 0]
  ------------------
 3762|      0|        if (right->isVector() && (! left->isVector() || right->getVectorSize() != left->getVectorSize()))
  ------------------
  |  Branch (3762:13): [True: 0, False: 0]
  |  Branch (3762:35): [True: 0, False: 0]
  |  Branch (3762:57): [True: 0, False: 0]
  ------------------
 3763|      0|            return false;
 3764|      0|        break;
 3765|       |
 3766|      0|    case EOpAssign:
  ------------------
  |  Branch (3766:5): [True: 0, False: 0]
  ------------------
 3767|      0|        if ((left->getVectorSize() != right->getVectorSize() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows()) &&
  ------------------
  |  Branch (3767:14): [True: 0, False: 0]
  |  Branch (3767:65): [True: 0, False: 0]
  |  Branch (3767:116): [True: 0, False: 0]
  ------------------
 3768|      0|            !vectorAndLongVectorMatch)
  ------------------
  |  Branch (3768:13): [True: 0, False: 0]
  ------------------
 3769|      0|            return false;
 3770|      0|        [[fallthrough]];
 3771|       |
 3772|      0|    case EOpAdd:
  ------------------
  |  Branch (3772:5): [True: 0, False: 0]
  ------------------
 3773|      0|    case EOpSub:
  ------------------
  |  Branch (3773:5): [True: 0, False: 0]
  ------------------
 3774|      0|    case EOpDiv:
  ------------------
  |  Branch (3774:5): [True: 0, False: 0]
  ------------------
 3775|      0|    case EOpMod:
  ------------------
  |  Branch (3775:5): [True: 0, False: 0]
  ------------------
 3776|      0|    case EOpAnd:
  ------------------
  |  Branch (3776:5): [True: 0, False: 0]
  ------------------
 3777|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (3777:5): [True: 0, False: 0]
  ------------------
 3778|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (3778:5): [True: 0, False: 0]
  ------------------
 3779|      0|    case EOpAddAssign:
  ------------------
  |  Branch (3779:5): [True: 0, False: 0]
  ------------------
 3780|      0|    case EOpSubAssign:
  ------------------
  |  Branch (3780:5): [True: 0, False: 0]
  ------------------
 3781|      0|    case EOpDivAssign:
  ------------------
  |  Branch (3781:5): [True: 0, False: 0]
  ------------------
 3782|      0|    case EOpModAssign:
  ------------------
  |  Branch (3782:5): [True: 0, False: 0]
  ------------------
 3783|      0|    case EOpAndAssign:
  ------------------
  |  Branch (3783:5): [True: 0, False: 0]
  ------------------
 3784|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3784:5): [True: 0, False: 0]
  ------------------
 3785|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3785:5): [True: 0, False: 0]
  ------------------
 3786|       |
 3787|      0|        if ((left->isMatrix() && right->isVector()) ||
  ------------------
  |  Branch (3787:14): [True: 0, False: 0]
  |  Branch (3787:34): [True: 0, False: 0]
  ------------------
 3788|      0|            (left->isVector() && right->isMatrix()) ||
  ------------------
  |  Branch (3788:14): [True: 0, False: 0]
  |  Branch (3788:34): [True: 0, False: 0]
  ------------------
 3789|      0|            left->getBasicType() != right->getBasicType())
  ------------------
  |  Branch (3789:13): [True: 0, False: 0]
  ------------------
 3790|      0|            return false;
 3791|      0|        if (left->isMatrix() && right->isMatrix() && (left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows()))
  ------------------
  |  Branch (3791:13): [True: 0, False: 0]
  |  Branch (3791:33): [True: 0, False: 0]
  |  Branch (3791:55): [True: 0, False: 0]
  |  Branch (3791:106): [True: 0, False: 0]
  ------------------
 3792|      0|            return false;
 3793|      0|        if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize())
  ------------------
  |  Branch (3793:13): [True: 0, False: 0]
  |  Branch (3793:33): [True: 0, False: 0]
  |  Branch (3793:54): [True: 0, False: 0]
  ------------------
 3794|      0|            return false;
 3795|      0|        if ((right->isVector() || right->isMatrix()) && !vectorAndLongVectorMatch) {
  ------------------
  |  Branch (3795:14): [True: 0, False: 0]
  |  Branch (3795:35): [True: 0, False: 0]
  |  Branch (3795:57): [True: 0, False: 0]
  ------------------
 3796|      0|            node.getWritableType().shallowCopy(right->getType());
 3797|      0|            node.getWritableType().getQualifier().makeTemporary();
 3798|      0|        }
 3799|      0|        break;
 3800|       |
 3801|      0|    default:
  ------------------
  |  Branch (3801:5): [True: 0, False: 0]
  ------------------
 3802|      0|        return false;
 3803|      0|    }
 3804|       |
 3805|       |    //
 3806|       |    // One more check for assignment.
 3807|       |    //
 3808|      0|    switch (op) {
 3809|       |    // The resulting type has to match the left operand.
 3810|      0|    case EOpAssign:
  ------------------
  |  Branch (3810:5): [True: 0, False: 0]
  ------------------
 3811|      0|    case EOpAddAssign:
  ------------------
  |  Branch (3811:5): [True: 0, False: 0]
  ------------------
 3812|      0|    case EOpSubAssign:
  ------------------
  |  Branch (3812:5): [True: 0, False: 0]
  ------------------
 3813|      0|    case EOpMulAssign:
  ------------------
  |  Branch (3813:5): [True: 0, False: 0]
  ------------------
 3814|      0|    case EOpDivAssign:
  ------------------
  |  Branch (3814:5): [True: 0, False: 0]
  ------------------
 3815|      0|    case EOpModAssign:
  ------------------
  |  Branch (3815:5): [True: 0, False: 0]
  ------------------
 3816|      0|    case EOpAndAssign:
  ------------------
  |  Branch (3816:5): [True: 0, False: 0]
  ------------------
 3817|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3817:5): [True: 0, False: 0]
  ------------------
 3818|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3818:5): [True: 0, False: 0]
  ------------------
 3819|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (3819:5): [True: 0, False: 0]
  ------------------
 3820|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (3820:5): [True: 0, False: 0]
  ------------------
 3821|      0|        if (node.getType() != left->getType())
  ------------------
  |  Branch (3821:13): [True: 0, False: 0]
  ------------------
 3822|      0|            return false;
 3823|      0|        break;
 3824|      0|    default:
  ------------------
  |  Branch (3824:5): [True: 0, False: 0]
  ------------------
 3825|      0|        break;
 3826|      0|    }
 3827|       |
 3828|      0|    return true;
 3829|      0|}
_ZN7glslang13TIntermBinary15updatePrecisionEv:
 3926|     10|{
 3927|     10|     if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
  ------------------
  |  Branch (3927:10): [True: 6, False: 4]
  |  Branch (3927:38): [True: 3, False: 1]
  ------------------
 3928|     10|         getBasicType() == EbtFloat) {
  ------------------
  |  Branch (3928:10): [True: 1, False: 0]
  ------------------
 3929|     10|       if (op == EOpRightShift || op == EOpLeftShift) {
  ------------------
  |  Branch (3929:12): [True: 0, False: 10]
  |  Branch (3929:35): [True: 0, False: 10]
  ------------------
 3930|       |         // For shifts get precision from left side only and thus no need to propagate
 3931|      0|         getQualifier().precision = left->getQualifier().precision;
 3932|     10|       } else {
 3933|     10|         getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision);
 3934|     10|         if (getQualifier().precision != EpqNone) {
  ------------------
  |  Branch (3934:14): [True: 0, False: 10]
  ------------------
 3935|      0|           left->propagatePrecision(getQualifier().precision);
 3936|      0|           right->propagatePrecision(getQualifier().precision);
 3937|      0|         }
 3938|     10|       }
 3939|     10|    }
 3940|     10|}
_ZNK7glslang13TIntermediate20promoteConstantUnionENS_10TBasicTypeEPNS_20TIntermConstantUnionE:
 3997|  5.54k|{
 3998|  5.54k|    const TConstUnionArray& rightUnionArray = node->getConstArray();
 3999|  5.54k|    int size = node->getType().computeNumComponents();
 4000|       |
 4001|  5.54k|    TConstUnionArray leftUnionArray(size);
 4002|       |
 4003|  11.0k|    for (int i=0; i < size; i++) {
  ------------------
  |  Branch (4003:19): [True: 5.54k, False: 5.54k]
  ------------------
 4004|       |
 4005|  5.54k|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
 4006|  5.54k|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
 4007|       |
 4008|  5.54k|#define TO_ALL(Get)   \
 4009|  5.54k|        switch (promoteTo) { \
 4010|  5.54k|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
 4011|  5.54k|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
 4012|  5.54k|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
 4013|  5.54k|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
 4014|  5.54k|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
 4015|  5.54k|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
 4016|  5.54k|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
 4017|  5.54k|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
 4018|  5.54k|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
 4019|  5.54k|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
 4020|  5.54k|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
 4021|  5.54k|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
 4022|  5.54k|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
 4023|  5.54k|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
 4024|  5.54k|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
 4025|  5.54k|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
 4026|  5.54k|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
 4027|  5.54k|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
 4028|  5.54k|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
 4029|  5.54k|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
 4030|  5.54k|        default: return node; \
 4031|  5.54k|        }
 4032|       |
 4033|  5.54k|        switch (node->getType().getBasicType()) {
 4034|      0|        case EbtFloat: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4034:9): [True: 0, False: 5.54k]
  ------------------
 4035|  5.54k|        case EbtInt: TO_ALL(getIConst); break;
  ------------------
  |  | 4009|  5.54k|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4027|  5.52k|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|  5.52k|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 5.52k, False: 21]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4029|     21|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|     21|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 21, False: 5.52k]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 5.54k]
  |  |  ------------------
  |  | 4031|  5.54k|        }
  ------------------
  |  Branch (4035:9): [True: 5.54k, False: 6]
  ------------------
 4036|      0|        case EbtUint: TO_ALL(getUConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4036:9): [True: 0, False: 5.54k]
  ------------------
 4037|      6|        case EbtBool: TO_ALL(getBConst); break;
  ------------------
  |  | 4009|      6|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4023|      3|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      3|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 3, False: 3]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4027|      3|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      3|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 3, False: 3]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 6]
  |  |  ------------------
  |  | 4031|      6|        }
  ------------------
  |  Branch (4037:9): [True: 6, False: 5.54k]
  ------------------
 4038|      0|        case EbtFloat16: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4038:9): [True: 0, False: 5.54k]
  ------------------
 4039|      0|        case EbtBFloat16: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4039:9): [True: 0, False: 5.54k]
  ------------------
 4040|      0|        case EbtFloatE5M2: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4040:9): [True: 0, False: 5.54k]
  ------------------
 4041|      0|        case EbtFloatE4M3: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4041:9): [True: 0, False: 5.54k]
  ------------------
 4042|      0|        case EbtFloatE2M1: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4042:9): [True: 0, False: 5.54k]
  ------------------
 4043|      0|        case EbtFloatE3M2: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4043:9): [True: 0, False: 5.54k]
  ------------------
 4044|      0|        case EbtFloatE2M3: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4044:9): [True: 0, False: 5.54k]
  ------------------
 4045|      0|        case EbtFloatUE8M0: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4045:9): [True: 0, False: 5.54k]
  ------------------
 4046|      0|        case EbtFloatMXINT8: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4046:9): [True: 0, False: 5.54k]
  ------------------
 4047|      0|        case EbtDouble: TO_ALL(getDConst); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4047:9): [True: 0, False: 5.54k]
  ------------------
 4048|      0|        case EbtInt8: TO_ALL(getI8Const); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4048:9): [True: 0, False: 5.54k]
  ------------------
 4049|      0|        case EbtInt16: TO_ALL(getI16Const); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4049:9): [True: 0, False: 5.54k]
  ------------------
 4050|      0|        case EbtInt64: TO_ALL(getI64Const); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4050:9): [True: 0, False: 5.54k]
  ------------------
 4051|      0|        case EbtUint8: TO_ALL(getU8Const); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4051:9): [True: 0, False: 5.54k]
  ------------------
 4052|      0|        case EbtUint16: TO_ALL(getU16Const); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4052:9): [True: 0, False: 5.54k]
  ------------------
 4053|      0|        case EbtUint64: TO_ALL(getU64Const); break;
  ------------------
  |  | 4009|      0|        switch (promoteTo) { \
  |  | 4010|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4010:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4011|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4011:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4012|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4012:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4013|      0|        case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4013:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4014|      0|        case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4014:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4015|      0|        case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4015:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4016|      0|        case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4016:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4017|      0|        case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4017:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4018|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4018:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4019|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4019:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4020|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4020:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4021|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4021:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4022|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4022:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4023|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4023:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4024|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4024:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4025|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4025:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4026|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4026:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4027|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4027:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4028|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 4005|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (4028:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4029|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 4006|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (4029:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4030|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (4030:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 4031|      0|        }
  ------------------
  |  Branch (4053:9): [True: 0, False: 5.54k]
  ------------------
 4054|      0|        default: return node;
  ------------------
  |  Branch (4054:9): [True: 0, False: 5.54k]
  ------------------
 4055|  5.54k|        }
 4056|  5.54k|    }
 4057|       |
 4058|  5.54k|    const TType& t = node->getType();
 4059|       |
 4060|  5.54k|    return addConstantUnion(leftUnionArray, TType(promoteTo, t.getQualifier().storage, t.getVectorSize(), t.getMatrixCols(), t.getMatrixRows()),
 4061|  5.54k|                            node->getLoc());
 4062|  5.54k|}
_ZN7glslang13TIntermediate22specConstantPropagatesERKNS_12TIntermTypedES3_:
 4075|      7|{
 4076|      7|    return (node1.getType().getQualifier().isSpecConstant() && node2.getType().getQualifier().isConstant()) ||
  ------------------
  |  Branch (4076:13): [True: 0, False: 7]
  |  Branch (4076:64): [True: 0, False: 0]
  ------------------
 4077|      7|           (node2.getType().getQualifier().isSpecConstant() && node1.getType().getQualifier().isConstant());
  ------------------
  |  Branch (4077:13): [True: 0, False: 7]
  |  Branch (4077:64): [True: 0, False: 0]
  ------------------
 4078|      7|}

_ZN7glslang17TParseContextBase13outputMessageERKNS_10TSourceLocEPKcS5_S5_NS_11TPrefixTypeEP13__va_list_tag:
   55|  4.24k|{
   56|  4.24k|    const int maxSize = MaxTokenLength + 200;
   57|  4.24k|    char szExtraInfo[maxSize];
   58|       |
   59|  4.24k|    safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
   60|       |
   61|  4.24k|    infoSink.info.prefix(prefix);
   62|  4.24k|    infoSink.info.location(loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
   63|  4.24k|    infoSink.info << "'" << szToken <<  "' : " << szReason << " " << szExtraInfo << "\n";
   64|       |
   65|  4.24k|    if (prefix == EPrefixError) {
  ------------------
  |  Branch (65:9): [True: 2.89k, False: 1.34k]
  ------------------
   66|  2.89k|        ++numErrors;
   67|  2.89k|    }
   68|  4.24k|}
_ZN7glslang17TParseContextBase5errorERKNS_10TSourceLocEPKcS5_S5_z:
   72|  1.05M|{
   73|  1.05M|    if (messages & EShMsgOnlyPreprocessor)
  ------------------
  |  Branch (73:9): [True: 1.05M, False: 1.53k]
  ------------------
   74|  1.05M|        return;
   75|       |    // If enhanced msg readability, only print one error
   76|  1.53k|    if (messages & EShMsgEnhanced && numErrors > 0)
  ------------------
  |  Branch (76:9): [True: 63, False: 1.47k]
  |  Branch (76:38): [True: 49, False: 14]
  ------------------
   77|     49|        return;
   78|  1.48k|    va_list args;
   79|  1.48k|    va_start(args, szExtraInfoFormat);
   80|  1.48k|    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
   81|  1.48k|    va_end(args);
   82|       |
   83|  1.48k|    if ((messages & EShMsgCascadingErrors) == 0)
  ------------------
  |  Branch (83:9): [True: 1.46k, False: 20]
  ------------------
   84|  1.46k|        currentScanner->setEndOfInput();
   85|  1.48k|}
_ZN7glslang17TParseContextBase4warnERKNS_10TSourceLocEPKcS5_S5_z:
   89|  1.55k|{
   90|  1.55k|    if (suppressWarnings())
  ------------------
  |  Branch (90:9): [True: 220, False: 1.33k]
  ------------------
   91|    220|        return;
   92|  1.33k|    va_list args;
   93|  1.33k|    va_start(args, szExtraInfoFormat);
   94|  1.33k|    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
   95|       |    va_end(args);
   96|  1.33k|}
_ZN7glslang17TParseContextBase7ppErrorERKNS_10TSourceLocEPKcS5_S5_z:
  100|  1.41k|{
  101|  1.41k|    va_list args;
  102|  1.41k|    va_start(args, szExtraInfoFormat);
  103|  1.41k|    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
  104|  1.41k|    va_end(args);
  105|       |
  106|  1.41k|    if ((messages & EShMsgCascadingErrors) == 0)
  ------------------
  |  Branch (106:9): [True: 1.14k, False: 270]
  ------------------
  107|  1.14k|        currentScanner->setEndOfInput();
  108|  1.41k|}
_ZN7glslang17TParseContextBase6ppWarnERKNS_10TSourceLocEPKcS5_S5_z:
  112|     11|{
  113|     11|    va_list args;
  114|     11|    va_start(args, szExtraInfoFormat);
  115|     11|    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixWarning, args);
  116|       |    va_end(args);
  117|     11|}
_ZN7glslang17TParseContextBase16lValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
  126|      4|{
  127|      4|    TIntermBinary* binaryNode = node->getAsBinaryNode();
  128|       |
  129|      4|    const char* symbol = nullptr;
  130|      4|    TIntermSymbol* symNode = node->getAsSymbolNode();
  131|      4|    if (symNode != nullptr)
  ------------------
  |  Branch (131:9): [True: 0, False: 4]
  ------------------
  132|      0|        symbol = symNode->getName().c_str();
  133|       |
  134|      4|    const char* message = nullptr;
  135|      4|    switch (node->getQualifier().storage) {
  136|      3|    case EvqConst:          message = "can't modify a const";        break;
  ------------------
  |  Branch (136:5): [True: 3, False: 1]
  ------------------
  137|      0|    case EvqConstReadOnly:  message = "can't modify a const";        break;
  ------------------
  |  Branch (137:5): [True: 0, False: 4]
  ------------------
  138|      1|    case EvqUniform:        message = "can't modify a uniform";      break;
  ------------------
  |  Branch (138:5): [True: 1, False: 3]
  ------------------
  139|      0|    case EvqBuffer:
  ------------------
  |  Branch (139:5): [True: 0, False: 4]
  ------------------
  140|      0|        if (node->getQualifier().isReadOnly())
  ------------------
  |  Branch (140:13): [True: 0, False: 0]
  ------------------
  141|      0|            message = "can't modify a readonly buffer";
  142|      0|        if (node->getQualifier().isShaderRecord())
  ------------------
  |  Branch (142:13): [True: 0, False: 0]
  ------------------
  143|      0|            message = "can't modify a shaderrecordnv qualified buffer";
  144|      0|        break;
  145|      0|    case EvqHitAttr:
  ------------------
  |  Branch (145:5): [True: 0, False: 4]
  ------------------
  146|      0|        if (language != EShLangIntersect)
  ------------------
  |  Branch (146:13): [True: 0, False: 0]
  ------------------
  147|      0|            message = "cannot modify hitAttributeNV in this stage";
  148|      0|        break;
  149|       |
  150|      0|    default:
  ------------------
  |  Branch (150:5): [True: 0, False: 4]
  ------------------
  151|       |        //
  152|       |        // Type that can't be written to?
  153|       |        //
  154|      0|        switch (node->getBasicType()) {
  155|      0|        case EbtSampler:
  ------------------
  |  Branch (155:9): [True: 0, False: 0]
  ------------------
  156|      0|            if (extensionTurnedOn(E_GL_ARB_bindless_texture) == false)
  ------------------
  |  Branch (156:17): [True: 0, False: 0]
  ------------------
  157|      0|                message = "can't modify a sampler";
  158|      0|            break;
  159|      0|        case EbtVoid:
  ------------------
  |  Branch (159:9): [True: 0, False: 0]
  ------------------
  160|      0|            message = "can't modify void";
  161|      0|            break;
  162|      0|        case EbtAtomicUint:
  ------------------
  |  Branch (162:9): [True: 0, False: 0]
  ------------------
  163|      0|            message = "can't modify an atomic_uint";
  164|      0|            break;
  165|      0|        case EbtAccStruct:
  ------------------
  |  Branch (165:9): [True: 0, False: 0]
  ------------------
  166|      0|            message = "can't modify accelerationStructureNV";
  167|      0|            break;
  168|      0|        case EbtRayQuery:
  ------------------
  |  Branch (168:9): [True: 0, False: 0]
  ------------------
  169|      0|            message = "can't modify rayQueryEXT";
  170|      0|            break;
  171|      0|        case EbtHitObjectNV:
  ------------------
  |  Branch (171:9): [True: 0, False: 0]
  ------------------
  172|      0|            message = "can't modify hitObjectNV";
  173|      0|            break;
  174|      0|        case EbtHitObjectEXT:
  ------------------
  |  Branch (174:9): [True: 0, False: 0]
  ------------------
  175|      0|            message = "can't modify hitObjectEXT";
  176|      0|            break;
  177|      0|        default:
  ------------------
  |  Branch (177:9): [True: 0, False: 0]
  ------------------
  178|      0|            break;
  179|      0|        }
  180|      4|    }
  181|       |
  182|      4|    if (message == nullptr && binaryNode == nullptr && symNode == nullptr) {
  ------------------
  |  Branch (182:9): [True: 0, False: 4]
  |  Branch (182:31): [True: 0, False: 0]
  |  Branch (182:56): [True: 0, False: 0]
  ------------------
  183|      0|        error(loc, " l-value required", op, "", "");
  184|       |
  185|      0|        return true;
  186|      0|    }
  187|       |
  188|       |    //
  189|       |    // Everything else is okay, no error.
  190|       |    //
  191|      4|    if (message == nullptr)
  ------------------
  |  Branch (191:9): [True: 0, False: 4]
  ------------------
  192|      0|    {
  193|      0|        if (binaryNode) {
  ------------------
  |  Branch (193:13): [True: 0, False: 0]
  ------------------
  194|      0|            switch (binaryNode->getOp()) {
  195|      0|            case EOpIndexDirect:
  ------------------
  |  Branch (195:13): [True: 0, False: 0]
  ------------------
  196|      0|            case EOpIndexIndirect:     // fall through
  ------------------
  |  Branch (196:13): [True: 0, False: 0]
  ------------------
  197|      0|            case EOpIndexDirectStruct: // fall through
  ------------------
  |  Branch (197:13): [True: 0, False: 0]
  ------------------
  198|      0|            case EOpVectorSwizzle:
  ------------------
  |  Branch (198:13): [True: 0, False: 0]
  ------------------
  199|      0|            case EOpMatrixSwizzle:
  ------------------
  |  Branch (199:13): [True: 0, False: 0]
  ------------------
  200|      0|                return lValueErrorCheck(loc, op, binaryNode->getLeft());
  201|      0|            default:
  ------------------
  |  Branch (201:13): [True: 0, False: 0]
  ------------------
  202|      0|                break;
  203|      0|            }
  204|      0|            error(loc, " l-value required", op, "", "");
  205|       |
  206|      0|            return true;
  207|      0|        }
  208|      0|        return false;
  209|      0|    }
  210|       |
  211|       |    //
  212|       |    // If we get here, we have an error and a message.
  213|       |    //
  214|      4|    const TIntermTyped* leftMostTypeNode = TIntermediate::traverseLValueBase(node, true);
  215|       |
  216|      4|    if (symNode)
  ------------------
  |  Branch (216:9): [True: 0, False: 4]
  ------------------
  217|      0|        error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message);
  218|      4|    else
  219|      4|        if (binaryNode && binaryNode->getAsOperator()->getOp() == EOpIndexDirectStruct)
  ------------------
  |  Branch (219:13): [True: 1, False: 3]
  |  Branch (219:27): [True: 1, False: 0]
  ------------------
  220|      1|            if(IsAnonymous(leftMostTypeNode->getAsSymbolNode()->getName()))
  ------------------
  |  Branch (220:16): [True: 1, False: 0]
  ------------------
  221|      1|                error(loc, " l-value required", op, "\"%s\" (%s)", leftMostTypeNode->getAsSymbolNode()->getAccessName().c_str(), message);
  222|      0|            else
  223|      0|                error(loc, " l-value required", op, "\"%s\" (%s)", leftMostTypeNode->getAsSymbolNode()->getName().c_str(), message);
  224|      3|        else
  225|      3|            error(loc, " l-value required", op, "(%s)", message);
  226|       |
  227|      4|    return true;
  228|      4|}
_ZN7glslang17TParseContextBase16rValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
  232|   148k|{
  233|   148k|    if (! node)
  ------------------
  |  Branch (233:9): [True: 0, False: 148k]
  ------------------
  234|      0|        return;
  235|       |
  236|   148k|    TIntermBinary* binaryNode = node->getAsBinaryNode();
  237|   148k|    const TIntermSymbol* symNode = node->getAsSymbolNode();
  238|       |
  239|   148k|    if (node->getQualifier().isWriteOnly()) {
  ------------------
  |  Branch (239:9): [True: 0, False: 148k]
  ------------------
  240|      0|        const TIntermTyped* leftMostTypeNode = TIntermediate::traverseLValueBase(node, true);
  241|       |
  242|      0|        if (symNode != nullptr)
  ------------------
  |  Branch (242:13): [True: 0, False: 0]
  ------------------
  243|      0|            error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
  244|      0|        else if (binaryNode &&
  ------------------
  |  Branch (244:18): [True: 0, False: 0]
  ------------------
  245|      0|                (binaryNode->getAsOperator()->getOp() == EOpIndexDirectStruct ||
  ------------------
  |  Branch (245:18): [True: 0, False: 0]
  ------------------
  246|      0|                 binaryNode->getAsOperator()->getOp() == EOpIndexDirect))
  ------------------
  |  Branch (246:18): [True: 0, False: 0]
  ------------------
  247|      0|            if(IsAnonymous(leftMostTypeNode->getAsSymbolNode()->getName()))
  ------------------
  |  Branch (247:16): [True: 0, False: 0]
  ------------------
  248|      0|                error(loc, "can't read from writeonly object: ", op, leftMostTypeNode->getAsSymbolNode()->getAccessName().c_str());
  249|      0|            else
  250|      0|                error(loc, "can't read from writeonly object: ", op, leftMostTypeNode->getAsSymbolNode()->getName().c_str());
  251|      0|        else
  252|      0|            error(loc, "can't read from writeonly object: ", op, "");
  253|       |
  254|   148k|    } else {
  255|   148k|        if (binaryNode) {
  ------------------
  |  Branch (255:13): [True: 0, False: 148k]
  ------------------
  256|      0|            switch (binaryNode->getOp()) {
  257|      0|            case EOpIndexDirect:
  ------------------
  |  Branch (257:13): [True: 0, False: 0]
  ------------------
  258|      0|            case EOpIndexIndirect:
  ------------------
  |  Branch (258:13): [True: 0, False: 0]
  ------------------
  259|      0|            case EOpIndexDirectStruct:
  ------------------
  |  Branch (259:13): [True: 0, False: 0]
  ------------------
  260|      0|            case EOpVectorSwizzle:
  ------------------
  |  Branch (260:13): [True: 0, False: 0]
  ------------------
  261|      0|            case EOpMatrixSwizzle:
  ------------------
  |  Branch (261:13): [True: 0, False: 0]
  ------------------
  262|      0|                rValueErrorCheck(loc, op, binaryNode->getLeft());
  263|      0|                break;
  264|      0|            default:
  ------------------
  |  Branch (264:13): [True: 0, False: 0]
  ------------------
  265|      0|                break;
  266|      0|            }
  267|      0|        }
  268|   148k|    }
  269|   148k|}
_ZN7glslang17TParseContextBase12trackLinkageERNS_7TSymbolE:
  278|   427k|{
  279|   427k|    if (!parsingBuiltins)
  ------------------
  |  Branch (279:9): [True: 8, False: 427k]
  ------------------
  280|      8|        linkageSymbols.push_back(&symbol);
  281|   427k|}
_ZN7glslang17TParseContextBase20parseSwizzleSelectorERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEEiRNS_17TSwizzleSelectorsIiEE:
  535|      3|{
  536|       |    // Too long?
  537|      3|    if (compString.size() > MaxSwizzleSelectors)
  ------------------
  |  Branch (537:9): [True: 0, False: 3]
  ------------------
  538|      0|        error(loc, "vector swizzle too long", compString.c_str(), "");
  539|       |
  540|       |    // Use this to test that all swizzle characters are from the same swizzle-namespace-set
  541|      3|    enum {
  542|      3|        exyzw,
  543|      3|        ergba,
  544|      3|        estpq,
  545|      3|        ebadswizzle,
  546|      3|    } fieldSet[MaxSwizzleSelectors];
  547|       |
  548|       |    // Decode the swizzle string.
  549|      3|    int size = std::min(MaxSwizzleSelectors, (int)compString.size());
  550|      9|    for (int i = 0; i < size; ++i) {
  ------------------
  |  Branch (550:21): [True: 6, False: 3]
  ------------------
  551|      6|        switch (compString[i])  {
  552|      0|        case 'x':
  ------------------
  |  Branch (552:9): [True: 0, False: 6]
  ------------------
  553|      0|            selector.push_back(0);
  554|      0|            fieldSet[i] = exyzw;
  555|      0|            break;
  556|      0|        case 'r':
  ------------------
  |  Branch (556:9): [True: 0, False: 6]
  ------------------
  557|      0|            selector.push_back(0);
  558|      0|            fieldSet[i] = ergba;
  559|      0|            break;
  560|      6|        case 's':
  ------------------
  |  Branch (560:9): [True: 6, False: 0]
  ------------------
  561|      6|            selector.push_back(0);
  562|      6|            fieldSet[i] = estpq;
  563|      6|            break;
  564|       |
  565|      0|        case 'y':
  ------------------
  |  Branch (565:9): [True: 0, False: 6]
  ------------------
  566|      0|            selector.push_back(1);
  567|      0|            fieldSet[i] = exyzw;
  568|      0|            break;
  569|      0|        case 'g':
  ------------------
  |  Branch (569:9): [True: 0, False: 6]
  ------------------
  570|      0|            selector.push_back(1);
  571|      0|            fieldSet[i] = ergba;
  572|      0|            break;
  573|      0|        case 't':
  ------------------
  |  Branch (573:9): [True: 0, False: 6]
  ------------------
  574|      0|            selector.push_back(1);
  575|      0|            fieldSet[i] = estpq;
  576|      0|            break;
  577|       |
  578|      0|        case 'z':
  ------------------
  |  Branch (578:9): [True: 0, False: 6]
  ------------------
  579|      0|            selector.push_back(2);
  580|      0|            fieldSet[i] = exyzw;
  581|      0|            break;
  582|      0|        case 'b':
  ------------------
  |  Branch (582:9): [True: 0, False: 6]
  ------------------
  583|      0|            selector.push_back(2);
  584|      0|            fieldSet[i] = ergba;
  585|      0|            break;
  586|      0|        case 'p':
  ------------------
  |  Branch (586:9): [True: 0, False: 6]
  ------------------
  587|      0|            selector.push_back(2);
  588|      0|            fieldSet[i] = estpq;
  589|      0|            break;
  590|       |
  591|      0|        case 'w':
  ------------------
  |  Branch (591:9): [True: 0, False: 6]
  ------------------
  592|      0|            selector.push_back(3);
  593|      0|            fieldSet[i] = exyzw;
  594|      0|            break;
  595|      0|        case 'a':
  ------------------
  |  Branch (595:9): [True: 0, False: 6]
  ------------------
  596|      0|            selector.push_back(3);
  597|      0|            fieldSet[i] = ergba;
  598|      0|            break;
  599|      0|        case 'q':
  ------------------
  |  Branch (599:9): [True: 0, False: 6]
  ------------------
  600|      0|            selector.push_back(3);
  601|      0|            fieldSet[i] = estpq;
  602|      0|            break;
  603|       |
  604|      0|        default:
  ------------------
  |  Branch (604:9): [True: 0, False: 6]
  ------------------
  605|      0|            fieldSet[i] = ebadswizzle;
  606|      0|            break;
  607|      6|        }
  608|      6|    }
  609|       |
  610|       |    // Additional error checking.
  611|      9|    for (int i = 0; i < selector.size(); ++i) {
  ------------------
  |  Branch (611:21): [True: 6, False: 3]
  ------------------
  612|      6|        if (fieldSet[i] == ebadswizzle) {
  ------------------
  |  Branch (612:13): [True: 0, False: 6]
  ------------------
  613|      0|            error(loc, "unknown swizzle selection", compString.c_str(), "");
  614|      0|            selector.resize(i);
  615|      0|            break;
  616|      0|        }
  617|       |
  618|      6|        if (selector[i] >= vecSize) {
  ------------------
  |  Branch (618:13): [True: 0, False: 6]
  ------------------
  619|      0|            error(loc, "vector swizzle selection out of range",  compString.c_str(), "");
  620|      0|            selector.resize(i);
  621|      0|            break;
  622|      0|        }
  623|       |
  624|      6|        if (i > 0 && fieldSet[i] != fieldSet[i-1]) {
  ------------------
  |  Branch (624:13): [True: 3, False: 3]
  |  Branch (624:22): [True: 0, False: 3]
  ------------------
  625|      0|            error(loc, "vector swizzle selectors not from the same set", compString.c_str(), "");
  626|      0|            selector.resize(i);
  627|      0|            break;
  628|      0|        }
  629|      6|    }
  630|       |
  631|       |    // Ensure it is valid.
  632|      3|    if (selector.size() == 0)
  ------------------
  |  Branch (632:9): [True: 0, False: 3]
  ------------------
  633|      0|        selector.push_back(0);
  634|      3|}
_ZN7glslang17TParseContextBase22growGlobalUniformBlockERKNS_10TSourceLocERNS_5TTypeERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_7TVectorINS_8TTypeLocEEE:
  641|      6|{
  642|       |    // Make the global block, if not yet made.
  643|      6|    if (globalUniformBlock == nullptr) {
  ------------------
  |  Branch (643:9): [True: 1, False: 5]
  ------------------
  644|      1|        TQualifier blockQualifier;
  645|      1|        blockQualifier.clear();
  646|      1|        blockQualifier.storage = EvqUniform;
  647|      1|        TType blockType(new TTypeList, *NewPoolTString(getGlobalUniformBlockName()), blockQualifier);
  648|      1|        setUniformBlockDefaults(blockType);
  649|      1|        globalUniformBlock = new TVariable(NewPoolTString(""), blockType, true);
  650|      1|        firstNewMember = 0;
  651|      1|    }
  652|       |
  653|       |    // Update with binding and set
  654|      6|    globalUniformBlock->getWritableType().getQualifier().layoutBinding = globalUniformBinding;
  655|      6|    globalUniformBlock->getWritableType().getQualifier().layoutSet = globalUniformSet;
  656|       |
  657|       |    // Check for declarations of this default uniform that already exist due to other compilation units.
  658|      6|    TSymbol* symbol = symbolTable.find(memberName);
  659|      6|    if (symbol) {
  ------------------
  |  Branch (659:9): [True: 0, False: 6]
  ------------------
  660|      0|        if (memberType != symbol->getType()) {
  ------------------
  |  Branch (660:13): [True: 0, False: 0]
  ------------------
  661|      0|            TString err;
  662|      0|            err += "Redeclaration: already declared as \"" + symbol->getType().getCompleteString() + "\"";
  663|      0|            error(loc, "", memberName.c_str(), err.c_str());
  664|      0|        }
  665|      0|        return;
  666|      0|    }
  667|       |
  668|       |    // Add the requested member as a member to the global block.
  669|      6|    TType* type = new TType;
  670|      6|    type->shallowCopy(memberType);
  671|      6|    type->setFieldName(memberName);
  672|      6|    if (typeList)
  ------------------
  |  Branch (672:9): [True: 0, False: 6]
  ------------------
  673|      0|        type->setStruct(typeList);
  674|      6|    TTypeLoc typeLoc = {type, loc};
  675|      6|    globalUniformBlock->getType().getWritableStruct()->push_back(typeLoc);
  676|       |
  677|       |    // Insert into the symbol table.
  678|      6|    if (firstNewMember == 0) {
  ------------------
  |  Branch (678:9): [True: 1, False: 5]
  ------------------
  679|       |        // This is the first request; we need a normal symbol table insert
  680|      1|        if (symbolTable.insert(*globalUniformBlock))
  ------------------
  |  Branch (680:13): [True: 1, False: 0]
  ------------------
  681|      1|            trackLinkage(*globalUniformBlock);
  682|      0|        else
  683|      0|            error(loc, "failed to insert the global constant buffer", "uniform", "");
  684|      5|    } else {
  685|       |        // This is a follow-on request; we need to amend the first insert
  686|      5|        symbolTable.amend(*globalUniformBlock, firstNewMember);
  687|      5|    }
  688|       |
  689|      6|    ++firstNewMember;
  690|      6|}
_ZN7glslang17TParseContextBase6finishEv:
  754|  13.3k|{
  755|  13.3k|    if (parsingBuiltins)
  ------------------
  |  Branch (755:9): [True: 12.3k, False: 1.00k]
  ------------------
  756|  12.3k|        return;
  757|       |
  758|  1.00k|    for (const TString& relaxedSymbol : relaxedSymbols)
  ------------------
  |  Branch (758:39): [True: 0, False: 1.00k]
  ------------------
  759|      0|    {
  760|      0|        TSymbol* symbol = symbolTable.find(relaxedSymbol);
  761|      0|        TType& type = symbol->getWritableType();
  762|      0|        for (const TTypeLoc& typeLoc : *type.getStruct())
  ------------------
  |  Branch (762:38): [True: 0, False: 0]
  ------------------
  763|      0|        {
  764|      0|            if (typeLoc.type->isOpaque())
  ------------------
  |  Branch (764:17): [True: 0, False: 0]
  ------------------
  765|      0|            {
  766|      0|                typeLoc.type->getSampler() = TSampler{};
  767|      0|                typeLoc.type->setBasicType(EbtInt);
  768|      0|                TString fieldName("/*");
  769|      0|                fieldName.append(typeLoc.type->getFieldName());
  770|      0|                fieldName.append("*/");
  771|      0|                typeLoc.type->setFieldName(fieldName);
  772|      0|            }
  773|      0|        }
  774|      0|    }
  775|       |
  776|       |    // Transfer the linkage symbols to AST nodes, preserving order.
  777|  1.00k|    TIntermAggregate* linkage = new TIntermAggregate;
  778|  1.00k|    for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i)
  ------------------
  |  Branch (778:43): [True: 1, False: 1.00k]
  ------------------
  779|      1|        intermediate.addSymbolLinkageNode(linkage, **i);
  780|  1.00k|    intermediate.addSymbolLinkageNodes(linkage, getLanguage(), symbolTable);
  781|  1.00k|}

_ZN7glslang13TParseContextC2ERNS_12TSymbolTableERNS_13TIntermediateEbi8EProfileRKNS_10SpvVersionE11EShLanguageR9TInfoSinkb11EShMessagesPKNSt3__112basic_stringIcNSD_11char_traitsIcEENS_14pool_allocatorIcEEEE:
   60|  13.1k|            TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language,
   61|  13.1k|                              infoSink, forwardCompatible, messages, entryPoint),
   62|  13.1k|            inMain(false),
   63|  13.1k|            blockName(nullptr),
   64|  13.1k|            limits(resources.limits),
   65|  13.1k|            atomicUintOffsets(nullptr), anyIndexLimits(false),
   66|  13.1k|            khrDerivativeLayoutQualifierSpecified(false)
   67|  13.1k|{
   68|       |    // decide whether precision qualifiers should be ignored or respected
   69|  13.1k|    if (isEsProfile() || spvVersion.vulkan > 0) {
  ------------------
  |  Branch (69:9): [True: 5.62k, False: 7.55k]
  |  Branch (69:26): [True: 795, False: 6.75k]
  ------------------
   70|  6.42k|        precisionManager.respectPrecisionQualifiers();
   71|  6.42k|        if (! parsingBuiltins && language == EShLangFragment && !isEsProfile() && spvVersion.vulkan > 0)
  ------------------
  |  Branch (71:13): [True: 514, False: 5.90k]
  |  Branch (71:34): [True: 0, False: 514]
  |  Branch (71:65): [True: 0, False: 0]
  |  Branch (71:83): [True: 0, False: 0]
  ------------------
   72|      0|            precisionManager.warnAboutDefaults();
   73|  6.42k|    }
   74|       |
   75|  13.1k|    setPrecisionDefaults();
   76|       |
   77|  13.1k|    globalUniformDefaults.clear();
   78|  13.1k|    globalUniformDefaults.layoutMatrix = ElmColumnMajor;
   79|  13.1k|    globalUniformDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd140 : ElpShared;
  ------------------
  |  Branch (79:43): [True: 11.6k, False: 1.50k]
  ------------------
   80|       |
   81|  13.1k|    globalBufferDefaults.clear();
   82|  13.1k|    globalBufferDefaults.layoutMatrix = ElmColumnMajor;
   83|  13.1k|    globalBufferDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd430 : ElpShared;
  ------------------
  |  Branch (83:42): [True: 11.6k, False: 1.50k]
  ------------------
   84|       |
   85|  13.1k|    globalInputDefaults.clear();
   86|  13.1k|    globalOutputDefaults.clear();
   87|       |
   88|  13.1k|    globalSharedDefaults.clear();
   89|  13.1k|    globalSharedDefaults.layoutMatrix = ElmColumnMajor;
   90|  13.1k|    globalSharedDefaults.layoutPacking = ElpStd430;
   91|       |
   92|       |    // "Shaders in the transform
   93|       |    // feedback capturing mode have an initial global default of
   94|       |    //     layout(xfb_buffer = 0) out;"
   95|  13.1k|    if (language == EShLangVertex ||
  ------------------
  |  Branch (95:9): [True: 4.05k, False: 9.12k]
  ------------------
   96|  9.12k|        language == EShLangTessControl ||
  ------------------
  |  Branch (96:9): [True: 953, False: 8.17k]
  ------------------
   97|  8.17k|        language == EShLangTessEvaluation ||
  ------------------
  |  Branch (97:9): [True: 953, False: 7.22k]
  ------------------
   98|  7.22k|        language == EShLangGeometry)
  ------------------
  |  Branch (98:9): [True: 953, False: 6.26k]
  ------------------
   99|  6.91k|        globalOutputDefaults.layoutXfbBuffer = 0;
  100|       |
  101|  13.1k|    if (language == EShLangGeometry)
  ------------------
  |  Branch (101:9): [True: 953, False: 12.2k]
  ------------------
  102|    953|        globalOutputDefaults.layoutStream = 0;
  103|       |
  104|  13.1k|    if (entryPoint != nullptr && entryPoint->size() > 0 && *entryPoint != "main")
  ------------------
  |  Branch (104:9): [True: 13.1k, False: 0]
  |  Branch (104:34): [True: 0, False: 13.1k]
  |  Branch (104:60): [True: 0, False: 0]
  ------------------
  105|      0|        infoSink.info.message(EPrefixError, "Source entry point must be \"main\"");
  106|  13.1k|}
_ZN7glslang13TParseContextD2Ev:
  109|  13.1k|{
  110|  13.1k|    delete [] atomicUintOffsets;
  111|  13.1k|}
_ZN7glslang13TParseContext20setPrecisionDefaultsEv:
  116|  13.1k|{
  117|       |    // Set all precision defaults to EpqNone, which is correct for all types
  118|       |    // when not obeying precision qualifiers, and correct for types that don't
  119|       |    // have defaults (thus getting an error on use) when obeying precision
  120|       |    // qualifiers.
  121|       |
  122|   527k|    for (int type = 0; type < EbtNumTypes; ++type)
  ------------------
  |  Branch (122:24): [True: 513k, False: 13.1k]
  ------------------
  123|   513k|        defaultPrecision[type] = EpqNone;
  124|       |
  125|   148M|    for (int type = 0; type < maxSamplerIndex; ++type)
  ------------------
  |  Branch (125:24): [True: 148M, False: 13.1k]
  ------------------
  126|   148M|        defaultSamplerPrecision[type] = EpqNone;
  127|       |
  128|       |    // replace with real precision defaults for those that have them
  129|  13.1k|    if (obeyPrecisionQualifiers()) {
  ------------------
  |  Branch (129:9): [True: 6.42k, False: 6.75k]
  ------------------
  130|  6.42k|        if (isEsProfile()) {
  ------------------
  |  Branch (130:13): [True: 5.62k, False: 795]
  ------------------
  131|       |            // Most don't have defaults, a few default to lowp.
  132|  5.62k|            TSampler sampler;
  133|  5.62k|            sampler.set(EbtFloat, Esd2D);
  134|  5.62k|            defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
  135|  5.62k|            sampler.set(EbtFloat, EsdCube);
  136|  5.62k|            defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
  137|  5.62k|            sampler.set(EbtFloat, Esd2D);
  138|  5.62k|            sampler.setExternal(true);
  139|  5.62k|            defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
  140|  5.62k|        }
  141|       |
  142|       |        // If we are parsing built-in computational variables/functions, it is meaningful to record
  143|       |        // whether the built-in has no precision qualifier, as that ambiguity
  144|       |        // is used to resolve the precision from the supplied arguments/operands instead.
  145|       |        // So, we don't actually want to replace EpqNone with a default precision for built-ins.
  146|  6.42k|        if (! parsingBuiltins) {
  ------------------
  |  Branch (146:13): [True: 514, False: 5.90k]
  ------------------
  147|    514|            if (isEsProfile() && language == EShLangFragment) {
  ------------------
  |  Branch (147:17): [True: 514, False: 0]
  |  Branch (147:34): [True: 0, False: 514]
  ------------------
  148|      0|                defaultPrecision[EbtInt] = EpqMedium;
  149|      0|                defaultPrecision[EbtUint] = EpqMedium;
  150|    514|            } else {
  151|    514|                defaultPrecision[EbtInt] = EpqHigh;
  152|    514|                defaultPrecision[EbtUint] = EpqHigh;
  153|    514|                defaultPrecision[EbtFloat] = EpqHigh;
  154|    514|            }
  155|       |
  156|    514|            if (!isEsProfile()) {
  ------------------
  |  Branch (156:17): [True: 0, False: 514]
  ------------------
  157|       |                // Non-ES profile
  158|       |                // All sampler precisions default to highp.
  159|      0|                for (int type = 0; type < maxSamplerIndex; ++type)
  ------------------
  |  Branch (159:36): [True: 0, False: 0]
  ------------------
  160|      0|                    defaultSamplerPrecision[type] = EpqHigh;
  161|      0|            }
  162|    514|        }
  163|       |
  164|  6.42k|        defaultPrecision[EbtSampler] = EpqLow;
  165|  6.42k|        defaultPrecision[EbtAtomicUint] = EpqHigh;
  166|  6.42k|    }
  167|  13.1k|}
_ZN7glslang13TParseContext9setLimitsERK16TBuiltInResource:
  170|    913|{
  171|    913|    resources = r;
  172|    913|    intermediate.setLimits(r);
  173|       |
  174|    913|    anyIndexLimits = ! limits.generalAttributeMatrixVectorIndexing ||
  ------------------
  |  Branch (174:22): [True: 0, False: 913]
  ------------------
  175|    913|                     ! limits.generalConstantMatrixVectorIndexing ||
  ------------------
  |  Branch (175:22): [True: 0, False: 913]
  ------------------
  176|    913|                     ! limits.generalSamplerIndexing ||
  ------------------
  |  Branch (176:22): [True: 0, False: 913]
  ------------------
  177|    913|                     ! limits.generalUniformIndexing ||
  ------------------
  |  Branch (177:22): [True: 0, False: 913]
  ------------------
  178|    913|                     ! limits.generalVariableIndexing ||
  ------------------
  |  Branch (178:22): [True: 0, False: 913]
  ------------------
  179|    913|                     ! limits.generalVaryingIndexing;
  ------------------
  |  Branch (179:22): [True: 0, False: 913]
  ------------------
  180|       |
  181|       |
  182|       |    // "Each binding point tracks its own current default offset for
  183|       |    // inheritance of subsequent variables using the same binding. The initial state of compilation is that all
  184|       |    // binding points have an offset of 0."
  185|    913|    atomicUintOffsets = new int[resources.maxAtomicCounterBindings];
  186|  1.82k|    for (int b = 0; b < resources.maxAtomicCounterBindings; ++b)
  ------------------
  |  Branch (186:21): [True: 913, False: 913]
  ------------------
  187|    913|        atomicUintOffsets[b] = 0;
  188|    913|}
_ZN7glslang13TParseContext18parseShaderStringsERNS_10TPpContextERNS_13TInputScannerEb:
  198|  13.1k|{
  199|  13.1k|    currentScanner = &input;
  200|  13.1k|    ppContext.setInput(input, versionWillBeError);
  201|  13.1k|    yyparse(this);
  202|       |
  203|  13.1k|    finish();
  204|       |
  205|  13.1k|    return numErrors == 0;
  206|  13.1k|}
_ZN7glslang13TParseContext11parserErrorEPKc:
  213|  1.23k|{
  214|  1.23k|    if (! getScanner()->atEndOfInput() || numErrors == 0)
  ------------------
  |  Branch (214:9): [True: 579, False: 655]
  |  Branch (214:43): [True: 0, False: 655]
  ------------------
  215|    579|        error(getCurrentLoc(), "", "", s, "");
  216|    655|    else
  217|    655|        error(getCurrentLoc(), "compilation terminated", "", "");
  218|  1.23k|}
_ZN7glslang13TParseContext14handleVariableERKNS_10TSourceLocEPNS_7TSymbolEPKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  454|      8|{
  455|      8|    TIntermTyped* node = nullptr;
  456|       |
  457|       |    // Error check for requiring specific extensions present.
  458|      8|    if (symbol && symbol->getNumExtensions())
  ------------------
  |  Branch (458:9): [True: 0, False: 8]
  |  Branch (458:19): [True: 0, False: 0]
  ------------------
  459|      0|        requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
  460|       |
  461|      8|    if (symbol && symbol->isReadOnly()) {
  ------------------
  |  Branch (461:9): [True: 0, False: 8]
  |  Branch (461:19): [True: 0, False: 0]
  ------------------
  462|       |        // All shared things containing an unsized array must be copied up
  463|       |        // on first use, so that all future references will share its array structure,
  464|       |        // so that editing the implicit size will effect all nodes consuming it,
  465|       |        // and so that editing the implicit size won't change the shared one.
  466|       |        //
  467|       |        // If this is a variable or a block, check it and all it contains, but if this
  468|       |        // is a member of an anonymous block, check the whole block, as the whole block
  469|       |        // will need to be copied up if it contains an unsized array.
  470|       |        //
  471|       |        // This check is being done before the block-name check further down, so guard
  472|       |        // for that too.
  473|      0|        if (!symbol->getType().isUnusableName()) {
  ------------------
  |  Branch (473:13): [True: 0, False: 0]
  ------------------
  474|      0|            if (symbol->getType().containsUnsizedArray() ||
  ------------------
  |  Branch (474:17): [True: 0, False: 0]
  ------------------
  475|      0|                (symbol->getAsAnonMember() &&
  ------------------
  |  Branch (475:18): [True: 0, False: 0]
  ------------------
  476|      0|                 symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
  ------------------
  |  Branch (476:18): [True: 0, False: 0]
  ------------------
  477|      0|                makeEditable(symbol);
  478|      0|        }
  479|      0|    }
  480|       |
  481|      8|    const TVariable* variable;
  482|      8|    const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr;
  ------------------
  |  Branch (482:31): [True: 0, False: 8]
  ------------------
  483|      8|    if (anon) {
  ------------------
  |  Branch (483:9): [True: 0, False: 8]
  ------------------
  484|       |        // It was a member of an anonymous container.
  485|       |
  486|       |        // Create a subtree for its dereference.
  487|      0|        variable = anon->getAnonContainer().getAsVariable();
  488|      0|        TIntermTyped* container = intermediate.addSymbol(*variable, loc);
  489|      0|        TIntermTyped* constNode = intermediate.addConstantUnion(anon->getMemberNumber(), loc);
  490|      0|        node = intermediate.addIndex(EOpIndexDirectStruct, container, constNode, loc);
  491|       |
  492|      0|        node->setType(*(*variable->getType().getStruct())[anon->getMemberNumber()].type);
  493|      0|        if (node->getType().hiddenMember())
  ------------------
  |  Branch (493:13): [True: 0, False: 0]
  ------------------
  494|      0|            error(loc, "member of nameless block was not redeclared", string->c_str(), "");
  495|      8|    } else {
  496|       |        // Not a member of an anonymous container.
  497|       |
  498|       |        // The symbol table search was done in the lexical phase.
  499|       |        // See if it was a variable.
  500|      8|        variable = symbol ? symbol->getAsVariable() : nullptr;
  ------------------
  |  Branch (500:20): [True: 0, False: 8]
  ------------------
  501|      8|        if (variable) {
  ------------------
  |  Branch (501:13): [True: 0, False: 8]
  ------------------
  502|      0|            if (variable->getType().isUnusableName()) {
  ------------------
  |  Branch (502:17): [True: 0, False: 0]
  ------------------
  503|      0|                error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), "");
  504|      0|                variable = nullptr;
  505|      0|            }
  506|       |
  507|      0|            if (language == EShLangMesh && variable) {
  ------------------
  |  Branch (507:17): [True: 0, False: 0]
  |  Branch (507:44): [True: 0, False: 0]
  ------------------
  508|      0|                TLayoutGeometry primitiveType = intermediate.getOutputPrimitive();
  509|      0|                if ((variable->getMangledName() == "gl_PrimitiveTriangleIndicesEXT" && primitiveType != ElgTriangles) ||
  ------------------
  |  Branch (509:22): [True: 0, False: 0]
  |  Branch (509:88): [True: 0, False: 0]
  ------------------
  510|      0|                    (variable->getMangledName() == "gl_PrimitiveLineIndicesEXT" && primitiveType != ElgLines) ||
  ------------------
  |  Branch (510:22): [True: 0, False: 0]
  |  Branch (510:84): [True: 0, False: 0]
  ------------------
  511|      0|                    (variable->getMangledName() == "gl_PrimitivePointIndicesEXT" && primitiveType != ElgPoints)) {
  ------------------
  |  Branch (511:22): [True: 0, False: 0]
  |  Branch (511:85): [True: 0, False: 0]
  ------------------
  512|      0|                    error(loc, "cannot be used (output primitive type mismatch)", string->c_str(), "");
  513|      0|                    variable = nullptr;
  514|      0|                }
  515|      0|            }
  516|      8|        } else {
  517|      8|            if (symbol)
  ------------------
  |  Branch (517:17): [True: 0, False: 8]
  ------------------
  518|      0|                error(loc, "variable name expected", string->c_str(), "");
  519|      8|        }
  520|       |
  521|       |        // Recovery, if it wasn't found or was not a variable.
  522|      8|        if (! variable) {
  ------------------
  |  Branch (522:13): [True: 8, False: 0]
  ------------------
  523|      8|            bool builtIn = false;
  524|      8|            TVector<const TFunction*> candidateList;
  525|      8|            symbolTable.findFunctionNameList(*string + "(", candidateList, builtIn);
  526|       |
  527|       |            // If it's a function, pass the name/mangledName
  528|      8|            if (!candidateList.empty() && !builtIn) {
  ------------------
  |  Branch (528:17): [True: 1, False: 7]
  |  Branch (528:43): [True: 1, False: 0]
  ------------------
  529|      1|                variable = new TVariable(&candidateList[0]->getName(), &candidateList[0]->getMangledName(), TType(EbtFunction));
  530|      7|            } else {
  531|      7|                variable = new TVariable(string, TType(EbtVoid));
  532|      7|            }
  533|      8|        }
  534|       |
  535|       |        // Track use of gl_RayFlagsForceOpacityMicromap2StateEXT before the front-end
  536|       |        // constant fold loses the name. Referencing this built-in is the GLSL-level
  537|       |        // signal that the SPIR-V RayFlags bit ForceOpacityMicromap2StateKHR (0x400)
  538|       |        // will reach a trace / ray-query call, which requires the
  539|       |        // RayTracingOpacityMicromapEXT capability.
  540|      8|        if (variable->getName() == "gl_RayFlagsForceOpacityMicromap2StateEXT")
  ------------------
  |  Branch (540:13): [True: 0, False: 8]
  ------------------
  541|      0|            intermediate.setUsesOpacityMicromap2StateFlag();
  542|       |
  543|      8|        if (variable->getType().getQualifier().isFrontEndConstant())
  ------------------
  |  Branch (543:13): [True: 0, False: 8]
  ------------------
  544|      0|            node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc);
  545|      8|        else
  546|      8|            node = intermediate.addSymbol(*variable, loc);
  547|      8|    }
  548|       |
  549|      8|    if (variable->getType().getQualifier().isIo())
  ------------------
  |  Branch (549:9): [True: 0, False: 8]
  ------------------
  550|      0|        intermediate.addIoAccessed(*string);
  551|       |
  552|      8|    if (variable->getType().isReference() &&
  ------------------
  |  Branch (552:9): [True: 0, False: 8]
  ------------------
  553|      0|        variable->getType().getQualifier().bufferReferenceNeedsVulkanMemoryModel()) {
  ------------------
  |  Branch (553:9): [True: 0, False: 0]
  ------------------
  554|      0|        intermediate.setUseVulkanMemoryModel();
  555|      0|    }
  556|       |
  557|      8|    return node;
  558|      8|}
_ZNK7glslang13TParseContext15isIoResizeArrayERKNS_5TTypeE:
  757|  6.54k|{
  758|  6.54k|    return type.isArray() &&
  ------------------
  |  Branch (758:12): [True: 3.68k, False: 2.85k]
  ------------------
  759|  3.68k|           ((language == EShLangGeometry    && type.getQualifier().storage == EvqVaryingIn) ||
  ------------------
  |  Branch (759:14): [True: 946, False: 2.74k]
  |  Branch (759:48): [True: 946, False: 0]
  ------------------
  760|  2.74k|            (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut &&
  ------------------
  |  Branch (760:14): [True: 953, False: 1.78k]
  |  Branch (760:48): [True: 953, False: 0]
  ------------------
  761|    953|                ! type.getQualifier().patch) ||
  ------------------
  |  Branch (761:17): [True: 953, False: 0]
  ------------------
  762|  1.78k|            (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
  ------------------
  |  Branch (762:14): [True: 0, False: 1.78k]
  |  Branch (762:45): [True: 0, False: 0]
  ------------------
  763|      0|                (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) ||
  ------------------
  |  Branch (763:18): [True: 0, False: 0]
  |  Branch (763:53): [True: 0, False: 0]
  ------------------
  764|  1.78k|            (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut &&
  ------------------
  |  Branch (764:14): [True: 1.78k, False: 1]
  |  Branch (764:41): [True: 1.78k, False: 0]
  ------------------
  765|  1.78k|                !type.getQualifier().perTaskNV));
  ------------------
  |  Branch (765:17): [True: 1.78k, False: 0]
  ------------------
  766|  6.54k|}
_ZN7glslang13TParseContext14fixIoArraySizeERKNS_10TSourceLocERNS_5TTypeE:
  770|  2.85k|{
  771|  2.85k|    if (! type.isArray() || type.getQualifier().patch || symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (771:9): [True: 2.85k, False: 1]
  |  Branch (771:29): [True: 0, False: 1]
  |  Branch (771:58): [True: 0, False: 1]
  ------------------
  772|  2.85k|        return;
  773|       |
  774|  2.85k|    assert(! isIoResizeArray(type));
  775|       |
  776|      1|    if (type.getQualifier().storage != EvqVaryingIn || type.getQualifier().patch)
  ------------------
  |  Branch (776:9): [True: 1, False: 0]
  |  Branch (776:56): [True: 0, False: 0]
  ------------------
  777|      1|        return;
  778|       |
  779|      0|    if (language == EShLangTessControl || language == EShLangTessEvaluation) {
  ------------------
  |  Branch (779:9): [True: 0, False: 0]
  |  Branch (779:43): [True: 0, False: 0]
  ------------------
  780|      0|        if (type.getOuterArraySize() != resources.maxPatchVertices) {
  ------------------
  |  Branch (780:13): [True: 0, False: 0]
  ------------------
  781|      0|            if (type.isSizedArray())
  ------------------
  |  Branch (781:17): [True: 0, False: 0]
  ------------------
  782|      0|                error(loc, "tessellation input array size must be gl_MaxPatchVertices or implicitly sized", "[]", "");
  783|      0|            type.changeOuterArraySize(resources.maxPatchVertices);
  784|      0|        }
  785|      0|    }
  786|      0|}
_ZN7glslang13TParseContext12ioArrayCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  792|   408k|{
  793|   408k|    if (! type.isArray() && ! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (793:9): [True: 408k, False: 0]
  |  Branch (793:29): [True: 1, False: 408k]
  ------------------
  794|      1|        if (type.getQualifier().isArrayedIo(language) && !type.getQualifier().layoutPassthrough)
  ------------------
  |  Branch (794:13): [True: 0, False: 1]
  |  Branch (794:58): [True: 0, False: 0]
  ------------------
  795|      0|            error(loc, "type must be an array:", type.getStorageQualifierString(), identifier.c_str());
  796|      1|    }
  797|   408k|}
_ZN7glslang13TParseContext24checkIoArraysConsistencyERKNS_10TSourceLocEb:
  826|  3.68k|{
  827|  3.68k|    int requiredSize = 0;
  828|  3.68k|    TString featureString;
  829|  3.68k|    size_t listSize = ioArraySymbolResizeList.size();
  830|  3.68k|    size_t i = 0;
  831|       |
  832|       |    // If tailOnly = true, only check the last array symbol in the list.
  833|  3.68k|    if (tailOnly) {
  ------------------
  |  Branch (833:9): [True: 3.68k, False: 0]
  ------------------
  834|  3.68k|        i = listSize - 1;
  835|  3.68k|    }
  836|  3.68k|    for (bool firstIteration = true; i < listSize; ++i) {
  ------------------
  |  Branch (836:38): [True: 3.68k, False: 0]
  ------------------
  837|  3.68k|        TType &type = ioArraySymbolResizeList[i]->getWritableType();
  838|       |
  839|       |        // As I/O array sizes don't change, fetch requiredSize only once,
  840|       |        // except for mesh shaders which could have different I/O array sizes based on type qualifiers.
  841|  3.68k|        if (firstIteration || (language == EShLangMesh)) {
  ------------------
  |  Branch (841:13): [True: 3.68k, False: 0]
  |  Branch (841:31): [True: 0, False: 0]
  ------------------
  842|  3.68k|            requiredSize = getIoArrayImplicitSize(type.getQualifier(), &featureString);
  843|  3.68k|            if (requiredSize == 0)
  ------------------
  |  Branch (843:17): [True: 3.68k, False: 0]
  ------------------
  844|  3.68k|                break;
  845|      0|            firstIteration = false;
  846|      0|        }
  847|       |
  848|      0|        checkIoArrayConsistency(loc, requiredSize, featureString.c_str(), type,
  849|      0|                                ioArraySymbolResizeList[i]->getName());
  850|      0|    }
  851|  3.68k|}
_ZNK7glslang13TParseContext22getIoArrayImplicitSizeERKNS_10TQualifierEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  854|  3.68k|{
  855|  3.68k|    int expectedSize = 0;
  856|  3.68k|    TString str = "unknown";
  857|  3.68k|    unsigned int maxVertices = intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
  ------------------
  |  Branch (857:32): [True: 0, False: 3.68k]
  ------------------
  858|       |
  859|  3.68k|    if (language == EShLangGeometry) {
  ------------------
  |  Branch (859:9): [True: 946, False: 2.74k]
  ------------------
  860|    946|        expectedSize = TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
  861|    946|        str = TQualifier::getGeometryString(intermediate.getInputPrimitive());
  862|    946|    }
  863|  2.74k|    else if (language == EShLangTessControl) {
  ------------------
  |  Branch (863:14): [True: 953, False: 1.78k]
  ------------------
  864|    953|        expectedSize = maxVertices;
  865|    953|        str = "vertices";
  866|  1.78k|    } else if (language == EShLangFragment) {
  ------------------
  |  Branch (866:16): [True: 0, False: 1.78k]
  ------------------
  867|       |        // Number of vertices for Fragment shader is always three.
  868|      0|        expectedSize = 3;
  869|      0|        str = "vertices";
  870|  1.78k|    } else if (language == EShLangMesh) {
  ------------------
  |  Branch (870:16): [True: 1.78k, False: 0]
  ------------------
  871|  1.78k|        unsigned int maxPrimitives =
  872|  1.78k|            intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
  ------------------
  |  Branch (872:13): [True: 0, False: 1.78k]
  ------------------
  873|  1.78k|        if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
  ------------------
  |  Branch (873:13): [True: 0, False: 1.78k]
  ------------------
  874|      0|            expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
  875|      0|            str = "max_primitives*";
  876|      0|            str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
  877|      0|        }
  878|  1.78k|        else if (qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT || qualifier.builtIn == EbvPrimitiveLineIndicesEXT ||
  ------------------
  |  Branch (878:18): [True: 0, False: 1.78k]
  |  Branch (878:73): [True: 0, False: 1.78k]
  ------------------
  879|  1.78k|                 qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
  ------------------
  |  Branch (879:18): [True: 0, False: 1.78k]
  ------------------
  880|      0|            expectedSize = maxPrimitives;
  881|      0|            str = "max_primitives";
  882|      0|        }
  883|  1.78k|        else if (qualifier.isPerPrimitive()) {
  ------------------
  |  Branch (883:18): [True: 894, False: 894]
  ------------------
  884|    894|            expectedSize = maxPrimitives;
  885|    894|            str = "max_primitives";
  886|    894|        }
  887|    894|        else {
  888|    894|            expectedSize = maxVertices;
  889|    894|            str = "max_vertices";
  890|    894|        }
  891|  1.78k|    }
  892|  3.68k|    if (featureString)
  ------------------
  |  Branch (892:9): [True: 3.68k, False: 0]
  ------------------
  893|  3.68k|        *featureString = str;
  894|  3.68k|    return expectedSize;
  895|  3.68k|}
_ZN7glslang13TParseContext16handleBinaryMathERKNS_10TSourceLocEPKcNS_9TOperatorEPNS_12TIntermTypedES8_:
  920|      3|{
  921|      3|    rValueErrorCheck(loc, str, left->getAsTyped());
  922|      3|    rValueErrorCheck(loc, str, right->getAsTyped());
  923|       |
  924|      3|    bool allowed = true;
  925|      3|    switch (op) {
  926|       |    // TODO: Bring more source language-specific checks up from intermediate.cpp
  927|       |    // to the specific parse helpers for that source language.
  928|      0|    case EOpLessThan:
  ------------------
  |  Branch (928:5): [True: 0, False: 3]
  ------------------
  929|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (929:5): [True: 0, False: 3]
  ------------------
  930|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (930:5): [True: 0, False: 3]
  ------------------
  931|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (931:5): [True: 0, False: 3]
  ------------------
  932|      0|        if (! left->isScalar() || ! right->isScalar())
  ------------------
  |  Branch (932:13): [True: 0, False: 0]
  |  Branch (932:35): [True: 0, False: 0]
  ------------------
  933|      0|            allowed = false;
  934|      0|        break;
  935|      3|    default:
  ------------------
  |  Branch (935:5): [True: 3, False: 0]
  ------------------
  936|      3|        break;
  937|      3|    }
  938|       |
  939|      3|    if (((left->getType().contains16BitFloat() || right->getType().contains16BitFloat()) && !float16Arithmetic()) ||
  ------------------
  |  Branch (939:11): [True: 0, False: 3]
  |  Branch (939:51): [True: 0, False: 3]
  |  Branch (939:93): [True: 0, False: 0]
  ------------------
  940|      3|        ((left->getType().contains16BitInt() || right->getType().contains16BitInt()) && !int16Arithmetic()) ||
  ------------------
  |  Branch (940:11): [True: 0, False: 3]
  |  Branch (940:49): [True: 0, False: 3]
  |  Branch (940:89): [True: 0, False: 0]
  ------------------
  941|      3|        ((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic()) ||
  ------------------
  |  Branch (941:11): [True: 0, False: 3]
  |  Branch (941:48): [True: 0, False: 3]
  |  Branch (941:87): [True: 0, False: 0]
  ------------------
  942|      3|        (left->getType().containsBFloat16() || right->getType().containsBFloat16()) ||
  ------------------
  |  Branch (942:10): [True: 0, False: 3]
  |  Branch (942:48): [True: 0, False: 3]
  ------------------
  943|      3|        (left->getType().contains8BitFloat() || right->getType().contains8BitFloat()) ||
  ------------------
  |  Branch (943:10): [True: 0, False: 3]
  |  Branch (943:49): [True: 0, False: 3]
  ------------------
  944|      3|        (left->getType().containsOcpMicroscalingFloat() || right->getType().containsOcpMicroscalingFloat())) {
  ------------------
  |  Branch (944:10): [True: 0, False: 3]
  |  Branch (944:60): [True: 0, False: 3]
  ------------------
  945|      0|        allowed = false;
  946|      0|    }
  947|       |
  948|      3|    TIntermTyped* result = nullptr;
  949|      3|    if (allowed) {
  ------------------
  |  Branch (949:9): [True: 3, False: 0]
  ------------------
  950|      3|        if ((left->isReference() || right->isReference()))
  ------------------
  |  Branch (950:14): [True: 0, False: 3]
  |  Branch (950:37): [True: 0, False: 3]
  ------------------
  951|      0|            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "buffer reference math");
  952|      3|        result = intermediate.addBinaryMath(op, left, right, loc);
  953|      3|    }
  954|       |
  955|      3|    if (result == nullptr) {
  ------------------
  |  Branch (955:9): [True: 0, False: 3]
  ------------------
  956|      0|        bool enhanced = intermediate.getEnhancedMsgs();
  957|      0|        binaryOpError(loc, str, left->getCompleteString(enhanced), right->getCompleteString(enhanced));
  958|      0|    }
  959|       |
  960|      3|    return result;
  961|      3|}
_ZN7glslang13TParseContext15handleUnaryMathERKNS_10TSourceLocEPKcNS_9TOperatorEPNS_12TIntermTypedE:
  965|    899|{
  966|    899|    rValueErrorCheck(loc, str, childNode);
  967|       |
  968|    899|    bool allowed = true;
  969|    899|    if ((childNode->getType().contains16BitFloat() && !float16Arithmetic()) ||
  ------------------
  |  Branch (969:10): [True: 0, False: 899]
  |  Branch (969:55): [True: 0, False: 0]
  ------------------
  970|    899|        (childNode->getType().contains16BitInt() && !int16Arithmetic()) ||
  ------------------
  |  Branch (970:10): [True: 0, False: 899]
  |  Branch (970:53): [True: 0, False: 0]
  ------------------
  971|    899|        (childNode->getType().contains8BitInt() && !int8Arithmetic()) ||
  ------------------
  |  Branch (971:10): [True: 0, False: 899]
  |  Branch (971:52): [True: 0, False: 0]
  ------------------
  972|    899|        (childNode->getType().containsBFloat16()) ||
  ------------------
  |  Branch (972:9): [True: 0, False: 899]
  ------------------
  973|    899|        (childNode->getType().contains8BitFloat()) ||
  ------------------
  |  Branch (973:9): [True: 0, False: 899]
  ------------------
  974|    899|        (childNode->getType().containsOcpMicroscalingFloat())) {
  ------------------
  |  Branch (974:9): [True: 0, False: 899]
  ------------------
  975|      0|        allowed = false;
  976|      0|    }
  977|       |
  978|    899|    TIntermTyped* result = nullptr;
  979|    899|    if (allowed)
  ------------------
  |  Branch (979:9): [True: 899, False: 0]
  ------------------
  980|    899|        result = intermediate.addUnaryMath(op, childNode, loc);
  981|       |
  982|    899|    if (result)
  ------------------
  |  Branch (982:9): [True: 896, False: 3]
  ------------------
  983|    896|        return result;
  984|      3|    else {
  985|      3|        bool enhanced = intermediate.getEnhancedMsgs();
  986|      3|        unaryOpError(loc, str, childNode->getCompleteString(enhanced));
  987|      3|    }
  988|       |
  989|      3|    return childNode;
  990|    899|}
_ZN7glslang13TParseContext24handleFunctionDeclaratorERKNS_10TSourceLocERNS_9TFunctionEb:
 1210|  11.0M|{
 1211|       |    // ES can't declare prototypes inside functions
 1212|  11.0M|    if (! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (1212:9): [True: 0, False: 11.0M]
  ------------------
 1213|      0|        requireProfile(loc, ~EEsProfile, "local function declaration");
 1214|       |
 1215|       |    //
 1216|       |    // Multiple declarations of the same function name are allowed.
 1217|       |    //
 1218|       |    // If this is a definition, the definition production code will check for redefinitions
 1219|       |    // (we don't know at this point if it's a definition or not).
 1220|       |    //
 1221|       |    // Redeclarations (full signature match) are allowed.  But, return types and parameter qualifiers must also match.
 1222|       |    //  - except ES 100, which only allows a single prototype
 1223|       |    //
 1224|       |    // ES 100 does not allow redefining, but does allow overloading of built-in functions.
 1225|       |    // ES 300 does not allow redefining or overloading of built-in functions.
 1226|       |    //
 1227|  11.0M|    bool builtIn;
 1228|  11.0M|    TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn);
 1229|  11.0M|    if (symbol && symbol->getAsFunction() && builtIn)
  ------------------
  |  Branch (1229:9): [True: 51.0k, False: 10.9M]
  |  Branch (1229:19): [True: 51.0k, False: 0]
  |  Branch (1229:46): [True: 51.0k, False: 0]
  ------------------
 1230|  51.0k|        requireProfile(loc, ~EEsProfile, "redefinition of built-in function");
 1231|       |    // Check the validity of using spirv_literal qualifier
 1232|  39.1M|    for (int i = 0; i < function.getParamCount(); ++i) {
  ------------------
  |  Branch (1232:21): [True: 28.0M, False: 11.0M]
  ------------------
 1233|  28.0M|        if (function[i].type->getQualifier().isSpirvLiteral() && function.getBuiltInOp() != EOpSpirvInst)
  ------------------
  |  Branch (1233:13): [True: 0, False: 28.0M]
  |  Branch (1233:66): [True: 0, False: 0]
  ------------------
 1234|      0|            error(loc, "'spirv_literal' can only be used on functions defined with 'spirv_instruction' for argument",
 1235|      0|                  function.getName().c_str(), "%d", i + 1);
 1236|  28.0M|    }
 1237|       |
 1238|       |    // For function declaration with SPIR-V instruction qualifier, always ignore the built-in function and
 1239|       |    // respect this redeclared one.
 1240|  11.0M|    if (symbol && builtIn && function.getBuiltInOp() == EOpSpirvInst)
  ------------------
  |  Branch (1240:9): [True: 51.0k, False: 10.9M]
  |  Branch (1240:19): [True: 51.0k, False: 0]
  |  Branch (1240:30): [True: 0, False: 51.0k]
  ------------------
 1241|      0|        symbol = nullptr;
 1242|  11.0M|    const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
  ------------------
  |  Branch (1242:32): [True: 51.0k, False: 10.9M]
  ------------------
 1243|  11.0M|    if (prevDec) {
  ------------------
  |  Branch (1243:9): [True: 51.0k, False: 10.9M]
  ------------------
 1244|  51.0k|        if (prevDec->isPrototyped() && prototype)
  ------------------
  |  Branch (1244:13): [True: 0, False: 51.0k]
  |  Branch (1244:40): [True: 0, False: 0]
  ------------------
 1245|      0|            profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function");
 1246|  51.0k|        if (prevDec->getSpirvInstruction() != function.getSpirvInstruction()) {
  ------------------
  |  Branch (1246:13): [True: 0, False: 51.0k]
  ------------------
 1247|      0|            error(loc, "overloaded functions must have the same qualifiers", function.getName().c_str(),
 1248|      0|                  "spirv_instruction");
 1249|      0|        }
 1250|  51.0k|        bool parameterTypesDiffer = false;
 1251|   175k|        for (int i = 0; i < prevDec->getParamCount(); ++i) {
  ------------------
  |  Branch (1251:25): [True: 124k, False: 51.0k]
  ------------------
 1252|   124k|            if ((*prevDec)[i].type->getQualifier().storage != function[i].type->getQualifier().storage)
  ------------------
  |  Branch (1252:17): [True: 0, False: 124k]
  ------------------
 1253|      0|                error(loc, "overloaded functions must have the same parameter storage qualifiers for argument", function[i].type->getStorageQualifierString(), "%d", i+1);
 1254|       |
 1255|   124k|            if ((*prevDec)[i].type->getQualifier().precision != function[i].type->getQualifier().precision)
  ------------------
  |  Branch (1255:17): [True: 0, False: 124k]
  ------------------
 1256|      0|                error(loc, "overloaded functions must have the same parameter precision qualifiers for argument", function[i].type->getPrecisionQualifierString(), "%d", i+1);
 1257|       |
 1258|   124k|            if (*(*prevDec)[i].type != *function[i].type)
  ------------------
  |  Branch (1258:17): [True: 0, False: 124k]
  ------------------
 1259|      0|                parameterTypesDiffer = true;
 1260|   124k|        }
 1261|  51.0k|        if (!parameterTypesDiffer && prevDec->getType() != function.getType())
  ------------------
  |  Branch (1261:13): [True: 51.0k, False: 0]
  |  Branch (1261:38): [True: 0, False: 51.0k]
  ------------------
 1262|      0|            error(loc, "overloaded functions must have the same return type", function.getName().c_str(), "");
 1263|       |
 1264|  51.0k|        function.addFunctionControl(prevDec->getFunctionControl());
 1265|  51.0k|        unsigned functionControl = function.getFunctionControl();
 1266|  51.0k|        if (function.hasIncompatibleFunctionControl())
  ------------------
  |  Branch (1266:13): [True: 0, False: 51.0k]
  ------------------
 1267|      0|            error(loc, "function attributes are incompatible", function.getName().c_str(), "");
 1268|  51.0k|        if (!builtIn)
  ------------------
  |  Branch (1268:13): [True: 0, False: 51.0k]
  ------------------
 1269|      0|            symbol->getAsFunction()->setFunctionControl(functionControl);
 1270|  51.0k|    }
 1271|       |
 1272|  11.0M|    arrayObjectCheck(loc, function.getType(), "array in function return type");
 1273|       |
 1274|  11.0M|    if (prototype) {
  ------------------
  |  Branch (1274:9): [True: 11.0M, False: 1]
  ------------------
 1275|       |        // All built-in functions are defined, even though they don't have a body.
 1276|       |        // Count their prototype as a definition instead.
 1277|  11.0M|        if (symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (1277:13): [True: 11.0M, False: 0]
  ------------------
 1278|  11.0M|            function.setDefined();
 1279|      0|        else {
 1280|      0|            if (prevDec && ! builtIn)
  ------------------
  |  Branch (1280:17): [True: 0, False: 0]
  |  Branch (1280:28): [True: 0, False: 0]
  ------------------
 1281|      0|                symbol->getAsFunction()->setPrototyped();  // need a writable one, but like having prevDec as a const
 1282|      0|            function.setPrototyped();
 1283|      0|        }
 1284|  11.0M|    }
 1285|       |
 1286|       |    // This insert won't actually insert it if it's a duplicate signature, but it will still check for
 1287|       |    // other forms of name collisions.
 1288|  11.0M|    if (! symbolTable.insert(function))
  ------------------
  |  Branch (1288:9): [True: 0, False: 11.0M]
  ------------------
 1289|      0|        error(loc, "function name is redeclaration of existing name", function.getName().c_str(), "");
 1290|       |
 1291|       |    //
 1292|       |    // If this is a redeclaration, it could also be a definition,
 1293|       |    // in which case, we need to use the parameter names from this one, and not the one that's
 1294|       |    // being redeclared.  So, pass back this declaration, not the one in the symbol table.
 1295|       |    //
 1296|  11.0M|    return &function;
 1297|  11.0M|}
_ZN7glslang13TParseContext24handleFunctionDefinitionERKNS_10TSourceLocERNS_9TFunctionE:
 1304|      1|{
 1305|      1|    currentCaller = function.getMangledName();
 1306|      1|    TSymbol* symbol = symbolTable.find(function.getMangledName());
 1307|      1|    TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
  ------------------
  |  Branch (1307:26): [True: 1, False: 0]
  ------------------
 1308|       |
 1309|      1|    if (! prevDec)
  ------------------
  |  Branch (1309:9): [True: 0, False: 1]
  ------------------
 1310|      0|        error(loc, "can't find function", function.getName().c_str(), "");
 1311|       |    // Note:  'prevDec' could be 'function' if this is the first time we've seen function
 1312|       |    // as it would have just been put in the symbol table.  Otherwise, we're looking up
 1313|       |    // an earlier occurrence.
 1314|       |
 1315|      1|    if (prevDec && prevDec->isDefined()) {
  ------------------
  |  Branch (1315:9): [True: 1, False: 0]
  |  Branch (1315:20): [True: 0, False: 1]
  ------------------
 1316|       |        // Then this function already has a body.
 1317|      0|        error(loc, "function already has a body", function.getName().c_str(), "");
 1318|      0|    }
 1319|      1|    if (prevDec && ! prevDec->isDefined()) {
  ------------------
  |  Branch (1319:9): [True: 1, False: 0]
  |  Branch (1319:20): [True: 1, False: 0]
  ------------------
 1320|      1|        prevDec->setDefined();
 1321|       |
 1322|       |        // Remember the return type for later checking for RETURN statements.
 1323|      1|        currentFunctionType = &(prevDec->getType());
 1324|      1|    } else
 1325|      0|        currentFunctionType = new TType(EbtVoid);
 1326|      1|    functionReturnsValue = false;
 1327|       |
 1328|       |    // Check for entry point
 1329|      1|    if (function.getName().compare(intermediate.getEntryPointName().c_str()) == 0) {
  ------------------
  |  Branch (1329:9): [True: 0, False: 1]
  ------------------
 1330|      0|        intermediate.setEntryPointMangledName(function.getMangledName().c_str());
 1331|      0|        intermediate.incrementEntryPointCount();
 1332|      0|        inMain = true;
 1333|      0|    } else
 1334|      1|        inMain = false;
 1335|       |
 1336|       |    //
 1337|       |    // Raise error message if main function takes any parameters or returns anything other than void
 1338|       |    //
 1339|      1|    if (inMain) {
  ------------------
  |  Branch (1339:9): [True: 0, False: 1]
  ------------------
 1340|      0|        if (function.getParamCount() > 0)
  ------------------
  |  Branch (1340:13): [True: 0, False: 0]
  ------------------
 1341|      0|            error(loc, "function cannot take any parameter(s)", function.getName().c_str(), "");
 1342|      0|        if (function.getType().getBasicType() != EbtVoid)
  ------------------
  |  Branch (1342:13): [True: 0, False: 0]
  ------------------
 1343|      0|            error(loc, "", function.getType().getBasicTypeString().c_str(), "entry point cannot return a value");
 1344|      0|        if (function.getLinkType() != ELinkNone)
  ------------------
  |  Branch (1344:13): [True: 0, False: 0]
  ------------------
 1345|      0|            error(loc, "main function cannot be exported", "", "");
 1346|      0|    }
 1347|       |
 1348|       |    //
 1349|       |    // New symbol table scope for body of function plus its arguments
 1350|       |    //
 1351|      1|    symbolTable.push();
 1352|       |
 1353|       |    //
 1354|       |    // Insert parameters into the symbol table.
 1355|       |    // If the parameter has no name, it's not an error, just don't insert it
 1356|       |    // (could be used for unused args).
 1357|       |    //
 1358|       |    // Also, accumulate the list of parameters into the HIL, so lower level code
 1359|       |    // knows where to find parameters.
 1360|       |    //
 1361|      1|    TIntermAggregate* paramNodes = new TIntermAggregate;
 1362|      1|    for (int i = 0; i < function.getParamCount(); i++) {
  ------------------
  |  Branch (1362:21): [True: 0, False: 1]
  ------------------
 1363|      0|        TParameter& param = function[i];
 1364|      0|        if (param.name != nullptr) {
  ------------------
  |  Branch (1364:13): [True: 0, False: 0]
  ------------------
 1365|      0|            TVariable *variable = new TVariable(param.name, *param.type);
 1366|       |
 1367|       |            // Insert the parameters with name in the symbol table.
 1368|      0|            if (! symbolTable.insert(*variable))
  ------------------
  |  Branch (1368:17): [True: 0, False: 0]
  ------------------
 1369|      0|                error(loc, "redefinition", variable->getName().c_str(), "");
 1370|      0|            else {
 1371|       |                // Transfer ownership of name pointer to symbol table.
 1372|      0|                param.name = nullptr;
 1373|       |
 1374|       |                // Add the parameter to the HIL
 1375|      0|                paramNodes = intermediate.growAggregate(paramNodes,
 1376|      0|                                                        intermediate.addSymbol(*variable, loc),
 1377|      0|                                                        loc);
 1378|      0|            }
 1379|      0|        } else
 1380|      0|            paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(*param.type, loc), loc);
 1381|      0|    }
 1382|      1|    paramNodes->setLinkType(function.getLinkType());
 1383|      1|    intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc);
 1384|      1|    loopNestingLevel = 0;
 1385|      1|    statementNestingLevel = 0;
 1386|      1|    controlFlowNestingLevel = 0;
 1387|      1|    postEntryPointReturn = false;
 1388|       |
 1389|      1|    return paramNodes;
 1390|      1|}
_ZN7glslang13TParseContext18handleFunctionCallERKNS_10TSourceLocEPNS_9TFunctionEP11TIntermNode:
 1402|  4.40k|{
 1403|  4.40k|    TIntermTyped* result = nullptr;
 1404|       |
 1405|  4.40k|    if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (1405:9): [True: 159, False: 4.24k]
  |  Branch (1405:35): [True: 0, False: 159]
  ------------------
 1406|       |        // allow calls that are invalid in Vulkan Semantics to be invisibily
 1407|       |        // remapped to equivalent valid functions
 1408|      0|        result = vkRelaxedRemapFunctionCall(loc, function, arguments);
 1409|      0|        if (result)
  ------------------
  |  Branch (1409:13): [True: 0, False: 0]
  ------------------
 1410|      0|            return result;
 1411|      0|    }
 1412|       |
 1413|  4.40k|    if (function->getBuiltInOp() == EOpArrayLength)
  ------------------
  |  Branch (1413:9): [True: 0, False: 4.40k]
  ------------------
 1414|      0|        result = handleLengthMethod(loc, function, arguments);
 1415|  4.40k|    else if (function->getBuiltInOp() != EOpNull) {
  ------------------
  |  Branch (1415:14): [True: 4.40k, False: 0]
  ------------------
 1416|       |        //
 1417|       |        // Then this should be a constructor.
 1418|       |        // Don't go through the symbol table for constructors.
 1419|       |        // Their parameters will be verified algorithmically.
 1420|       |        //
 1421|  4.40k|        TType type(EbtVoid);  // use this to get the type back
 1422|  4.40k|        if (! constructorError(loc, arguments, *function, function->getBuiltInOp(), type)) {
  ------------------
  |  Branch (1422:13): [True: 4.40k, False: 0]
  ------------------
 1423|       |            //
 1424|       |            // It's a constructor, of type 'type'.
 1425|       |            //
 1426|  4.40k|            result = addConstructor(loc, arguments, type);
 1427|  4.40k|            if (result == nullptr)
  ------------------
  |  Branch (1427:17): [True: 0, False: 4.40k]
  ------------------
 1428|      0|                error(loc, "cannot construct with these arguments", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str(), "");
 1429|  4.40k|        }
 1430|  4.40k|    } else {
 1431|       |        //
 1432|       |        // Find it in the symbol table.
 1433|       |        //
 1434|      0|        const TFunction* fnCandidate;
 1435|      0|        bool builtIn {false};
 1436|      0|        fnCandidate = findFunction(loc, *function, builtIn);
 1437|      0|        if (fnCandidate) {
  ------------------
  |  Branch (1437:13): [True: 0, False: 0]
  ------------------
 1438|       |            // This is a declared function that might map to
 1439|       |            //  - a built-in operator,
 1440|       |            //  - a built-in function not mapped to an operator, or
 1441|       |            //  - a user function.
 1442|       |
 1443|       |            // Error check for a function requiring specific extensions present.
 1444|      0|            if (builtIn &&
  ------------------
  |  Branch (1444:17): [True: 0, False: 0]
  ------------------
 1445|      0|                (fnCandidate->getBuiltInOp() == EOpSubgroupQuadAll || fnCandidate->getBuiltInOp() == EOpSubgroupQuadAny))
  ------------------
  |  Branch (1445:18): [True: 0, False: 0]
  |  Branch (1445:71): [True: 0, False: 0]
  ------------------
 1446|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_quad_control, fnCandidate->getName().c_str());
 1447|       |
 1448|      0|            if (builtIn && fnCandidate->getNumExtensions())
  ------------------
  |  Branch (1448:17): [True: 0, False: 0]
  |  Branch (1448:28): [True: 0, False: 0]
  ------------------
 1449|      0|                requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
 1450|       |
 1451|      0|            if (builtIn && fnCandidate->getType().contains16BitFloat())
  ------------------
  |  Branch (1451:17): [True: 0, False: 0]
  |  Branch (1451:28): [True: 0, False: 0]
  ------------------
 1452|      0|                requireFloat16Arithmetic(loc, "built-in function", "float16 types can only be in uniform block or buffer storage");
 1453|      0|            if (builtIn && fnCandidate->getType().contains16BitInt())
  ------------------
  |  Branch (1453:17): [True: 0, False: 0]
  |  Branch (1453:28): [True: 0, False: 0]
  ------------------
 1454|      0|                requireInt16Arithmetic(loc, "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
 1455|      0|            if (builtIn && fnCandidate->getType().contains8BitInt())
  ------------------
  |  Branch (1455:17): [True: 0, False: 0]
  |  Branch (1455:28): [True: 0, False: 0]
  ------------------
 1456|      0|                requireInt8Arithmetic(loc, "built-in function", "(u)int8 types can only be in uniform block or buffer storage");
 1457|      0|            if (builtIn && (fnCandidate->getBuiltInOp() == EOpTextureFetch || fnCandidate->getBuiltInOp() == EOpTextureQuerySize)) {
  ------------------
  |  Branch (1457:17): [True: 0, False: 0]
  |  Branch (1457:29): [True: 0, False: 0]
  |  Branch (1457:79): [True: 0, False: 0]
  ------------------
 1458|      0|                if ((*fnCandidate)[0].type->getSampler().isMultiSample() && version <= 140)
  ------------------
  |  Branch (1458:21): [True: 0, False: 0]
  |  Branch (1458:77): [True: 0, False: 0]
  ------------------
 1459|      0|                    requireExtensions(loc, 1, &E_GL_ARB_texture_multisample, fnCandidate->getName().c_str());
 1460|      0|            }
 1461|      0|            bool hasLongVectorArg = false;
 1462|      0|            if (arguments != nullptr) {
  ------------------
  |  Branch (1462:17): [True: 0, False: 0]
  ------------------
 1463|       |                // Make sure qualifications work for these arguments.
 1464|      0|                TIntermAggregate* aggregate = arguments->getAsAggregate();
 1465|      0|                for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
  ------------------
  |  Branch (1465:33): [True: 0, False: 0]
  ------------------
 1466|       |                    // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
 1467|       |                    // is the single argument itself or its children are the arguments.  Only one argument
 1468|       |                    // means take 'arguments' itself as the one argument.
 1469|      0|                    if ((*fnCandidate)[i].defaultValue) {
  ------------------
  |  Branch (1469:25): [True: 0, False: 0]
  ------------------
 1470|      0|                        if (!aggregate) {
  ------------------
  |  Branch (1470:29): [True: 0, False: 0]
  ------------------
 1471|       |                            // Only one argument was passed (rest are default arguments) so arguments isn't a TIntermAggregate.
 1472|       |                            // But the function takes at least one more argument, so a TIntermAggregate is needed.
 1473|      0|                            aggregate = new TIntermAggregate;
 1474|      0|                            aggregate->getSequence().push_back(arguments);
 1475|      0|                            arguments = aggregate;
 1476|      0|                        }
 1477|      0|                        if (i >= static_cast<int>(aggregate->getSequence().size())) {
  ------------------
  |  Branch (1477:29): [True: 0, False: 0]
  ------------------
 1478|       |                            // Append the default value if there are no more arguments left in the aggregate.
 1479|      0|                            TIntermConstantUnion *defaultValue = nullptr;
 1480|      0|                            if (const auto *constUnion = (*fnCandidate)[i].defaultValue->getAsConstantUnion()) {
  ------------------
  |  Branch (1480:45): [True: 0, False: 0]
  ------------------
 1481|      0|                                defaultValue = new TIntermConstantUnion(constUnion->getConstArray(), constUnion->getType());
 1482|      0|                            }
 1483|      0|                            assert(defaultValue && "unsupported default value construct");
 1484|      0|                            aggregate->getSequence().push_back(defaultValue);
 1485|      0|                        }
 1486|      0|                    }
 1487|      0|                    TIntermNode* arg = fnCandidate->getParamCount() == 1 ? arguments : (aggregate ? aggregate->getSequence()[i] : arguments);
  ------------------
  |  Branch (1487:40): [True: 0, False: 0]
  |  Branch (1487:89): [True: 0, False: 0]
  ------------------
 1488|      0|                    TQualifier& formalQualifier = (*fnCandidate)[i].type->getQualifier();
 1489|      0|                    if (formalQualifier.isParamOutput()) {
  ------------------
  |  Branch (1489:25): [True: 0, False: 0]
  ------------------
 1490|      0|                        if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped()))
  ------------------
  |  Branch (1490:29): [True: 0, False: 0]
  ------------------
 1491|      0|                            error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", "");
 1492|      0|                    }
 1493|      0|                    if (formalQualifier.isSpirvLiteral()) {
  ------------------
  |  Branch (1493:25): [True: 0, False: 0]
  ------------------
 1494|      0|                        if (!arg->getAsTyped()->getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (1494:29): [True: 0, False: 0]
  ------------------
 1495|      0|                            error(arguments->getLoc(),
 1496|      0|                                  "Non front-end constant expressions cannot be passed for 'spirv_literal' parameters.",
 1497|      0|                                  "spirv_literal", "");
 1498|      0|                        }
 1499|      0|                    }
 1500|      0|                    const TType& argType = arg->getAsTyped()->getType();
 1501|      0|                    const TQualifier& argQualifier = argType.getQualifier();
 1502|      0|                    bool containsBindlessSampler = intermediate.getBindlessMode() && argType.containsSampler();
  ------------------
  |  Branch (1502:52): [True: 0, False: 0]
  |  Branch (1502:86): [True: 0, False: 0]
  ------------------
 1503|      0|                    if (argQualifier.isMemory() && !containsBindlessSampler && (argType.containsOpaque() || argType.isReference())) {
  ------------------
  |  Branch (1503:25): [True: 0, False: 0]
  |  Branch (1503:52): [True: 0, False: 0]
  |  Branch (1503:81): [True: 0, False: 0]
  |  Branch (1503:109): [True: 0, False: 0]
  ------------------
 1504|      0|                        const char* message = "argument cannot drop memory qualifier when passed to formal parameter";
 1505|      0|                        if (argQualifier.volatil && ! formalQualifier.volatil)
  ------------------
  |  Branch (1505:29): [True: 0, False: 0]
  |  Branch (1505:53): [True: 0, False: 0]
  ------------------
 1506|      0|                            error(arguments->getLoc(), message, "volatile", "");
 1507|      0|                        if (argQualifier.coherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1507:29): [True: 0, False: 0]
  |  Branch (1507:57): [True: 0, False: 0]
  |  Branch (1507:91): [True: 0, False: 0]
  ------------------
 1508|      0|                            error(arguments->getLoc(), message, "coherent", "");
 1509|      0|                        if (argQualifier.devicecoherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1509:29): [True: 0, False: 0]
  |  Branch (1509:63): [True: 0, False: 0]
  |  Branch (1509:97): [True: 0, False: 0]
  ------------------
 1510|      0|                            error(arguments->getLoc(), message, "devicecoherent", "");
 1511|      0|                        if (argQualifier.queuefamilycoherent && ! (formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1511:29): [True: 0, False: 0]
  |  Branch (1511:68): [True: 0, False: 0]
  |  Branch (1511:107): [True: 0, False: 0]
  |  Branch (1511:141): [True: 0, False: 0]
  ------------------
 1512|      0|                            error(arguments->getLoc(), message, "queuefamilycoherent", "");
 1513|      0|                        if (argQualifier.workgroupcoherent && ! (formalQualifier.workgroupcoherent || formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1513:29): [True: 0, False: 0]
  |  Branch (1513:66): [True: 0, False: 0]
  |  Branch (1513:103): [True: 0, False: 0]
  |  Branch (1513:142): [True: 0, False: 0]
  |  Branch (1513:176): [True: 0, False: 0]
  ------------------
 1514|      0|                            error(arguments->getLoc(), message, "workgroupcoherent", "");
 1515|      0|                        if (argQualifier.subgroupcoherent && ! (formalQualifier.subgroupcoherent || formalQualifier.workgroupcoherent || formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1515:29): [True: 0, False: 0]
  |  Branch (1515:65): [True: 0, False: 0]
  |  Branch (1515:101): [True: 0, False: 0]
  |  Branch (1515:138): [True: 0, False: 0]
  |  Branch (1515:177): [True: 0, False: 0]
  |  Branch (1515:211): [True: 0, False: 0]
  ------------------
 1516|      0|                            error(arguments->getLoc(), message, "subgroupcoherent", "");
 1517|      0|                        if (argQualifier.readonly && ! formalQualifier.readonly)
  ------------------
  |  Branch (1517:29): [True: 0, False: 0]
  |  Branch (1517:54): [True: 0, False: 0]
  ------------------
 1518|      0|                            error(arguments->getLoc(), message, "readonly", "");
 1519|      0|                        if (argQualifier.writeonly && ! formalQualifier.writeonly)
  ------------------
  |  Branch (1519:29): [True: 0, False: 0]
  |  Branch (1519:55): [True: 0, False: 0]
  ------------------
 1520|      0|                            error(arguments->getLoc(), message, "writeonly", "");
 1521|      0|                        if (argQualifier.nontemporal && ! formalQualifier.nontemporal)
  ------------------
  |  Branch (1521:29): [True: 0, False: 0]
  |  Branch (1521:57): [True: 0, False: 0]
  ------------------
 1522|      0|                            error(arguments->getLoc(), message, "nontemporal", "");
 1523|       |                        // Don't check 'restrict', it is different than the rest:
 1524|       |                        // "...but only restrict can be taken away from a calling argument, by a formal parameter that
 1525|       |                        // lacks the restrict qualifier..."
 1526|      0|                    }
 1527|      0|                    if (!builtIn && argQualifier.getFormat() != formalQualifier.getFormat()) {
  ------------------
  |  Branch (1527:25): [True: 0, False: 0]
  |  Branch (1527:37): [True: 0, False: 0]
  ------------------
 1528|       |                        // we have mismatched formats, which should only be allowed if writeonly
 1529|       |                        // and at least one format is unknown
 1530|      0|                        if (!formalQualifier.isWriteOnly() || (formalQualifier.getFormat() != ElfNone &&
  ------------------
  |  Branch (1530:29): [True: 0, False: 0]
  |  Branch (1530:64): [True: 0, False: 0]
  ------------------
 1531|      0|                                                                  argQualifier.getFormat() != ElfNone))
  ------------------
  |  Branch (1531:67): [True: 0, False: 0]
  ------------------
 1532|      0|                            error(arguments->getLoc(), "image formats must match", "format", "");
 1533|      0|                    }
 1534|      0|                    if (builtIn && arg->getAsTyped()->getType().contains16BitFloat())
  ------------------
  |  Branch (1534:25): [True: 0, False: 0]
  |  Branch (1534:36): [True: 0, False: 0]
  ------------------
 1535|      0|                        requireFloat16Arithmetic(arguments->getLoc(), "built-in function", "float16 types can only be in uniform block or buffer storage");
 1536|      0|                    if (builtIn && arg->getAsTyped()->getType().contains16BitInt())
  ------------------
  |  Branch (1536:25): [True: 0, False: 0]
  |  Branch (1536:36): [True: 0, False: 0]
  ------------------
 1537|      0|                        requireInt16Arithmetic(arguments->getLoc(), "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
 1538|      0|                    if (builtIn && arg->getAsTyped()->getType().contains8BitInt())
  ------------------
  |  Branch (1538:25): [True: 0, False: 0]
  |  Branch (1538:36): [True: 0, False: 0]
  ------------------
 1539|      0|                        requireInt8Arithmetic(arguments->getLoc(), "built-in function", "(u)int8 types can only be in uniform block or buffer storage");
 1540|       |
 1541|       |                    // Check that coopVecOuterProductAccumulateNV vector component types match
 1542|      0|                    if (builtIn && fnCandidate->getBuiltInOp() == EOpCooperativeVectorOuterProductAccumulateNV &&
  ------------------
  |  Branch (1542:25): [True: 0, False: 0]
  |  Branch (1542:36): [True: 0, False: 0]
  ------------------
 1543|      0|                        i == 1 && arg->getAsTyped()->getType().getBasicType() != aggregate->getSequence()[0]->getAsTyped()->getType().getBasicType())
  ------------------
  |  Branch (1543:25): [True: 0, False: 0]
  |  Branch (1543:35): [True: 0, False: 0]
  ------------------
 1544|      0|                        error(arguments->getLoc(), "cooperative vector basic types must match", fnCandidate->getName().c_str(), "");
 1545|       |
 1546|       |                    // Check that coopVecLoadNV and coopVecStoreNV buffer parameter is in buffer or shared storage
 1547|      0|                    if (builtIn && (fnCandidate->getBuiltInOp() == EOpCooperativeVectorLoadNV ||
  ------------------
  |  Branch (1547:25): [True: 0, False: 0]
  |  Branch (1547:37): [True: 0, False: 0]
  ------------------
 1548|      0|                                    fnCandidate->getBuiltInOp() == EOpCooperativeVectorStoreNV) &&
  ------------------
  |  Branch (1548:37): [True: 0, False: 0]
  ------------------
 1549|      0|                        i == 1) {
  ------------------
  |  Branch (1549:25): [True: 0, False: 0]
  ------------------
 1550|      0|                        TStorageQualifier storage = arg->getAsTyped()->getType().getQualifier().storage;
 1551|      0|                        if (storage != EvqBuffer && storage != EvqShared) {
  ------------------
  |  Branch (1551:29): [True: 0, False: 0]
  |  Branch (1551:53): [True: 0, False: 0]
  ------------------
 1552|      0|                            error(arguments->getLoc(), "buffer argument must be in buffer or shared storage", 
 1553|      0|                                  fnCandidate->getName().c_str(), "");
 1554|      0|                        }
 1555|      0|                    }
 1556|       |
 1557|      0|                    if (argType.isLongVector()) {
  ------------------
  |  Branch (1557:25): [True: 0, False: 0]
  ------------------
 1558|      0|                        hasLongVectorArg = true;
 1559|      0|                    }
 1560|       |
 1561|       |                    // TODO 4.5 functionality:  A shader will fail to compile
 1562|       |                    // if the value passed to the memargument of an atomic memory function does not correspond to a buffer or
 1563|       |                    // shared variable. It is acceptable to pass an element of an array or a single component of a vector to the
 1564|       |                    // memargument of an atomic memory function, as long as the underlying array or vector is a buffer or
 1565|       |                    // shared variable.
 1566|      0|                }
 1567|       |
 1568|       |                // Convert 'in' arguments
 1569|      0|                addInputArgumentConversions(*fnCandidate, arguments);  // arguments may be modified if it's just a single argument node
 1570|      0|            }
 1571|       |
 1572|      0|            if (builtIn && fnCandidate->getBuiltInOp() != EOpNull) {
  ------------------
  |  Branch (1572:17): [True: 0, False: 0]
  |  Branch (1572:28): [True: 0, False: 0]
  ------------------
 1573|       |                // A function call mapped to a built-in operation.
 1574|      0|                result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate);
 1575|      0|            } else if (fnCandidate->getBuiltInOp() == EOpSpirvInst) {
  ------------------
  |  Branch (1575:24): [True: 0, False: 0]
  ------------------
 1576|       |                // When SPIR-V instruction qualifier is specified, the function call is still mapped to a built-in operation.
 1577|      0|                result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate);
 1578|      0|            } else {
 1579|       |                // This is a function call not mapped to built-in operator.
 1580|       |                // It could still be a built-in function, but only if PureOperatorBuiltins == false.
 1581|      0|                result = intermediate.setAggregateOperator(arguments, EOpFunctionCall, fnCandidate->getType(), loc);
 1582|      0|                TIntermAggregate* call = result->getAsAggregate();
 1583|      0|                call->setName(fnCandidate->getMangledName());
 1584|       |
 1585|       |                // this is how we know whether the given function is a built-in function or a user-defined function
 1586|       |                // if builtIn == false, it's a userDefined -> could be an overloaded built-in function also
 1587|       |                // if builtIn == true, it's definitely a built-in function with EOpNull
 1588|      0|                if (! builtIn) {
  ------------------
  |  Branch (1588:21): [True: 0, False: 0]
  ------------------
 1589|      0|                    call->setUserDefined();
 1590|      0|                    if (symbolTable.atGlobalLevel()) {
  ------------------
  |  Branch (1590:25): [True: 0, False: 0]
  ------------------
 1591|      0|                        requireProfile(loc, ~EEsProfile, "calling user function from global scope");
 1592|      0|                        intermediate.addToCallGraph(infoSink, "main(", fnCandidate->getMangledName());
 1593|      0|                    } else
 1594|      0|                        intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName());
 1595|      0|                }
 1596|       |
 1597|      0|                if (builtIn)
  ------------------
  |  Branch (1597:21): [True: 0, False: 0]
  ------------------
 1598|      0|                    nonOpBuiltInCheck(loc, *fnCandidate, *call);
 1599|      0|                else
 1600|      0|                    userFunctionCallCheck(loc, *call);
 1601|      0|            }
 1602|       |
 1603|      0|            if (hasLongVectorArg && fnCandidate->getBuiltInOp() != EOpNull) {
  ------------------
  |  Branch (1603:17): [True: 0, False: 0]
  |  Branch (1603:37): [True: 0, False: 0]
  ------------------
 1604|      0|                TType longVectorResultType(EbtVoid);
 1605|      0|                handleLongVectorBuiltin(loc, fnCandidate, &longVectorResultType, arguments);
 1606|      0|                result->setType(longVectorResultType);
 1607|      0|            }
 1608|       |
 1609|       |            // Convert 'out' arguments.  If it was a constant folded built-in, it won't be an aggregate anymore.
 1610|       |            // Built-ins with a single argument aren't called with an aggregate, but they also don't have an output.
 1611|       |            // Also, build the qualifier list for user function calls, which are always called with an aggregate.
 1612|      0|            if (result->getAsAggregate()) {
  ------------------
  |  Branch (1612:17): [True: 0, False: 0]
  ------------------
 1613|      0|                TQualifierList& qualifierList = result->getAsAggregate()->getQualifierList();
 1614|      0|                for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
  ------------------
  |  Branch (1614:33): [True: 0, False: 0]
  ------------------
 1615|      0|                    TStorageQualifier qual = (*fnCandidate)[i].type->getQualifier().storage;
 1616|      0|                    qualifierList.push_back(qual);
 1617|      0|                }
 1618|      0|                result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
 1619|      0|            }
 1620|       |
 1621|      0|            handleCoopMat2FunctionCall(loc, fnCandidate, result, arguments);
 1622|       |
 1623|      0|            handleVector2CoopMatConversionCall(loc, fnCandidate, result, arguments);
 1624|       |
 1625|      0|            if (result->getAsTyped()->getType().isCoopVecOrLongVector() &&
  ------------------
  |  Branch (1625:17): [True: 0, False: 0]
  ------------------
 1626|      0|               !result->getAsTyped()->getType().isParameterized()) {
  ------------------
  |  Branch (1626:16): [True: 0, False: 0]
  ------------------
 1627|      0|                if (auto unaryNode = result->getAsUnaryNode())
  ------------------
  |  Branch (1627:26): [True: 0, False: 0]
  ------------------
 1628|      0|                    result->setType(unaryNode->getOperand()->getAsTyped()->getType());
 1629|      0|                else
 1630|      0|                    result->setType(result->getAsAggregate()->getSequence()[0]->getAsTyped()->getType());
 1631|      0|            }
 1632|       |
 1633|      0|            if (fnCandidate->getBuiltInOp() == EOpConstructSaturated) {
  ------------------
  |  Branch (1633:17): [True: 0, False: 0]
  ------------------
 1634|       |                // result type is taken from the first parameter
 1635|      0|                result->setType(result->getAsAggregate()->getSequence()[0]->getAsTyped()->getType());
 1636|      0|            }
 1637|      0|        }
 1638|      0|    }
 1639|       |
 1640|       |    // generic error recovery
 1641|       |    // TODO: simplification: localize all the error recoveries that look like this, and taking type into account to reduce cascades
 1642|  4.40k|    if (result == nullptr)
  ------------------
  |  Branch (1642:9): [True: 0, False: 4.40k]
  ------------------
 1643|      0|        result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
 1644|       |
 1645|  4.40k|    return result;
 1646|  4.40k|}
_ZN7glslang13TParseContext31samplerConstructorLocationCheckERKNS_10TSourceLocEPKcP11TIntermNode:
 4279|      1|{
 4280|      1|    if (node->getAsOperator() && node->getAsOperator()->getOp() == EOpConstructTextureSampler)
  ------------------
  |  Branch (4280:9): [True: 0, False: 1]
  |  Branch (4280:34): [True: 0, False: 0]
  ------------------
 4281|      0|        error(loc, "sampler constructor must appear at point of use", token, "");
 4282|      1|}
_ZN7glslang13TParseContext21handleConstructorCallERKNS_10TSourceLocERKNS_11TPublicTypeE:
 4288|  4.40k|{
 4289|  4.40k|    TType type(publicType);
 4290|  4.40k|    type.getQualifier().precision = EpqNone;
 4291|       |
 4292|  4.40k|    if (type.isArray()) {
  ------------------
  |  Branch (4292:9): [True: 0, False: 4.40k]
  ------------------
 4293|      0|        profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed constructor");
 4294|      0|        profileRequires(loc, EEsProfile, 300, nullptr, "arrayed constructor");
 4295|      0|    }
 4296|       |
 4297|       |    // Reuse EOpConstructTextureSampler for bindless image constructor
 4298|       |    // uvec2 imgHandle;
 4299|       |    // imageLoad(image1D(imgHandle), 0);
 4300|  4.40k|    if (type.isImage() && extensionTurnedOn(E_GL_ARB_bindless_texture))
  ------------------
  |  Branch (4300:9): [True: 0, False: 4.40k]
  |  Branch (4300:27): [True: 0, False: 0]
  ------------------
 4301|      0|    {
 4302|      0|        intermediate.setBindlessImageMode(currentCaller, AstRefTypeFunc);
 4303|      0|    }
 4304|       |
 4305|  4.40k|    TOperator op = intermediate.mapTypeToConstructorOp(type);
 4306|       |
 4307|  4.40k|    if (op == EOpNull) {
  ------------------
  |  Branch (4307:9): [True: 0, False: 4.40k]
  ------------------
 4308|      0|      if (intermediate.getEnhancedMsgs() && type.getBasicType() == EbtSampler)
  ------------------
  |  Branch (4308:11): [True: 0, False: 0]
  |  Branch (4308:45): [True: 0, False: 0]
  ------------------
 4309|      0|            error(loc, "function not supported in this version; use texture() instead", "texture*D*", "");
 4310|      0|        else
 4311|      0|            error(loc, "cannot construct this type", type.getBasicString(), "");
 4312|      0|        op = EOpConstructFloat;
 4313|      0|        TType errorType(EbtFloat);
 4314|      0|        type.shallowCopy(errorType);
 4315|      0|    }
 4316|       |
 4317|  4.40k|    TString empty("");
 4318|       |
 4319|  4.40k|    return new TFunction(&empty, type, op);
 4320|  4.40k|}
_ZN7glslang13TParseContext24handlePrecisionQualifierERKNS_10TSourceLocERNS_10TQualifierENS_19TPrecisionQualifierE:
 4324|  2.26M|{
 4325|  2.26M|    if (obeyPrecisionQualifiers())
  ------------------
  |  Branch (4325:9): [True: 1.45M, False: 816k]
  ------------------
 4326|  1.45M|        qualifier.precision = precision;
 4327|  2.26M|}
_ZN7glslang13TParseContext23checkPrecisionQualifierERKNS_10TSourceLocENS_19TPrecisionQualifierE:
 4332|  2.26M|{
 4333|  2.26M|    if (precisionManager.shouldWarnAboutDefaults()) {
  ------------------
  |  Branch (4333:9): [True: 0, False: 2.26M]
  ------------------
 4334|      0|        warn(loc, "all default precisions are highp; use precision statements to quiet warning, e.g.:\n"
 4335|      0|                  "         \"precision mediump int; precision highp float;\"", "", "");
 4336|      0|        precisionManager.defaultWarningGiven();
 4337|      0|    }
 4338|  2.26M|}
_ZN7glslang13TParseContext11assignErrorERKNS_10TSourceLocEPKcNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEESC_:
 4344|      1|{
 4345|      1|    error(loc, "", op, "cannot convert from '%s' to '%s'",
 4346|      1|          right.c_str(), left.c_str());
 4347|      1|}
_ZN7glslang13TParseContext12unaryOpErrorERKNS_10TSourceLocEPKcNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 4353|      3|{
 4354|      3|   error(loc, " wrong operand type", op,
 4355|      3|          "no operation '%s' exists that takes an operand of type %s (or there is no acceptable conversion)",
 4356|      3|          op, operand.c_str());
 4357|      3|}
_ZN7glslang13TParseContext13variableCheckERPNS_12TIntermTypedE:
 4376|   306k|{
 4377|   306k|    TIntermSymbol* symbol = nodePtr->getAsSymbolNode();
 4378|   306k|    if (! symbol)
  ------------------
  |  Branch (4378:9): [True: 306k, False: 4]
  ------------------
 4379|   306k|        return;
 4380|       |
 4381|      4|    if (symbol->getType().getBasicType() == EbtVoid) {
  ------------------
  |  Branch (4381:9): [True: 3, False: 1]
  ------------------
 4382|      3|        const char *extraInfoFormat = "";
 4383|      3|        if (spvVersion.vulkan != 0 && symbol->getName() == "gl_VertexID") {
  ------------------
  |  Branch (4383:13): [True: 0, False: 3]
  |  Branch (4383:39): [True: 0, False: 0]
  ------------------
 4384|      0|          extraInfoFormat = "(Did you mean gl_VertexIndex?)";
 4385|      3|        } else if (spvVersion.vulkan != 0 && symbol->getName() == "gl_InstanceID") {
  ------------------
  |  Branch (4385:20): [True: 0, False: 3]
  |  Branch (4385:46): [True: 0, False: 0]
  ------------------
 4386|      0|          extraInfoFormat = "(Did you mean gl_InstanceIndex?)";
 4387|      0|        }
 4388|      3|        error(symbol->getLoc(), "undeclared identifier", symbol->getName().c_str(), extraInfoFormat);
 4389|       |
 4390|       |        // Add to symbol table to prevent future error messages on the same name
 4391|      3|        if (symbol->getName().size() > 0) {
  ------------------
  |  Branch (4391:13): [True: 3, False: 0]
  ------------------
 4392|      3|            TVariable* fakeVariable = new TVariable(&symbol->getName(), TType(EbtFloat));
 4393|      3|            symbolTable.insert(*fakeVariable);
 4394|       |
 4395|       |            // substitute a symbol node for this new variable
 4396|      3|            nodePtr = intermediate.addSymbol(*fakeVariable, symbol->getLoc());
 4397|      3|        }
 4398|      3|    } else {
 4399|      1|        switch (symbol->getQualifier().storage) {
 4400|      0|        case EvqPointCoord:
  ------------------
  |  Branch (4400:9): [True: 0, False: 1]
  ------------------
 4401|      0|            profileRequires(symbol->getLoc(), ENoProfile, 120, nullptr, "gl_PointCoord");
 4402|      0|            break;
 4403|      1|        default: break; // some compilers want this
  ------------------
  |  Branch (4403:9): [True: 1, False: 0]
  ------------------
 4404|      1|        }
 4405|      1|    }
 4406|      4|}
_ZN7glslang13TParseContext16lValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
 4415|      3|{
 4416|      3|    TIntermBinary* binaryNode = node->getAsBinaryNode();
 4417|       |
 4418|      3|    if (binaryNode) {
  ------------------
  |  Branch (4418:9): [True: 0, False: 3]
  ------------------
 4419|      0|        bool errorReturn = false;
 4420|       |
 4421|      0|        switch(binaryNode->getOp()) {
 4422|      0|        case EOpIndexDirect:
  ------------------
  |  Branch (4422:9): [True: 0, False: 0]
  ------------------
 4423|      0|        case EOpIndexIndirect:
  ------------------
  |  Branch (4423:9): [True: 0, False: 0]
  ------------------
 4424|       |            // ...  tessellation control shader ...
 4425|       |            // If a per-vertex output variable is used as an l-value, it is a
 4426|       |            // compile-time or link-time error if the expression indicating the
 4427|       |            // vertex index is not the identifier gl_InvocationID.
 4428|      0|            if (language == EShLangTessControl) {
  ------------------
  |  Branch (4428:17): [True: 0, False: 0]
  ------------------
 4429|      0|                const TType& leftType = binaryNode->getLeft()->getType();
 4430|      0|                if (leftType.getQualifier().storage == EvqVaryingOut && ! leftType.getQualifier().patch && binaryNode->getLeft()->getAsSymbolNode()) {
  ------------------
  |  Branch (4430:21): [True: 0, False: 0]
  |  Branch (4430:73): [True: 0, False: 0]
  |  Branch (4430:108): [True: 0, False: 0]
  ------------------
 4431|       |                    // we have a per-vertex output
 4432|      0|                    const TIntermSymbol* rightSymbol = binaryNode->getRight()->getAsSymbolNode();
 4433|      0|                    if (! rightSymbol || rightSymbol->getQualifier().builtIn != EbvInvocationId)
  ------------------
  |  Branch (4433:25): [True: 0, False: 0]
  |  Branch (4433:42): [True: 0, False: 0]
  ------------------
 4434|      0|                        error(loc, "tessellation-control per-vertex output l-value must be indexed with gl_InvocationID", "[]", "");
 4435|      0|                }
 4436|      0|            }
 4437|      0|            break; // left node is checked by base class
 4438|      0|        case EOpVectorSwizzle:
  ------------------
  |  Branch (4438:9): [True: 0, False: 0]
  ------------------
 4439|      0|            errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft());
 4440|      0|            if (!errorReturn) {
  ------------------
  |  Branch (4440:17): [True: 0, False: 0]
  ------------------
 4441|      0|                int offset[4] = {0,0,0,0};
 4442|       |
 4443|      0|                TIntermTyped* rightNode = binaryNode->getRight();
 4444|      0|                TIntermAggregate *aggrNode = rightNode->getAsAggregate();
 4445|       |
 4446|      0|                for (TIntermSequence::iterator p = aggrNode->getSequence().begin();
 4447|      0|                                               p != aggrNode->getSequence().end(); p++) {
  ------------------
  |  Branch (4447:48): [True: 0, False: 0]
  ------------------
 4448|      0|                    int value = (*p)->getAsTyped()->getAsConstantUnion()->getConstArray()[0].getIConst();
 4449|      0|                    offset[value]++;
 4450|      0|                    if (offset[value] > 1) {
  ------------------
  |  Branch (4450:25): [True: 0, False: 0]
  ------------------
 4451|      0|                        error(loc, " l-value of swizzle cannot have duplicate components", op, "", "");
 4452|       |
 4453|      0|                        return true;
 4454|      0|                    }
 4455|      0|                }
 4456|      0|            }
 4457|       |
 4458|      0|            return errorReturn;
 4459|      0|        default:
  ------------------
  |  Branch (4459:9): [True: 0, False: 0]
  ------------------
 4460|      0|            break;
 4461|      0|        }
 4462|       |
 4463|      0|        if (errorReturn) {
  ------------------
  |  Branch (4463:13): [True: 0, False: 0]
  ------------------
 4464|      0|            error(loc, " l-value required", op, "", "");
 4465|      0|            return true;
 4466|      0|        }
 4467|      0|    }
 4468|       |
 4469|      3|    if (binaryNode && binaryNode->getOp() == EOpIndexDirectStruct && binaryNode->getLeft()->isReference())
  ------------------
  |  Branch (4469:9): [True: 0, False: 3]
  |  Branch (4469:23): [True: 0, False: 0]
  |  Branch (4469:70): [True: 0, False: 0]
  ------------------
 4470|      0|        return false;
 4471|       |
 4472|       |    // Let the base class check errors
 4473|      3|    if (TParseContextBase::lValueErrorCheck(loc, op, node))
  ------------------
  |  Branch (4473:9): [True: 3, False: 0]
  ------------------
 4474|      3|        return true;
 4475|       |
 4476|      0|    const char* symbol = nullptr;
 4477|      0|    TIntermSymbol* symNode = node->getAsSymbolNode();
 4478|      0|    if (symNode != nullptr)
  ------------------
  |  Branch (4478:9): [True: 0, False: 0]
  ------------------
 4479|      0|        symbol = symNode->getName().c_str();
 4480|       |
 4481|      0|    const char* message = nullptr;
 4482|      0|    switch (node->getQualifier().storage) {
 4483|      0|    case EvqVaryingIn:      message = "can't modify shader input";   break;
  ------------------
  |  Branch (4483:5): [True: 0, False: 0]
  ------------------
 4484|      0|    case EvqInstanceId:     message = "can't modify gl_InstanceID";  break;
  ------------------
  |  Branch (4484:5): [True: 0, False: 0]
  ------------------
 4485|      0|    case EvqVertexId:       message = "can't modify gl_VertexID";    break;
  ------------------
  |  Branch (4485:5): [True: 0, False: 0]
  ------------------
 4486|      0|    case EvqFace:           message = "can't modify gl_FrontFace";   break;
  ------------------
  |  Branch (4486:5): [True: 0, False: 0]
  ------------------
 4487|      0|    case EvqFragCoord:      message = "can't modify gl_FragCoord";   break;
  ------------------
  |  Branch (4487:5): [True: 0, False: 0]
  ------------------
 4488|      0|    case EvqPointCoord:     message = "can't modify gl_PointCoord";  break;
  ------------------
  |  Branch (4488:5): [True: 0, False: 0]
  ------------------
 4489|      0|    case EvqFragDepth:
  ------------------
  |  Branch (4489:5): [True: 0, False: 0]
  ------------------
 4490|      0|        intermediate.setDepthReplacing();
 4491|       |        // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader."
 4492|      0|        if (isEsProfile() && intermediate.getEarlyFragmentTests())
  ------------------
  |  Branch (4492:13): [True: 0, False: 0]
  |  Branch (4492:30): [True: 0, False: 0]
  ------------------
 4493|      0|            message = "can't modify gl_FragDepth if using early_fragment_tests";
 4494|      0|        break;
 4495|      0|    case EvqFragStencil:
  ------------------
  |  Branch (4495:5): [True: 0, False: 0]
  ------------------
 4496|      0|        intermediate.setStencilReplacing();
 4497|       |        // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader."
 4498|      0|        if (isEsProfile() && intermediate.getEarlyFragmentTests())
  ------------------
  |  Branch (4498:13): [True: 0, False: 0]
  |  Branch (4498:30): [True: 0, False: 0]
  ------------------
 4499|      0|            message = "can't modify EvqFragStencil if using early_fragment_tests";
 4500|      0|        break;
 4501|       |
 4502|      0|    case EvqtaskPayloadSharedEXT:
  ------------------
  |  Branch (4502:5): [True: 0, False: 0]
  ------------------
 4503|      0|        if (language == EShLangMesh)
  ------------------
  |  Branch (4503:13): [True: 0, False: 0]
  ------------------
 4504|      0|            message = "can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders";
 4505|      0|        break;
 4506|      0|    default:
  ------------------
  |  Branch (4506:5): [True: 0, False: 0]
  ------------------
 4507|      0|        break;
 4508|      0|    }
 4509|       |
 4510|      0|    if (message == nullptr && binaryNode == nullptr && symNode == nullptr) {
  ------------------
  |  Branch (4510:9): [True: 0, False: 0]
  |  Branch (4510:31): [True: 0, False: 0]
  |  Branch (4510:56): [True: 0, False: 0]
  ------------------
 4511|      0|        error(loc, " l-value required", op, "", "");
 4512|       |
 4513|      0|        return true;
 4514|      0|    }
 4515|       |
 4516|       |    //
 4517|       |    // Everything else is okay, no error.
 4518|       |    //
 4519|      0|    if (message == nullptr)
  ------------------
  |  Branch (4519:9): [True: 0, False: 0]
  ------------------
 4520|      0|        return false;
 4521|       |
 4522|       |    //
 4523|       |    // If we get here, we have an error and a message.
 4524|       |    //
 4525|      0|    if (symNode)
  ------------------
  |  Branch (4525:9): [True: 0, False: 0]
  ------------------
 4526|      0|        error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message);
 4527|      0|    else
 4528|      0|        error(loc, " l-value required", op, "(%s)", message);
 4529|       |
 4530|      0|    return true;
 4531|      0|}
_ZN7glslang13TParseContext16rValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
 4535|   148k|{
 4536|       |    // Let the base class check errors
 4537|   148k|    TParseContextBase::rValueErrorCheck(loc, op, node);
 4538|       |
 4539|   148k|    TIntermSymbol* symNode = node->getAsSymbolNode();
 4540|   148k|    if (!(symNode && symNode->getQualifier().isWriteOnly())) // base class checks
  ------------------
  |  Branch (4540:11): [True: 2, False: 148k]
  |  Branch (4540:22): [True: 0, False: 2]
  ------------------
 4541|   148k|        if (symNode && symNode->getQualifier().isExplicitInterpolation())
  ------------------
  |  Branch (4541:13): [True: 2, False: 148k]
  |  Branch (4541:24): [True: 0, False: 2]
  ------------------
 4542|      0|            error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
 4543|       |
 4544|       |    // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned.
 4545|   148k|    if(node->getQualifier().builtIn == EbvWorkGroupSize &&
  ------------------
  |  Branch (4545:8): [True: 0, False: 148k]
  ------------------
 4546|      0|       !(intermediate.isLocalSizeSet() || intermediate.isLocalSizeSpecialized()))
  ------------------
  |  Branch (4546:10): [True: 0, False: 0]
  |  Branch (4546:43): [True: 0, False: 0]
  ------------------
 4547|      0|        error(loc, "can't read from gl_WorkGroupSize before a fixed workgroup size has been declared", op, "");
 4548|   148k|}
_ZN7glslang13TParseContext18constantValueCheckEPNS_12TIntermTypedEPKc:
 4555|      1|{
 4556|      1|    if (! node->getQualifier().isConstant())
  ------------------
  |  Branch (4556:9): [True: 1, False: 0]
  ------------------
 4557|      1|        error(node->getLoc(), "constant expression required", token, "");
 4558|      1|}
_ZN7glslang13TParseContext11globalCheckERKNS_10TSourceLocEPKc:
 4595|  1.21M|{
 4596|  1.21M|    if (! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (4596:9): [True: 0, False: 1.21M]
  ------------------
 4597|      0|        error(loc, "not allowed in nested scope", token, "");
 4598|  1.21M|}
_ZN7glslang13TParseContext18reservedErrorCheckERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 4604|  5.55M|{
 4605|       |    // "Identifiers starting with "gl_" are reserved for use by OpenGL, and may not be
 4606|       |    // declared in a shader; this results in a compile-time error."
 4607|  5.55M|    if (! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (4607:9): [True: 5, False: 5.55M]
  ------------------
 4608|       |        // The extension GL_EXT_conservative_depth allows us to declare "gl_FragDepth".
 4609|      5|        if (identifier == "gl_FragDepth" && extensionTurnedOn(E_GL_EXT_conservative_depth))
  ------------------
  |  Branch (4609:13): [True: 0, False: 5]
  |  Branch (4609:45): [True: 0, False: 0]
  ------------------
 4610|      0|            return;
 4611|       |
 4612|      5|        if (builtInName(identifier) && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
  ------------------
  |  Branch (4612:13): [True: 0, False: 5]
  |  Branch (4612:40): [True: 0, False: 0]
  ------------------
 4613|       |            // The extension GL_EXT_spirv_intrinsics allows us to declare identifiers starting with "gl_".
 4614|      0|            error(loc, "identifiers starting with \"gl_\" are reserved", identifier.c_str(), "");
 4615|       |
 4616|       |        // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
 4617|       |        // "In addition, all identifiers containing two consecutive underscores (__) are
 4618|       |        // reserved; using such a name does not itself result in an error, but may result
 4619|       |        // in undefined behavior."
 4620|       |        // however, before that, ES tests required an error.
 4621|      5|        if (identifier.find("__") != TString::npos && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) {
  ------------------
  |  Branch (4621:13): [True: 0, False: 5]
  |  Branch (4621:55): [True: 0, False: 0]
  ------------------
 4622|       |            // The extension GL_EXT_spirv_intrinsics allows us to declare identifiers starting with "__".
 4623|      0|            if (isEsProfile() && version < 300)
  ------------------
  |  Branch (4623:17): [True: 0, False: 0]
  |  Branch (4623:34): [True: 0, False: 0]
  ------------------
 4624|      0|                error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version < 300", identifier.c_str(), "");
 4625|      0|            else
 4626|      0|                warn(loc, "identifiers containing consecutive underscores (\"__\") are reserved", identifier.c_str(), "");
 4627|      0|        }
 4628|      5|    }
 4629|  5.55M|}
_ZN7glslang13TParseContext20reservedPpErrorCheckERKNS_10TSourceLocEPKcS5_:
 4635|      7|{
 4636|       |    // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
 4637|       |    // "All macro names containing two consecutive underscores ( __ ) are reserved;
 4638|       |    // defining such a name does not itself result in an error, but may result in
 4639|       |    // undefined behavior.  All macro names prefixed with "GL_" ("GL" followed by a
 4640|       |    // single underscore) are also reserved, and defining such a name results in a
 4641|       |    // compile-time error."
 4642|       |    // however, before that, ES tests required an error.
 4643|      7|    if (strncmp(identifier, "GL_", 3) == 0 && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
  ------------------
  |  Branch (4643:9): [True: 0, False: 7]
  |  Branch (4643:47): [True: 0, False: 0]
  ------------------
 4644|       |        // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "GL_".
 4645|      0|        ppError(loc, "names beginning with \"GL_\" can't be (un)defined:", op,  identifier);
 4646|      7|    else if (strncmp(identifier, "defined", 8) == 0)
  ------------------
  |  Branch (4646:14): [True: 0, False: 7]
  ------------------
 4647|      0|        if (relaxedErrors())
  ------------------
  |  Branch (4647:13): [True: 0, False: 0]
  ------------------
 4648|      0|            ppWarn(loc, "\"defined\" is (un)defined:", op,  identifier);
 4649|      0|        else
 4650|      0|            ppError(loc, "\"defined\" can't be (un)defined:", op,  identifier);
 4651|      7|    else if (strstr(identifier, "__") != nullptr && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) {
  ------------------
  |  Branch (4651:14): [True: 0, False: 7]
  |  Branch (4651:53): [True: 0, False: 0]
  ------------------
 4652|       |        // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "__".
 4653|      0|        if (isEsProfile() && version >= 300 &&
  ------------------
  |  Branch (4653:13): [True: 0, False: 0]
  |  Branch (4653:30): [True: 0, False: 0]
  ------------------
 4654|      0|            (strcmp(identifier, "__LINE__") == 0 ||
  ------------------
  |  Branch (4654:14): [True: 0, False: 0]
  ------------------
 4655|      0|             strcmp(identifier, "__FILE__") == 0 ||
  ------------------
  |  Branch (4655:14): [True: 0, False: 0]
  ------------------
 4656|      0|             strcmp(identifier, "__VERSION__") == 0))
  ------------------
  |  Branch (4656:14): [True: 0, False: 0]
  ------------------
 4657|      0|            ppError(loc, "predefined names can't be (un)defined:", op,  identifier);
 4658|      0|        else {
 4659|      0|            if (isEsProfile() && version < 300 && !relaxedErrors())
  ------------------
  |  Branch (4659:17): [True: 0, False: 0]
  |  Branch (4659:34): [True: 0, False: 0]
  |  Branch (4659:51): [True: 0, False: 0]
  ------------------
 4660|      0|                ppError(loc, "names containing consecutive underscores are reserved, and an error if version < 300:", op, identifier);
 4661|      0|            else
 4662|      0|                ppWarn(loc, "names containing consecutive underscores are reserved:", op, identifier);
 4663|      0|        }
 4664|      0|    }
 4665|      7|}
_ZN7glslang13TParseContext21lineContinuationCheckERKNS_10TSourceLocEb:
 4673|  1.75k|{
 4674|  1.75k|    const char* message = "line continuation";
 4675|       |
 4676|  1.75k|    bool lineContinuationAllowed = (isEsProfile() && version >= 300) ||
  ------------------
  |  Branch (4676:37): [True: 1.74k, False: 6]
  |  Branch (4676:54): [True: 384, False: 1.36k]
  ------------------
 4677|  1.36k|                                   (!isEsProfile() && (version >= 420 || extensionTurnedOn(E_GL_ARB_shading_language_420pack)));
  ------------------
  |  Branch (4677:37): [True: 6, False: 1.36k]
  |  Branch (4677:56): [True: 6, False: 0]
  |  Branch (4677:74): [True: 0, False: 0]
  ------------------
 4678|       |
 4679|  1.75k|    if (endOfComment) {
  ------------------
  |  Branch (4679:9): [True: 1.46k, False: 286]
  ------------------
 4680|  1.46k|        if (lineContinuationAllowed)
  ------------------
  |  Branch (4680:13): [True: 134, False: 1.33k]
  ------------------
 4681|    134|            warn(loc, "used at end of comment; the following line is still part of the comment", message, "");
 4682|  1.33k|        else
 4683|  1.33k|            warn(loc, "used at end of comment, but this version does not provide line continuation", message, "");
 4684|       |
 4685|  1.46k|        return lineContinuationAllowed;
 4686|  1.46k|    }
 4687|       |
 4688|    286|    if (relaxedErrors()) {
  ------------------
  |  Branch (4688:9): [True: 205, False: 81]
  ------------------
 4689|    205|        if (! lineContinuationAllowed)
  ------------------
  |  Branch (4689:13): [True: 0, False: 205]
  ------------------
 4690|      0|            warn(loc, "not allowed in this version", message, "");
 4691|    205|        return true;
 4692|    205|    } else {
 4693|     81|        profileRequires(loc, EEsProfile, 300, nullptr, message);
 4694|     81|        profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, message);
 4695|     81|    }
 4696|       |
 4697|     81|    return lineContinuationAllowed;
 4698|    286|}
_ZN7glslang13TParseContext11builtInNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 4701|   420k|{
 4702|   420k|    return identifier.compare(0, 3, "gl_") == 0;
 4703|   420k|}
_ZN7glslang13TParseContext16constructorErrorERKNS_10TSourceLocEP11TIntermNodeRNS_9TFunctionENS_9TOperatorERNS_5TTypeE:
 4725|  4.40k|{
 4726|       |    // See if the constructor does not establish the main type, only requalifies
 4727|       |    // it, in which case the type comes from the argument instead of from the
 4728|       |    // constructor function.
 4729|  4.40k|    switch (op) {
 4730|      0|    case EOpConstructNonuniform:
  ------------------
  |  Branch (4730:5): [True: 0, False: 4.40k]
  ------------------
 4731|      0|        if (node != nullptr && node->getAsTyped() != nullptr) {
  ------------------
  |  Branch (4731:13): [True: 0, False: 0]
  |  Branch (4731:32): [True: 0, False: 0]
  ------------------
 4732|      0|            type.shallowCopy(node->getAsTyped()->getType());
 4733|      0|            type.getQualifier().makeTemporary();
 4734|      0|            type.getQualifier().nonUniform = true;
 4735|      0|        }
 4736|      0|        break;
 4737|  4.40k|    default:
  ------------------
  |  Branch (4737:5): [True: 4.40k, False: 0]
  ------------------
 4738|  4.40k|        type.shallowCopy(function.getType());
 4739|  4.40k|        break;
 4740|  4.40k|    }
 4741|       |
 4742|  4.40k|    TString constructorString;
 4743|  4.40k|    if (intermediate.getEnhancedMsgs())
  ------------------
  |  Branch (4743:9): [True: 0, False: 4.40k]
  ------------------
 4744|      0|        constructorString.append(type.getCompleteString(true, false, false, true)).append(" constructor");
 4745|  4.40k|    else
 4746|  4.40k|        constructorString.append("constructor");
 4747|       |
 4748|       |    // See if it's a matrix
 4749|  4.40k|    bool constructingMatrix = false;
 4750|  4.40k|    switch (op) {
 4751|      0|    case EOpConstructTextureSampler:
  ------------------
  |  Branch (4751:5): [True: 0, False: 4.40k]
  ------------------
 4752|      0|        return constructorTextureSamplerError(loc, function);
 4753|      0|    case EOpConstructMat2x2:
  ------------------
  |  Branch (4753:5): [True: 0, False: 4.40k]
  ------------------
 4754|      0|    case EOpConstructMat2x3:
  ------------------
  |  Branch (4754:5): [True: 0, False: 4.40k]
  ------------------
 4755|      0|    case EOpConstructMat2x4:
  ------------------
  |  Branch (4755:5): [True: 0, False: 4.40k]
  ------------------
 4756|      0|    case EOpConstructMat3x2:
  ------------------
  |  Branch (4756:5): [True: 0, False: 4.40k]
  ------------------
 4757|      0|    case EOpConstructMat3x3:
  ------------------
  |  Branch (4757:5): [True: 0, False: 4.40k]
  ------------------
 4758|      0|    case EOpConstructMat3x4:
  ------------------
  |  Branch (4758:5): [True: 0, False: 4.40k]
  ------------------
 4759|      0|    case EOpConstructMat4x2:
  ------------------
  |  Branch (4759:5): [True: 0, False: 4.40k]
  ------------------
 4760|      0|    case EOpConstructMat4x3:
  ------------------
  |  Branch (4760:5): [True: 0, False: 4.40k]
  ------------------
 4761|      0|    case EOpConstructMat4x4:
  ------------------
  |  Branch (4761:5): [True: 0, False: 4.40k]
  ------------------
 4762|      0|    case EOpConstructDMat2x2:
  ------------------
  |  Branch (4762:5): [True: 0, False: 4.40k]
  ------------------
 4763|      0|    case EOpConstructDMat2x3:
  ------------------
  |  Branch (4763:5): [True: 0, False: 4.40k]
  ------------------
 4764|      0|    case EOpConstructDMat2x4:
  ------------------
  |  Branch (4764:5): [True: 0, False: 4.40k]
  ------------------
 4765|      0|    case EOpConstructDMat3x2:
  ------------------
  |  Branch (4765:5): [True: 0, False: 4.40k]
  ------------------
 4766|      0|    case EOpConstructDMat3x3:
  ------------------
  |  Branch (4766:5): [True: 0, False: 4.40k]
  ------------------
 4767|      0|    case EOpConstructDMat3x4:
  ------------------
  |  Branch (4767:5): [True: 0, False: 4.40k]
  ------------------
 4768|      0|    case EOpConstructDMat4x2:
  ------------------
  |  Branch (4768:5): [True: 0, False: 4.40k]
  ------------------
 4769|      0|    case EOpConstructDMat4x3:
  ------------------
  |  Branch (4769:5): [True: 0, False: 4.40k]
  ------------------
 4770|      0|    case EOpConstructDMat4x4:
  ------------------
  |  Branch (4770:5): [True: 0, False: 4.40k]
  ------------------
 4771|      0|    case EOpConstructF16Mat2x2:
  ------------------
  |  Branch (4771:5): [True: 0, False: 4.40k]
  ------------------
 4772|      0|    case EOpConstructF16Mat2x3:
  ------------------
  |  Branch (4772:5): [True: 0, False: 4.40k]
  ------------------
 4773|      0|    case EOpConstructF16Mat2x4:
  ------------------
  |  Branch (4773:5): [True: 0, False: 4.40k]
  ------------------
 4774|      0|    case EOpConstructF16Mat3x2:
  ------------------
  |  Branch (4774:5): [True: 0, False: 4.40k]
  ------------------
 4775|      0|    case EOpConstructF16Mat3x3:
  ------------------
  |  Branch (4775:5): [True: 0, False: 4.40k]
  ------------------
 4776|      0|    case EOpConstructF16Mat3x4:
  ------------------
  |  Branch (4776:5): [True: 0, False: 4.40k]
  ------------------
 4777|      0|    case EOpConstructF16Mat4x2:
  ------------------
  |  Branch (4777:5): [True: 0, False: 4.40k]
  ------------------
 4778|      0|    case EOpConstructF16Mat4x3:
  ------------------
  |  Branch (4778:5): [True: 0, False: 4.40k]
  ------------------
 4779|      0|    case EOpConstructF16Mat4x4:
  ------------------
  |  Branch (4779:5): [True: 0, False: 4.40k]
  ------------------
 4780|      0|        constructingMatrix = true;
 4781|      0|        break;
 4782|  4.40k|    default:
  ------------------
  |  Branch (4782:5): [True: 4.40k, False: 0]
  ------------------
 4783|  4.40k|        break;
 4784|  4.40k|    }
 4785|       |
 4786|       |    //
 4787|       |    // Walk the arguments for first-pass checks and collection of information.
 4788|       |    //
 4789|       |
 4790|  4.40k|    int size = 0;
 4791|  4.40k|    bool constType = true;
 4792|  4.40k|    bool specConstType = false;   // value is only valid if constType is true
 4793|  4.40k|    bool full = false;
 4794|  4.40k|    bool overFull = false;
 4795|  4.40k|    bool matrixInMatrix = false;
 4796|  4.40k|    bool arrayArg = false;
 4797|  4.40k|    bool floatArgument = false;
 4798|  4.40k|    bool intArgument = false;
 4799|  17.6k|    for (int arg = 0; arg < function.getParamCount(); ++arg) {
  ------------------
  |  Branch (4799:23): [True: 13.2k, False: 4.40k]
  ------------------
 4800|  13.2k|        if (function[arg].type->isArray()) {
  ------------------
  |  Branch (4800:13): [True: 0, False: 13.2k]
  ------------------
 4801|      0|            if (function[arg].type->isUnsizedArray()) {
  ------------------
  |  Branch (4801:17): [True: 0, False: 0]
  ------------------
 4802|       |                // Can't construct from an unsized array.
 4803|      0|                error(loc, "array argument must be sized", constructorString.c_str(), "");
 4804|      0|                return true;
 4805|      0|            }
 4806|      0|            arrayArg = true;
 4807|      0|        }
 4808|  13.2k|        if (function[arg].type->getBasicType() == EbtString) {
  ------------------
  |  Branch (4808:13): [True: 0, False: 13.2k]
  ------------------
 4809|      0|            error(loc, "cannot convert a string", constructorString.c_str(), "");
 4810|      0|            return true;
 4811|      0|        }
 4812|  13.2k|        if (constructingMatrix && function[arg].type->isMatrix())
  ------------------
  |  Branch (4812:13): [True: 0, False: 13.2k]
  |  Branch (4812:35): [True: 0, False: 0]
  ------------------
 4813|      0|            matrixInMatrix = true;
 4814|       |
 4815|       |        // 'full' will go to true when enough args have been seen.  If we loop
 4816|       |        // again, there is an extra argument.
 4817|  13.2k|        if (full) {
  ------------------
  |  Branch (4817:13): [True: 0, False: 13.2k]
  ------------------
 4818|       |            // For vectors and matrices, it's okay to have too many components
 4819|       |            // available, but not okay to have unused arguments.
 4820|      0|            overFull = true;
 4821|      0|        }
 4822|       |
 4823|  13.2k|        size += function[arg].type->computeNumComponents();
 4824|  13.2k|        if (op != EOpConstructStruct && ! type.isArray() && size >= type.computeNumComponents())
  ------------------
  |  Branch (4824:13): [True: 13.2k, False: 0]
  |  Branch (4824:41): [True: 13.2k, False: 0]
  |  Branch (4824:61): [True: 4.40k, False: 8.80k]
  ------------------
 4825|  4.40k|            full = true;
 4826|       |
 4827|  13.2k|        if (! function[arg].type->getQualifier().isConstant())
  ------------------
  |  Branch (4827:13): [True: 0, False: 13.2k]
  ------------------
 4828|      0|            constType = false;
 4829|  13.2k|        if (function[arg].type->getQualifier().isSpecConstant())
  ------------------
  |  Branch (4829:13): [True: 0, False: 13.2k]
  ------------------
 4830|      0|            specConstType = true;
 4831|  13.2k|        if (function[arg].type->isFloatingDomain())
  ------------------
  |  Branch (4831:13): [True: 0, False: 13.2k]
  ------------------
 4832|      0|            floatArgument = true;
 4833|  13.2k|        if (function[arg].type->isIntegerDomain())
  ------------------
  |  Branch (4833:13): [True: 13.2k, False: 0]
  ------------------
 4834|  13.2k|            intArgument = true;
 4835|  13.2k|        if (type.isStruct()) {
  ------------------
  |  Branch (4835:13): [True: 0, False: 13.2k]
  ------------------
 4836|      0|            if (function[arg].type->contains16BitFloat()) {
  ------------------
  |  Branch (4836:17): [True: 0, False: 0]
  ------------------
 4837|      0|                requireFloat16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type");
 4838|      0|            }
 4839|      0|            if (function[arg].type->contains16BitInt()) {
  ------------------
  |  Branch (4839:17): [True: 0, False: 0]
  ------------------
 4840|      0|                requireInt16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type");
 4841|      0|            }
 4842|      0|            if (function[arg].type->contains8BitInt()) {
  ------------------
  |  Branch (4842:17): [True: 0, False: 0]
  ------------------
 4843|      0|                requireInt8Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 8-bit type");
 4844|      0|            }
 4845|      0|        }
 4846|  13.2k|    }
 4847|  4.40k|    if (op == EOpConstructNonuniform)
  ------------------
  |  Branch (4847:9): [True: 0, False: 4.40k]
  ------------------
 4848|      0|        constType = false;
 4849|       |
 4850|  4.40k|    switch (op) {
 4851|      0|    case EOpConstructFloat16:
  ------------------
  |  Branch (4851:5): [True: 0, False: 4.40k]
  ------------------
 4852|      0|    case EOpConstructF16Vec2:
  ------------------
  |  Branch (4852:5): [True: 0, False: 4.40k]
  ------------------
 4853|      0|    case EOpConstructF16Vec3:
  ------------------
  |  Branch (4853:5): [True: 0, False: 4.40k]
  ------------------
 4854|      0|    case EOpConstructF16Vec4:
  ------------------
  |  Branch (4854:5): [True: 0, False: 4.40k]
  ------------------
 4855|      0|        if (type.isArray())
  ------------------
  |  Branch (4855:13): [True: 0, False: 0]
  ------------------
 4856|      0|            requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported");
 4857|      0|        if (type.isVector() && function.getParamCount() != 1)
  ------------------
  |  Branch (4857:13): [True: 0, False: 0]
  |  Branch (4857:32): [True: 0, False: 0]
  ------------------
 4858|      0|            requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types");
 4859|      0|        break;
 4860|      0|    case EOpConstructUint16:
  ------------------
  |  Branch (4860:5): [True: 0, False: 4.40k]
  ------------------
 4861|      0|    case EOpConstructU16Vec2:
  ------------------
  |  Branch (4861:5): [True: 0, False: 4.40k]
  ------------------
 4862|      0|    case EOpConstructU16Vec3:
  ------------------
  |  Branch (4862:5): [True: 0, False: 4.40k]
  ------------------
 4863|      0|    case EOpConstructU16Vec4:
  ------------------
  |  Branch (4863:5): [True: 0, False: 4.40k]
  ------------------
 4864|      0|    case EOpConstructInt16:
  ------------------
  |  Branch (4864:5): [True: 0, False: 4.40k]
  ------------------
 4865|      0|    case EOpConstructI16Vec2:
  ------------------
  |  Branch (4865:5): [True: 0, False: 4.40k]
  ------------------
 4866|      0|    case EOpConstructI16Vec3:
  ------------------
  |  Branch (4866:5): [True: 0, False: 4.40k]
  ------------------
 4867|      0|    case EOpConstructI16Vec4:
  ------------------
  |  Branch (4867:5): [True: 0, False: 4.40k]
  ------------------
 4868|      0|        if (type.isArray())
  ------------------
  |  Branch (4868:13): [True: 0, False: 0]
  ------------------
 4869|      0|            requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported");
 4870|      0|        if (type.isVector() && function.getParamCount() != 1)
  ------------------
  |  Branch (4870:13): [True: 0, False: 0]
  |  Branch (4870:32): [True: 0, False: 0]
  ------------------
 4871|      0|            requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types");
 4872|      0|        break;
 4873|      0|    case EOpConstructUint8:
  ------------------
  |  Branch (4873:5): [True: 0, False: 4.40k]
  ------------------
 4874|      0|    case EOpConstructU8Vec2:
  ------------------
  |  Branch (4874:5): [True: 0, False: 4.40k]
  ------------------
 4875|      0|    case EOpConstructU8Vec3:
  ------------------
  |  Branch (4875:5): [True: 0, False: 4.40k]
  ------------------
 4876|      0|    case EOpConstructU8Vec4:
  ------------------
  |  Branch (4876:5): [True: 0, False: 4.40k]
  ------------------
 4877|      0|    case EOpConstructInt8:
  ------------------
  |  Branch (4877:5): [True: 0, False: 4.40k]
  ------------------
 4878|      0|    case EOpConstructI8Vec2:
  ------------------
  |  Branch (4878:5): [True: 0, False: 4.40k]
  ------------------
 4879|      0|    case EOpConstructI8Vec3:
  ------------------
  |  Branch (4879:5): [True: 0, False: 4.40k]
  ------------------
 4880|      0|    case EOpConstructI8Vec4:
  ------------------
  |  Branch (4880:5): [True: 0, False: 4.40k]
  ------------------
 4881|      0|        if (type.isArray())
  ------------------
  |  Branch (4881:13): [True: 0, False: 0]
  ------------------
 4882|      0|            requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit arrays not supported");
 4883|      0|        if (type.isVector() && function.getParamCount() != 1)
  ------------------
  |  Branch (4883:13): [True: 0, False: 0]
  |  Branch (4883:32): [True: 0, False: 0]
  ------------------
 4884|      0|            requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit vectors only take vector types");
 4885|      0|        break;
 4886|      0|    case EOpConstructFloatE2M1:
  ------------------
  |  Branch (4886:5): [True: 0, False: 4.40k]
  ------------------
 4887|      0|    case EOpConstructFloatE2M1Vec2:
  ------------------
  |  Branch (4887:5): [True: 0, False: 4.40k]
  ------------------
 4888|      0|    case EOpConstructFloatE2M1Vec3:
  ------------------
  |  Branch (4888:5): [True: 0, False: 4.40k]
  ------------------
 4889|      0|    case EOpConstructFloatE2M1Vec4:
  ------------------
  |  Branch (4889:5): [True: 0, False: 4.40k]
  ------------------
 4890|      0|    case EOpConstructFloatE3M2:
  ------------------
  |  Branch (4890:5): [True: 0, False: 4.40k]
  ------------------
 4891|      0|    case EOpConstructFloatE3M2Vec2:
  ------------------
  |  Branch (4891:5): [True: 0, False: 4.40k]
  ------------------
 4892|      0|    case EOpConstructFloatE3M2Vec3:
  ------------------
  |  Branch (4892:5): [True: 0, False: 4.40k]
  ------------------
 4893|      0|    case EOpConstructFloatE3M2Vec4:
  ------------------
  |  Branch (4893:5): [True: 0, False: 4.40k]
  ------------------
 4894|      0|    case EOpConstructFloatE2M3:
  ------------------
  |  Branch (4894:5): [True: 0, False: 4.40k]
  ------------------
 4895|      0|    case EOpConstructFloatE2M3Vec2:
  ------------------
  |  Branch (4895:5): [True: 0, False: 4.40k]
  ------------------
 4896|      0|    case EOpConstructFloatE2M3Vec3:
  ------------------
  |  Branch (4896:5): [True: 0, False: 4.40k]
  ------------------
 4897|      0|    case EOpConstructFloatE2M3Vec4:
  ------------------
  |  Branch (4897:5): [True: 0, False: 4.40k]
  ------------------
 4898|      0|    case EOpConstructFloatUE8M0:
  ------------------
  |  Branch (4898:5): [True: 0, False: 4.40k]
  ------------------
 4899|      0|    case EOpConstructFloatUE8M0Vec2:
  ------------------
  |  Branch (4899:5): [True: 0, False: 4.40k]
  ------------------
 4900|      0|    case EOpConstructFloatUE8M0Vec3:
  ------------------
  |  Branch (4900:5): [True: 0, False: 4.40k]
  ------------------
 4901|      0|    case EOpConstructFloatUE8M0Vec4:
  ------------------
  |  Branch (4901:5): [True: 0, False: 4.40k]
  ------------------
 4902|      0|    case EOpConstructFloatMXINT8:
  ------------------
  |  Branch (4902:5): [True: 0, False: 4.40k]
  ------------------
 4903|      0|    case EOpConstructFloatMXINT8Vec2:
  ------------------
  |  Branch (4903:5): [True: 0, False: 4.40k]
  ------------------
 4904|      0|    case EOpConstructFloatMXINT8Vec3:
  ------------------
  |  Branch (4904:5): [True: 0, False: 4.40k]
  ------------------
 4905|      0|    case EOpConstructFloatMXINT8Vec4:
  ------------------
  |  Branch (4905:5): [True: 0, False: 4.40k]
  ------------------
 4906|      0|        if (!constType || specConstType) {
  ------------------
  |  Branch (4906:13): [True: 0, False: 0]
  |  Branch (4906:27): [True: 0, False: 0]
  ------------------
 4907|      0|            for (int i = 0; i < function.getParamCount(); ++i) {
  ------------------
  |  Branch (4907:29): [True: 0, False: 0]
  ------------------
 4908|      0|                TIntermNode* arg = function.getParamCount() == 1 ? node : node->getAsAggregate()->getSequence()[i];
  ------------------
  |  Branch (4908:36): [True: 0, False: 0]
  ------------------
 4909|      0|                if (arg->getAsTyped()->getBasicType() != type.getBasicType()) {
  ------------------
  |  Branch (4909:21): [True: 0, False: 0]
  ------------------
 4910|      0|                    error(loc, "constructor argument must be a non-spec constant", constructorString.c_str(), "");
 4911|      0|                    return true;
 4912|      0|                }
 4913|      0|            }
 4914|      0|        }
 4915|      0|        break;
 4916|  4.40k|    default:
  ------------------
  |  Branch (4916:5): [True: 4.40k, False: 0]
  ------------------
 4917|  4.40k|        break;
 4918|  4.40k|    }
 4919|       |
 4920|       |    // inherit constness from children
 4921|  4.40k|    if (constType) {
  ------------------
  |  Branch (4921:9): [True: 4.40k, False: 0]
  ------------------
 4922|  4.40k|        bool makeSpecConst;
 4923|       |        // Finish pinning down spec-const semantics
 4924|  4.40k|        if (specConstType) {
  ------------------
  |  Branch (4924:13): [True: 0, False: 4.40k]
  ------------------
 4925|      0|            switch (op) {
 4926|      0|            case EOpConstructInt8:
  ------------------
  |  Branch (4926:13): [True: 0, False: 0]
  ------------------
 4927|      0|            case EOpConstructInt:
  ------------------
  |  Branch (4927:13): [True: 0, False: 0]
  ------------------
 4928|      0|            case EOpConstructUint:
  ------------------
  |  Branch (4928:13): [True: 0, False: 0]
  ------------------
 4929|      0|            case EOpConstructBool:
  ------------------
  |  Branch (4929:13): [True: 0, False: 0]
  ------------------
 4930|      0|            case EOpConstructBVec2:
  ------------------
  |  Branch (4930:13): [True: 0, False: 0]
  ------------------
 4931|      0|            case EOpConstructBVec3:
  ------------------
  |  Branch (4931:13): [True: 0, False: 0]
  ------------------
 4932|      0|            case EOpConstructBVec4:
  ------------------
  |  Branch (4932:13): [True: 0, False: 0]
  ------------------
 4933|      0|            case EOpConstructIVec2:
  ------------------
  |  Branch (4933:13): [True: 0, False: 0]
  ------------------
 4934|      0|            case EOpConstructIVec3:
  ------------------
  |  Branch (4934:13): [True: 0, False: 0]
  ------------------
 4935|      0|            case EOpConstructIVec4:
  ------------------
  |  Branch (4935:13): [True: 0, False: 0]
  ------------------
 4936|      0|            case EOpConstructUVec2:
  ------------------
  |  Branch (4936:13): [True: 0, False: 0]
  ------------------
 4937|      0|            case EOpConstructUVec3:
  ------------------
  |  Branch (4937:13): [True: 0, False: 0]
  ------------------
 4938|      0|            case EOpConstructUVec4:
  ------------------
  |  Branch (4938:13): [True: 0, False: 0]
  ------------------
 4939|      0|            case EOpConstructUint8:
  ------------------
  |  Branch (4939:13): [True: 0, False: 0]
  ------------------
 4940|      0|            case EOpConstructInt16:
  ------------------
  |  Branch (4940:13): [True: 0, False: 0]
  ------------------
 4941|      0|            case EOpConstructUint16:
  ------------------
  |  Branch (4941:13): [True: 0, False: 0]
  ------------------
 4942|      0|            case EOpConstructInt64:
  ------------------
  |  Branch (4942:13): [True: 0, False: 0]
  ------------------
 4943|      0|            case EOpConstructUint64:
  ------------------
  |  Branch (4943:13): [True: 0, False: 0]
  ------------------
 4944|      0|            case EOpConstructI8Vec2:
  ------------------
  |  Branch (4944:13): [True: 0, False: 0]
  ------------------
 4945|      0|            case EOpConstructI8Vec3:
  ------------------
  |  Branch (4945:13): [True: 0, False: 0]
  ------------------
 4946|      0|            case EOpConstructI8Vec4:
  ------------------
  |  Branch (4946:13): [True: 0, False: 0]
  ------------------
 4947|      0|            case EOpConstructU8Vec2:
  ------------------
  |  Branch (4947:13): [True: 0, False: 0]
  ------------------
 4948|      0|            case EOpConstructU8Vec3:
  ------------------
  |  Branch (4948:13): [True: 0, False: 0]
  ------------------
 4949|      0|            case EOpConstructU8Vec4:
  ------------------
  |  Branch (4949:13): [True: 0, False: 0]
  ------------------
 4950|      0|            case EOpConstructI16Vec2:
  ------------------
  |  Branch (4950:13): [True: 0, False: 0]
  ------------------
 4951|      0|            case EOpConstructI16Vec3:
  ------------------
  |  Branch (4951:13): [True: 0, False: 0]
  ------------------
 4952|      0|            case EOpConstructI16Vec4:
  ------------------
  |  Branch (4952:13): [True: 0, False: 0]
  ------------------
 4953|      0|            case EOpConstructU16Vec2:
  ------------------
  |  Branch (4953:13): [True: 0, False: 0]
  ------------------
 4954|      0|            case EOpConstructU16Vec3:
  ------------------
  |  Branch (4954:13): [True: 0, False: 0]
  ------------------
 4955|      0|            case EOpConstructU16Vec4:
  ------------------
  |  Branch (4955:13): [True: 0, False: 0]
  ------------------
 4956|      0|            case EOpConstructI64Vec2:
  ------------------
  |  Branch (4956:13): [True: 0, False: 0]
  ------------------
 4957|      0|            case EOpConstructI64Vec3:
  ------------------
  |  Branch (4957:13): [True: 0, False: 0]
  ------------------
 4958|      0|            case EOpConstructI64Vec4:
  ------------------
  |  Branch (4958:13): [True: 0, False: 0]
  ------------------
 4959|      0|            case EOpConstructU64Vec2:
  ------------------
  |  Branch (4959:13): [True: 0, False: 0]
  ------------------
 4960|      0|            case EOpConstructU64Vec3:
  ------------------
  |  Branch (4960:13): [True: 0, False: 0]
  ------------------
 4961|      0|            case EOpConstructU64Vec4:
  ------------------
  |  Branch (4961:13): [True: 0, False: 0]
  ------------------
 4962|       |                // This was the list of valid ones, if they aren't converting from float
 4963|       |                // and aren't making an array.
 4964|      0|                makeSpecConst = ! floatArgument && ! type.isArray();
  ------------------
  |  Branch (4964:33): [True: 0, False: 0]
  |  Branch (4964:52): [True: 0, False: 0]
  ------------------
 4965|      0|                break;
 4966|       |
 4967|      0|            case EOpConstructVec2:
  ------------------
  |  Branch (4967:13): [True: 0, False: 0]
  ------------------
 4968|      0|            case EOpConstructVec3:
  ------------------
  |  Branch (4968:13): [True: 0, False: 0]
  ------------------
 4969|      0|            case EOpConstructVec4:
  ------------------
  |  Branch (4969:13): [True: 0, False: 0]
  ------------------
 4970|       |                // This was the list of valid ones, if they aren't converting from int
 4971|       |                // and aren't making an array.
 4972|      0|                makeSpecConst = ! intArgument && !type.isArray();
  ------------------
  |  Branch (4972:33): [True: 0, False: 0]
  |  Branch (4972:50): [True: 0, False: 0]
  ------------------
 4973|      0|                break;
 4974|       |
 4975|      0|            case EOpConstructCooperativeMatrixNV:
  ------------------
  |  Branch (4975:13): [True: 0, False: 0]
  ------------------
 4976|      0|            case EOpConstructCooperativeMatrixKHR:
  ------------------
  |  Branch (4976:13): [True: 0, False: 0]
  ------------------
 4977|      0|            case EOpConstructStruct:
  ------------------
  |  Branch (4977:13): [True: 0, False: 0]
  ------------------
 4978|      0|                {
 4979|      0|                    const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites };
 4980|      0|                    if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) {
  ------------------
  |  Branch (4980:25): [True: 0, False: 0]
  ------------------
 4981|      0|                        makeSpecConst = true;
 4982|      0|                    } else {
 4983|      0|                        makeSpecConst = false;
 4984|      0|                    }
 4985|      0|                }
 4986|      0|                break;
 4987|       |
 4988|      0|            default:
  ------------------
  |  Branch (4988:13): [True: 0, False: 0]
  ------------------
 4989|       |                // anything else wasn't white-listed in the spec as a conversion
 4990|      0|                makeSpecConst = false;
 4991|      0|                break;
 4992|      0|            }
 4993|      0|        } else
 4994|  4.40k|            makeSpecConst = false;
 4995|       |
 4996|  4.40k|        if (makeSpecConst)
  ------------------
  |  Branch (4996:13): [True: 0, False: 4.40k]
  ------------------
 4997|      0|            type.getQualifier().makeSpecConstant();
 4998|  4.40k|        else if (specConstType)
  ------------------
  |  Branch (4998:18): [True: 0, False: 4.40k]
  ------------------
 4999|      0|            type.getQualifier().makeTemporary();
 5000|  4.40k|        else
 5001|  4.40k|            type.getQualifier().storage = EvqConst;
 5002|  4.40k|    }
 5003|       |
 5004|  4.40k|    if (type.isArray()) {
  ------------------
  |  Branch (5004:9): [True: 0, False: 4.40k]
  ------------------
 5005|      0|        if (function.getParamCount() == 0) {
  ------------------
  |  Branch (5005:13): [True: 0, False: 0]
  ------------------
 5006|      0|            error(loc, "array constructor must have at least one argument", constructorString.c_str(), "");
 5007|      0|            return true;
 5008|      0|        }
 5009|       |
 5010|      0|        if (type.isUnsizedArray()) {
  ------------------
  |  Branch (5010:13): [True: 0, False: 0]
  ------------------
 5011|       |            // auto adapt the constructor type to the number of arguments
 5012|      0|            type.changeOuterArraySize(function.getParamCount());
 5013|      0|        } else if (type.getOuterArraySize() != function.getParamCount()) {
  ------------------
  |  Branch (5013:20): [True: 0, False: 0]
  ------------------
 5014|      0|            error(loc, "array constructor needs one argument per array element", constructorString.c_str(), "");
 5015|      0|            return true;
 5016|      0|        }
 5017|       |
 5018|      0|        if (type.isArrayOfArrays()) {
  ------------------
  |  Branch (5018:13): [True: 0, False: 0]
  ------------------
 5019|       |            // Types have to match, but we're still making the type.
 5020|       |            // Finish making the type, and the comparison is done later
 5021|       |            // when checking for conversion.
 5022|      0|            TArraySizes& arraySizes = *type.getArraySizes();
 5023|       |
 5024|       |            // At least the dimensionalities have to match.
 5025|      0|            if (! function[0].type->isArray() ||
  ------------------
  |  Branch (5025:17): [True: 0, False: 0]
  ------------------
 5026|      0|                    arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) {
  ------------------
  |  Branch (5026:21): [True: 0, False: 0]
  ------------------
 5027|      0|                error(loc, "array constructor argument not correct type to construct array element", constructorString.c_str(), "");
 5028|      0|                return true;
 5029|      0|            }
 5030|       |
 5031|      0|            if (arraySizes.isInnerUnsized()) {
  ------------------
  |  Branch (5031:17): [True: 0, False: 0]
  ------------------
 5032|       |                // "Arrays of arrays ..., and the size for any dimension is optional"
 5033|       |                // That means we need to adopt (from the first argument) the other array sizes into the type.
 5034|      0|                for (int d = 1; d < arraySizes.getNumDims(); ++d) {
  ------------------
  |  Branch (5034:33): [True: 0, False: 0]
  ------------------
 5035|      0|                    if (arraySizes.getDimSize(d) == UnsizedArraySize) {
  ------------------
  |  Branch (5035:25): [True: 0, False: 0]
  ------------------
 5036|      0|                        arraySizes.setDimSize(d, function[0].type->getArraySizes()->getDimSize(d - 1));
 5037|      0|                    }
 5038|      0|                }
 5039|      0|            }
 5040|      0|        }
 5041|      0|    }
 5042|       |
 5043|  4.40k|    if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) {
  ------------------
  |  Branch (5043:9): [True: 0, False: 4.40k]
  |  Branch (5043:21): [True: 0, False: 0]
  |  Branch (5043:49): [True: 0, False: 0]
  ------------------
 5044|      0|        error(loc, "constructing non-array constituent from array argument", constructorString.c_str(), "");
 5045|      0|        return true;
 5046|      0|    }
 5047|       |
 5048|  4.40k|    if (matrixInMatrix && ! type.isArray()) {
  ------------------
  |  Branch (5048:9): [True: 0, False: 4.40k]
  |  Branch (5048:27): [True: 0, False: 0]
  ------------------
 5049|      0|        profileRequires(loc, ENoProfile, 120, nullptr, "constructing matrix from matrix");
 5050|       |
 5051|       |        // "If a matrix argument is given to a matrix constructor,
 5052|       |        // it is a compile-time error to have any other arguments."
 5053|      0|        if (function.getParamCount() != 1)
  ------------------
  |  Branch (5053:13): [True: 0, False: 0]
  ------------------
 5054|      0|            error(loc, "matrix constructed from matrix can only have one argument", constructorString.c_str(), "");
 5055|      0|        return false;
 5056|      0|    }
 5057|       |
 5058|  4.40k|    if (overFull) {
  ------------------
  |  Branch (5058:9): [True: 0, False: 4.40k]
  ------------------
 5059|      0|        error(loc, "too many arguments", constructorString.c_str(), "");
 5060|      0|        return true;
 5061|      0|    }
 5062|       |
 5063|  4.40k|    if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) {
  ------------------
  |  Branch (5063:9): [True: 0, False: 4.40k]
  |  Branch (5063:37): [True: 0, False: 0]
  |  Branch (5063:57): [True: 0, False: 0]
  ------------------
 5064|      0|        error(loc, "Number of constructor parameters does not match the number of structure fields", constructorString.c_str(), "");
 5065|      0|        return true;
 5066|      0|    }
 5067|       |
 5068|  4.40k|    if (type.isLongVector() && !isValidLongVectorElseError(loc, type)) {
  ------------------
  |  Branch (5068:9): [True: 0, False: 4.40k]
  |  Branch (5068:32): [True: 0, False: 0]
  ------------------
 5069|      0|        return true;
 5070|      0|    }
 5071|       |
 5072|  4.40k|    if ((op != EOpConstructStruct && size != 1 && size < type.computeNumComponents()) ||
  ------------------
  |  Branch (5072:10): [True: 4.40k, False: 0]
  |  Branch (5072:38): [True: 4.40k, False: 0]
  |  Branch (5072:51): [True: 0, False: 4.40k]
  ------------------
 5073|  4.40k|        (op == EOpConstructStruct && size < type.computeNumComponents())) {
  ------------------
  |  Branch (5073:10): [True: 0, False: 4.40k]
  |  Branch (5073:38): [True: 0, False: 0]
  ------------------
 5074|      0|        error(loc, "not enough data provided for construction", constructorString.c_str(), "");
 5075|      0|        return true;
 5076|      0|    }
 5077|       |
 5078|  4.40k|    if (type.isCoopMat() && function.getParamCount() != 1) {
  ------------------
  |  Branch (5078:9): [True: 0, False: 4.40k]
  |  Branch (5078:29): [True: 0, False: 0]
  ------------------
 5079|      0|        error(loc, "wrong number of arguments", constructorString.c_str(), "");
 5080|      0|        return true;
 5081|      0|    }
 5082|  4.40k|    if (type.isCoopMat() &&
  ------------------
  |  Branch (5082:9): [True: 0, False: 4.40k]
  ------------------
 5083|      0|        !(function[0].type->isScalar() || function[0].type->isCoopMat())) {
  ------------------
  |  Branch (5083:11): [True: 0, False: 0]
  |  Branch (5083:43): [True: 0, False: 0]
  ------------------
 5084|      0|        error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", constructorString.c_str(), "");
 5085|      0|        return true;
 5086|      0|    }
 5087|       |
 5088|  4.40k|    TIntermTyped* typed = node->getAsTyped();
 5089|  4.40k|    if (typed == nullptr) {
  ------------------
  |  Branch (5089:9): [True: 0, False: 4.40k]
  ------------------
 5090|      0|        error(loc, "constructor argument does not have a type", constructorString.c_str(), "");
 5091|      0|        return true;
 5092|      0|    }
 5093|       |
 5094|  4.40k|    if (type.isCoopMat() && typed->getType().isCoopMat()) {
  ------------------
  |  Branch (5094:9): [True: 0, False: 4.40k]
  |  Branch (5094:29): [True: 0, False: 0]
  ------------------
 5095|      0|        static constexpr int CM_UseA = 0;   // == gl_MatrixUseA
 5096|      0|        static constexpr int CM_UseB = 1;   // == gl_MatrixUseB
 5097|      0|        static constexpr int CM_UseAcc = 2; // == gl_MatrixUseAccumulator
 5098|       |
 5099|      0|        int dstUse = type.getCoopMatKHRuse();
 5100|      0|        int srcUse = typed->getType().getCoopMatKHRuse();
 5101|       |
 5102|      0|        if (extensionTurnedOn(E_GL_EXT_cooperative_matrix_maintenance1)) {
  ------------------
  |  Branch (5102:13): [True: 0, False: 0]
  ------------------
 5103|      0|            bool allowedConversion = srcUse == dstUse ||
  ------------------
  |  Branch (5103:38): [True: 0, False: 0]
  ------------------
 5104|      0|                                    (srcUse == CM_UseAcc && (dstUse == CM_UseA || dstUse == CM_UseB)) ||
  ------------------
  |  Branch (5104:38): [True: 0, False: 0]
  |  Branch (5104:62): [True: 0, False: 0]
  |  Branch (5104:83): [True: 0, False: 0]
  ------------------
 5105|      0|                                    (dstUse == CM_UseAcc && (srcUse == CM_UseA || srcUse == CM_UseB));
  ------------------
  |  Branch (5105:38): [True: 0, False: 0]
  |  Branch (5105:62): [True: 0, False: 0]
  |  Branch (5105:83): [True: 0, False: 0]
  ------------------
 5106|      0|            if (!type.sameCoopMatShape(typed->getType()) || !allowedConversion) {
  ------------------
  |  Branch (5106:17): [True: 0, False: 0]
  |  Branch (5106:61): [True: 0, False: 0]
  ------------------
 5107|      0|                error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), "");
 5108|      0|                return true;
 5109|      0|            }
 5110|      0|        } else if (extensionTurnedOn(E_GL_NV_cooperative_matrix2)) {
  ------------------
  |  Branch (5110:20): [True: 0, False: 0]
  ------------------
 5111|      0|            bool allowedConversion = srcUse == dstUse ||
  ------------------
  |  Branch (5111:38): [True: 0, False: 0]
  ------------------
 5112|      0|                                    (srcUse == CM_UseAcc && (dstUse == CM_UseA || dstUse == CM_UseB));
  ------------------
  |  Branch (5112:38): [True: 0, False: 0]
  |  Branch (5112:62): [True: 0, False: 0]
  |  Branch (5112:83): [True: 0, False: 0]
  ------------------
 5113|      0|            if (!type.sameCoopMatShape(typed->getType()) || !allowedConversion) {
  ------------------
  |  Branch (5113:17): [True: 0, False: 0]
  |  Branch (5113:61): [True: 0, False: 0]
  ------------------
 5114|      0|                error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), "");
 5115|      0|                return true;
 5116|      0|            }
 5117|      0|        } else {
 5118|      0|            if (!type.sameCoopMatShapeAndUse(typed->getType())) {
  ------------------
  |  Branch (5118:17): [True: 0, False: 0]
  ------------------
 5119|      0|                error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), "");
 5120|      0|                return true;
 5121|      0|            }
 5122|      0|        }
 5123|      0|    }
 5124|       |
 5125|  4.40k|    if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) {
  ------------------
  |  Branch (5125:9): [True: 4.40k, False: 0]
  |  Branch (5125:37): [True: 4.40k, False: 0]
  |  Branch (5125:69): [True: 0, False: 4.40k]
  ------------------
 5126|      0|        if (op == EOpConstructUVec2 && extensionTurnedOn(E_GL_ARB_bindless_texture)) {
  ------------------
  |  Branch (5126:13): [True: 0, False: 0]
  |  Branch (5126:40): [True: 0, False: 0]
  ------------------
 5127|      0|            intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc);
 5128|      0|        }
 5129|      0|        else {
 5130|      0|            error(loc, "cannot convert a sampler", constructorString.c_str(), "");
 5131|      0|            return true;
 5132|      0|        }
 5133|      0|    }
 5134|  4.40k|    if (op != EOpConstructStruct && typed->isAtomic()) {
  ------------------
  |  Branch (5134:9): [True: 4.40k, False: 0]
  |  Branch (5134:37): [True: 0, False: 4.40k]
  ------------------
 5135|      0|        error(loc, "cannot convert an atomic_uint", constructorString.c_str(), "");
 5136|      0|        return true;
 5137|      0|    }
 5138|  4.40k|    if (typed->getBasicType() == EbtVoid) {
  ------------------
  |  Branch (5138:9): [True: 0, False: 4.40k]
  ------------------
 5139|      0|        error(loc, "cannot convert a void", constructorString.c_str(), "");
 5140|      0|        return true;
 5141|      0|    }
 5142|       |
 5143|  4.40k|    return false;
 5144|  4.40k|}
_ZN7glslang13TParseContext14voidErrorCheckERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEENS_10TBasicTypeE:
 5232|   452k|{
 5233|   452k|    if (basicType == EbtVoid) {
  ------------------
  |  Branch (5233:9): [True: 1, False: 452k]
  ------------------
 5234|      1|        error(loc, "illegal use of type 'void'", identifier.c_str(), "");
 5235|      1|        return true;
 5236|      1|    }
 5237|       |
 5238|   452k|    return false;
 5239|   452k|}
_ZN7glslang13TParseContext9boolCheckERKNS_10TSourceLocEPKNS_12TIntermTypedE:
 5243|      2|{
 5244|      2|    if (type->getBasicType() != EbtBool || type->isArray() || type->isMatrix() || type->isVector())
  ------------------
  |  Branch (5244:9): [True: 2, False: 0]
  |  Branch (5244:44): [True: 0, False: 0]
  |  Branch (5244:63): [True: 0, False: 0]
  |  Branch (5244:83): [True: 0, False: 0]
  ------------------
 5245|      2|        error(loc, "boolean expression expected", "", "");
 5246|      2|}
_ZN7glslang13TParseContext12samplerCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_12TIntermTypedE:
 5256|   420k|{
 5257|       |    // Check that the appropriate extension is enabled if external sampler is used.
 5258|       |    // There are two extensions. The correct one must be used based on GLSL version.
 5259|   420k|    if (type.getBasicType() == EbtSampler && type.getSampler().isExternal()) {
  ------------------
  |  Branch (5259:9): [True: 0, False: 420k]
  |  Branch (5259:46): [True: 0, False: 0]
  ------------------
 5260|      0|        if (version < 300) {
  ------------------
  |  Branch (5260:13): [True: 0, False: 0]
  ------------------
 5261|      0|            requireExtensions(loc, 1, &E_GL_OES_EGL_image_external, "samplerExternalOES");
 5262|      0|        } else {
 5263|      0|            requireExtensions(loc, 1, &E_GL_OES_EGL_image_external_essl3, "samplerExternalOES");
 5264|      0|        }
 5265|      0|    }
 5266|   420k|    if (type.getSampler().isYuv()) {
  ------------------
  |  Branch (5266:9): [True: 0, False: 420k]
  ------------------
 5267|      0|        requireExtensions(loc, 1, &E_GL_EXT_YUV_target, "__samplerExternal2DY2YEXT");
 5268|      0|    }
 5269|       |
 5270|   420k|    if (type.getQualifier().storage == EvqUniform)
  ------------------
  |  Branch (5270:9): [True: 6.26k, False: 414k]
  ------------------
 5271|  6.26k|        return;
 5272|       |
 5273|   414k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler)) {
  ------------------
  |  Branch (5273:9): [True: 0, False: 414k]
  |  Branch (5273:45): [True: 0, False: 0]
  ------------------
 5274|       |        // For bindless texture, sampler can be declared as an struct member
 5275|      0|        if (extensionTurnedOn(E_GL_ARB_bindless_texture)) {
  ------------------
  |  Branch (5275:13): [True: 0, False: 0]
  ------------------
 5276|      0|            if (type.getSampler().isImage())
  ------------------
  |  Branch (5276:17): [True: 0, False: 0]
  ------------------
 5277|      0|                intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar);
 5278|      0|            else
 5279|      0|                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar);
 5280|      0|        }
 5281|      0|        else {
 5282|      0|            error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str());
 5283|      0|        }
 5284|      0|    }
 5285|   414k|    else if (type.getBasicType() == EbtSampler && type.getQualifier().storage != EvqUniform) {
  ------------------
  |  Branch (5285:14): [True: 0, False: 414k]
  |  Branch (5285:51): [True: 0, False: 0]
  ------------------
 5286|       |        // For bindless texture, sampler can be declared as an input/output/block member
 5287|      0|        if (extensionTurnedOn(E_GL_ARB_bindless_texture)) {
  ------------------
  |  Branch (5287:13): [True: 0, False: 0]
  ------------------
 5288|      0|            if (type.getSampler().isImage())
  ------------------
  |  Branch (5288:17): [True: 0, False: 0]
  ------------------
 5289|      0|                intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar);
 5290|      0|            else
 5291|      0|                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar);
 5292|      0|        }
 5293|      0|        else {
 5294|       |            // non-uniform sampler
 5295|       |            // not yet:  okay if it has an initializer
 5296|       |            // if (! initializer)
 5297|      0|            if (type.getSampler().isAttachmentEXT() && type.getQualifier().storage != EvqTileImageEXT)
  ------------------
  |  Branch (5297:17): [True: 0, False: 0]
  |  Branch (5297:56): [True: 0, False: 0]
  ------------------
 5298|      0|                 error(loc, "can only be used in tileImageEXT variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 5299|      0|            else if (type.getQualifier().storage != EvqTileImageEXT)
  ------------------
  |  Branch (5299:22): [True: 0, False: 0]
  ------------------
 5300|      0|                 error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 5301|      0|        }
 5302|      0|    }
 5303|   414k|    else if (type.isTensorARM() && type.getQualifier().storage != EvqUniform) {
  ------------------
  |  Branch (5303:14): [True: 0, False: 414k]
  |  Branch (5303:36): [True: 0, False: 0]
  ------------------
 5304|      0|        error(loc, "tensorARM types can only be used in uniform variables or function parameters:", "tensorARM", identifier.c_str());
 5305|      0|    }
 5306|   414k|}
_ZN7glslang13TParseContext15atomicUintCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5309|   420k|{
 5310|   420k|    if (type.getQualifier().storage == EvqUniform)
  ------------------
  |  Branch (5310:9): [True: 6.26k, False: 414k]
  ------------------
 5311|  6.26k|        return;
 5312|       |
 5313|   414k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAtomicUint))
  ------------------
  |  Branch (5313:9): [True: 0, False: 414k]
  |  Branch (5313:45): [True: 0, False: 0]
  ------------------
 5314|      0|        error(loc, "non-uniform struct contains an atomic_uint:", type.getBasicTypeString().c_str(), identifier.c_str());
 5315|   414k|    else if (type.getBasicType() == EbtAtomicUint && type.getQualifier().storage != EvqUniform)
  ------------------
  |  Branch (5315:14): [True: 0, False: 414k]
  |  Branch (5315:54): [True: 0, False: 0]
  ------------------
 5316|      0|        error(loc, "atomic_uints can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 5317|   414k|}
_ZN7glslang13TParseContext14accStructCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5320|   420k|{
 5321|   420k|    if (type.getQualifier().storage == EvqUniform)
  ------------------
  |  Branch (5321:9): [True: 6.26k, False: 414k]
  ------------------
 5322|  6.26k|        return;
 5323|       |
 5324|   414k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStruct))
  ------------------
  |  Branch (5324:9): [True: 0, False: 414k]
  |  Branch (5324:45): [True: 0, False: 0]
  ------------------
 5325|      0|        error(loc, "non-uniform struct contains an accelerationStructureNV:", type.getBasicTypeString().c_str(), identifier.c_str());
 5326|   414k|    else if (type.getBasicType() == EbtAccStruct && type.getQualifier().storage != EvqUniform)
  ------------------
  |  Branch (5326:14): [True: 0, False: 414k]
  |  Branch (5326:53): [True: 0, False: 0]
  ------------------
 5327|      0|        error(loc, "accelerationStructureNV can only be used in uniform variables or function parameters:",
 5328|      0|            type.getBasicTypeString().c_str(), identifier.c_str());
 5329|       |
 5330|   414k|}
_ZN7glslang13TParseContext17hitObjectEXTCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5333|   420k|{
 5334|   420k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtHitObjectEXT)) {
  ------------------
  |  Branch (5334:9): [True: 95, False: 420k]
  |  Branch (5334:45): [True: 0, False: 95]
  ------------------
 5335|      0|        error(loc, "struct is not allowed to contain hitObjectEXT:", type.getTypeName().c_str(), identifier.c_str());
 5336|   420k|    } else if (type.getBasicType() == EbtHitObjectEXT) {
  ------------------
  |  Branch (5336:16): [True: 0, False: 420k]
  ------------------
 5337|      0|        TStorageQualifier qualifier = type.getQualifier().storage;
 5338|      0|        if (qualifier != EvqGlobal && qualifier != EvqTemporary) {
  ------------------
  |  Branch (5338:13): [True: 0, False: 0]
  |  Branch (5338:39): [True: 0, False: 0]
  ------------------
 5339|      0|            error(loc, "hitObjectEXT can only be declared in global or function scope with no storage qualifier:", "hitObjectEXT", identifier.c_str());
 5340|      0|        }
 5341|      0|    }
 5342|   420k|}
_ZN7glslang13TParseContext16hitObjectNVCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5344|   420k|{
 5345|   420k|    if (type.getBasicType() == EbtStruct && ( containsFieldWithBasicType(type, EbtHitObjectNV))) {
  ------------------
  |  Branch (5345:9): [True: 95, False: 420k]
  |  Branch (5345:45): [True: 0, False: 95]
  ------------------
 5346|      0|        error(loc, "struct is not allowed to contain hitObjectNV:", type.getTypeName().c_str(), identifier.c_str());
 5347|   420k|    } else if ((type.getBasicType() == EbtHitObjectNV)) {
  ------------------
  |  Branch (5347:16): [True: 0, False: 420k]
  ------------------
 5348|      0|        TStorageQualifier qualifier = type.getQualifier().storage;
 5349|      0|        if (qualifier != EvqGlobal && qualifier != EvqTemporary) {
  ------------------
  |  Branch (5349:13): [True: 0, False: 0]
  |  Branch (5349:39): [True: 0, False: 0]
  ------------------
 5350|      0|            error(loc, "hitObjectNV can only be declared in global or function scope with no storage qualifier:", "hitObjectNV", identifier.c_str());
 5351|      0|        }
 5352|      0|    }
 5353|   420k|}
_ZN7glslang13TParseContext22transparentOpaqueCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5356|   420k|{
 5357|   420k|    if (parsingBuiltins)
  ------------------
  |  Branch (5357:9): [True: 420k, False: 2]
  ------------------
 5358|   420k|        return;
 5359|       |
 5360|      2|    if (type.getQualifier().storage != EvqUniform)
  ------------------
  |  Branch (5360:9): [True: 2, False: 0]
  ------------------
 5361|      2|        return;
 5362|       |
 5363|      0|    if (type.containsNonOpaque()) {
  ------------------
  |  Branch (5363:9): [True: 0, False: 0]
  ------------------
 5364|       |        // Vulkan doesn't allow transparent uniforms outside of blocks
 5365|      0|        if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (5365:13): [True: 0, False: 0]
  |  Branch (5365:38): [True: 0, False: 0]
  ------------------
 5366|      0|            vulkanRemoved(loc, "non-opaque uniforms outside a block");
 5367|       |        // OpenGL wants locations on these (unless they are getting automapped)
 5368|      0|        if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation() && !intermediate.getAutoMapLocations())
  ------------------
  |  Branch (5368:13): [True: 0, False: 0]
  |  Branch (5368:38): [True: 0, False: 0]
  |  Branch (5368:76): [True: 0, False: 0]
  ------------------
 5369|      0|            error(loc, "non-opaque uniform variables need a layout(location=L)", identifier.c_str(), "");
 5370|      0|    }
 5371|      0|}
_ZN7glslang13TParseContext20memberQualifierCheckERNS_11TPublicTypeE:
 5377|  7.29k|{
 5378|  7.29k|    globalQualifierFixCheck(publicType.loc, publicType.qualifier, true);
 5379|  7.29k|    checkNoShaderLayouts(publicType.loc, publicType.shaderQualifiers);
 5380|  7.29k|    if (publicType.qualifier.isNonUniform()) {
  ------------------
  |  Branch (5380:9): [True: 0, False: 7.29k]
  ------------------
 5381|      0|        error(publicType.loc, "not allowed on block or structure members", "nonuniformEXT", "");
 5382|      0|        publicType.qualifier.nonUniform = false;
 5383|      0|    }
 5384|  7.29k|    if (publicType.qualifier.isPatch()) {
  ------------------
  |  Branch (5384:9): [True: 0, False: 7.29k]
  ------------------
 5385|      0|        error(publicType.loc, "not allowed on block or structure members",
 5386|      0|              "patch", "");
 5387|      0|    }
 5388|  7.29k|}
_ZN7glslang13TParseContext23globalQualifierFixCheckERKNS_10TSourceLocERNS_10TQualifierEbPKNS_11TPublicTypeE:
 5394|  1.39M|{
 5395|  1.39M|    bool nonuniformOkay = false;
 5396|       |
 5397|       |    // move from parameter/unknown qualifiers to pipeline in/out qualifiers
 5398|  1.39M|    switch (qualifier.storage) {
 5399|   245k|    case EvqIn:
  ------------------
  |  Branch (5399:5): [True: 245k, False: 1.14M]
  ------------------
 5400|   245k|        profileRequires(loc, ENoProfile, 130, nullptr, "in for stage inputs");
 5401|   245k|        profileRequires(loc, EEsProfile, 300, nullptr, "in for stage inputs");
 5402|   245k|        qualifier.storage = EvqVaryingIn;
 5403|   245k|        nonuniformOkay = true;
 5404|   245k|        break;
 5405|  26.0k|    case EvqOut:
  ------------------
  |  Branch (5405:5): [True: 26.0k, False: 1.36M]
  ------------------
 5406|  26.0k|        profileRequires(loc, ENoProfile, 130, nullptr, "out for stage outputs");
 5407|  26.0k|        profileRequires(loc, EEsProfile, 300, nullptr, "out for stage outputs");
 5408|  26.0k|        qualifier.storage = EvqVaryingOut;
 5409|  26.0k|        if (intermediate.isInvariantAll())
  ------------------
  |  Branch (5409:13): [True: 0, False: 26.0k]
  ------------------
 5410|      0|            qualifier.invariant = true;
 5411|  26.0k|        break;
 5412|      0|    case EvqInOut:
  ------------------
  |  Branch (5412:5): [True: 0, False: 1.39M]
  ------------------
 5413|      0|        qualifier.storage = EvqVaryingIn;
 5414|      0|        error(loc, "cannot use 'inout' at global scope", "", "");
 5415|      0|        break;
 5416|   943k|    case EvqGlobal:
  ------------------
  |  Branch (5416:5): [True: 943k, False: 450k]
  ------------------
 5417|   945k|    case EvqTemporary:
  ------------------
  |  Branch (5417:5): [True: 2.23k, False: 1.39M]
  ------------------
 5418|   945k|        nonuniformOkay = true;
 5419|   945k|        break;
 5420|  6.26k|    case EvqUniform:
  ------------------
  |  Branch (5420:5): [True: 6.26k, False: 1.38M]
  ------------------
 5421|       |        // According to GLSL spec: The std430 qualifier is supported only for shader storage blocks; a shader using
 5422|       |        // the std430 qualifier on a uniform block will fail to compile.
 5423|       |        // Only check the global declaration: layout(std430) uniform;
 5424|  6.26k|        if (blockName == nullptr &&
  ------------------
  |  Branch (5424:13): [True: 4.04k, False: 2.22k]
  ------------------
 5425|  4.04k|            qualifier.layoutPacking == ElpStd430)
  ------------------
  |  Branch (5425:13): [True: 0, False: 4.04k]
  ------------------
 5426|      0|        {
 5427|      0|            requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "default std430 layout for uniform");
 5428|      0|        }
 5429|       |
 5430|  6.26k|        if (publicType != nullptr && publicType->isImage() &&
  ------------------
  |  Branch (5430:13): [True: 6.26k, False: 0]
  |  Branch (5430:38): [True: 0, False: 6.26k]
  ------------------
 5431|      0|            (qualifier.layoutFormat > ElfExtSizeGuard && qualifier.layoutFormat < ElfCount))
  ------------------
  |  Branch (5431:14): [True: 0, False: 0]
  |  Branch (5431:58): [True: 0, False: 0]
  ------------------
 5432|      0|            qualifier.layoutFormat = mapLegacyLayoutFormat(qualifier.layoutFormat, publicType->sampler.getBasicType());
 5433|       |
 5434|  6.26k|        break;
 5435|   169k|    default:
  ------------------
  |  Branch (5435:5): [True: 169k, False: 1.22M]
  ------------------
 5436|   169k|        break;
 5437|  1.39M|    }
 5438|       |
 5439|  1.39M|    if (!nonuniformOkay && qualifier.isNonUniform())
  ------------------
  |  Branch (5439:9): [True: 202k, False: 1.19M]
  |  Branch (5439:28): [True: 0, False: 202k]
  ------------------
 5440|      0|        error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", "");
 5441|       |
 5442|  1.39M|    if (qualifier.isSpirvByReference())
  ------------------
  |  Branch (5442:9): [True: 0, False: 1.39M]
  ------------------
 5443|      0|        error(loc, "can only apply to parameter", "spirv_by_reference", "");
 5444|       |
 5445|  1.39M|    if (qualifier.isSpirvLiteral())
  ------------------
  |  Branch (5445:9): [True: 0, False: 1.39M]
  ------------------
 5446|      0|        error(loc, "can only apply to parameter", "spirv_literal", "");
 5447|       |
 5448|       |    // Storage qualifier isn't ready for memberQualifierCheck, we should skip invariantCheck for it.
 5449|  1.39M|    if (!isMemberCheck || structNestingLevel > 0)
  ------------------
  |  Branch (5449:9): [True: 1.38M, False: 7.29k]
  |  Branch (5449:27): [True: 120, False: 7.17k]
  ------------------
 5450|  1.38M|        invariantCheck(loc, qualifier);
 5451|       |
 5452|  1.39M|    if (qualifier.isFullQuads()) {
  ------------------
  |  Branch (5452:9): [True: 0, False: 1.39M]
  ------------------
 5453|      0|        if (qualifier.storage != EvqVaryingIn)
  ------------------
  |  Branch (5453:13): [True: 0, False: 0]
  ------------------
 5454|      0|            error(loc, "can only apply to input layout", "full_quads ", "");
 5455|      0|        intermediate.setReqFullQuadsMode();
 5456|      0|    }
 5457|       |
 5458|  1.39M|    if (qualifier.isQuadDeriv()) {
  ------------------
  |  Branch (5458:9): [True: 0, False: 1.39M]
  ------------------
 5459|      0|        if (qualifier.storage != EvqVaryingIn)
  ------------------
  |  Branch (5459:13): [True: 0, False: 0]
  ------------------
 5460|      0|            error(loc, "can only apply to input layout", "quad_derivatives", "");
 5461|      0|        intermediate.setQuadDerivMode();
 5462|      0|    }
 5463|  1.39M|}
_ZN7glslang13TParseContext24globalQualifierTypeCheckERKNS_10TSourceLocERKNS_10TQualifierERKNS_11TPublicTypeE:
 5469|  11.4M|{
 5470|  11.4M|    if (! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (5470:9): [True: 1, False: 11.4M]
  ------------------
 5471|      1|        return;
 5472|       |
 5473|  11.4M|    if (!(publicType.userDef && publicType.userDef->isReference()) && !publicType.isTensorARM() && !parsingBuiltins) {
  ------------------
  |  Branch (5473:11): [True: 1.09k, False: 11.4M]
  |  Branch (5473:33): [True: 0, False: 1.09k]
  |  Branch (5473:71): [True: 11.4M, False: 0]
  |  Branch (5473:100): [True: 151, False: 11.4M]
  ------------------
 5474|    151|        if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) {
  ------------------
  |  Branch (5474:13): [True: 0, False: 151]
  |  Branch (5474:62): [True: 0, False: 0]
  |  Branch (5474:88): [True: 0, False: 0]
  ------------------
 5475|      0|            error(loc, "memory qualifiers cannot be used on this type", "", "");
 5476|    151|        } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) {
  ------------------
  |  Branch (5476:20): [True: 0, False: 151]
  |  Branch (5476:44): [True: 0, False: 0]
  |  Branch (5476:84): [True: 0, False: 0]
  ------------------
 5477|      0|            error(loc, "memory qualifiers cannot be used on this type", "", "");
 5478|      0|        }
 5479|    151|    }
 5480|       |
 5481|  11.4M|    if (qualifier.storage == EvqBuffer &&
  ------------------
  |  Branch (5481:9): [True: 0, False: 11.4M]
  ------------------
 5482|      0|        publicType.basicType != EbtBlock &&
  ------------------
  |  Branch (5482:9): [True: 0, False: 0]
  ------------------
 5483|      0|        !qualifier.hasBufferReference() &&
  ------------------
  |  Branch (5483:9): [True: 0, False: 0]
  ------------------
 5484|      0|        !qualifier.isBufferType())
  ------------------
  |  Branch (5484:9): [True: 0, False: 0]
  ------------------
 5485|      0|        error(loc, "buffers can be declared only as blocks", "buffer", "");
 5486|       |
 5487|  11.4M|    if (qualifier.storage != EvqVaryingIn && publicType.basicType == EbtDouble &&
  ------------------
  |  Branch (5487:9): [True: 11.1M, False: 245k]
  |  Branch (5487:46): [True: 435k, False: 10.7M]
  ------------------
 5488|   435k|        extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit) && language == EShLangVertex &&
  ------------------
  |  Branch (5488:9): [True: 0, False: 435k]
  |  Branch (5488:60): [True: 0, False: 0]
  ------------------
 5489|      0|        version < 400) {
  ------------------
  |  Branch (5489:9): [True: 0, False: 0]
  ------------------
 5490|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 410, E_GL_ARB_gpu_shader_fp64, "vertex-shader `double` type");
 5491|      0|    }
 5492|  11.4M|    if (qualifier.storage != EvqVaryingIn && qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (5492:9): [True: 11.1M, False: 245k]
  |  Branch (5492:46): [True: 11.1M, False: 20.4k]
  ------------------
 5493|  11.1M|        return;
 5494|       |
 5495|   265k|    if (publicType.shaderQualifiers.hasBlendEquation())
  ------------------
  |  Branch (5495:9): [True: 0, False: 265k]
  ------------------
 5496|      0|        error(loc, "can only be applied to a standalone 'out'", "blend equation", "");
 5497|       |
 5498|       |    // now, knowing it is a shader in/out, do all the in/out semantic checks
 5499|       |
 5500|   265k|    if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble) {
  ------------------
  |  Branch (5500:9): [True: 250k, False: 14.9k]
  |  Branch (5500:44): [True: 0, False: 14.9k]
  ------------------
 5501|   250k|        profileRequires(loc, EEsProfile, 300, nullptr, "non-float shader input/output");
 5502|   250k|        profileRequires(loc, ~EEsProfile, 130, nullptr, "non-float shader input/output");
 5503|   250k|    }
 5504|       |
 5505|   265k|    if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV() && !qualifier.isPervertexEXT()) {
  ------------------
  |  Branch (5505:9): [True: 237k, False: 28.3k]
  |  Branch (5505:28): [True: 237k, False: 0]
  |  Branch (5505:68): [True: 237k, False: 0]
  |  Branch (5505:98): [True: 237k, False: 0]
  ------------------
 5506|   237k|        if (isTypeInt(publicType.basicType) ||
  ------------------
  |  Branch (5506:13): [True: 222k, False: 14.9k]
  ------------------
 5507|  14.9k|            publicType.basicType == EbtDouble ||
  ------------------
  |  Branch (5507:13): [True: 0, False: 14.9k]
  ------------------
 5508|  14.9k|            (publicType.userDef && (   publicType.userDef->containsBasicType(EbtInt)
  ------------------
  |  Branch (5508:14): [True: 0, False: 14.9k]
  |  Branch (5508:40): [True: 0, False: 0]
  ------------------
 5509|      0|                                    || publicType.userDef->containsBasicType(EbtUint)
  ------------------
  |  Branch (5509:40): [True: 0, False: 0]
  ------------------
 5510|      0|                                    || publicType.userDef->contains16BitInt()
  ------------------
  |  Branch (5510:40): [True: 0, False: 0]
  ------------------
 5511|      0|                                    || publicType.userDef->contains8BitInt()
  ------------------
  |  Branch (5511:40): [True: 0, False: 0]
  ------------------
 5512|      0|                                    || publicType.userDef->contains64BitInt()
  ------------------
  |  Branch (5512:40): [True: 0, False: 0]
  ------------------
 5513|   222k|                                    || publicType.userDef->containsDouble()))) {
  ------------------
  |  Branch (5513:40): [True: 0, False: 0]
  ------------------
 5514|   222k|            if (qualifier.storage == EvqVaryingIn && language == EShLangFragment)
  ------------------
  |  Branch (5514:17): [True: 207k, False: 14.9k]
  |  Branch (5514:54): [True: 0, False: 207k]
  ------------------
 5515|      0|                error(loc, "must be qualified as flat", TType::getBasicString(publicType.basicType), GetStorageQualifierString(qualifier.storage));
 5516|   222k|            else if (qualifier.storage == EvqVaryingOut && language == EShLangVertex && version == 300)
  ------------------
  |  Branch (5516:22): [True: 14.9k, False: 207k]
  |  Branch (5516:60): [True: 3.17k, False: 11.7k]
  |  Branch (5516:89): [True: 0, False: 3.17k]
  ------------------
 5517|      0|                error(loc, "must be qualified as flat", TType::getBasicString(publicType.basicType), GetStorageQualifierString(qualifier.storage));
 5518|   222k|        }
 5519|   237k|    }
 5520|       |
 5521|   265k|    if (qualifier.isPatch() && qualifier.isInterpolation())
  ------------------
  |  Branch (5521:9): [True: 4.80k, False: 260k]
  |  Branch (5521:32): [True: 0, False: 4.80k]
  ------------------
 5522|      0|        error(loc, "cannot use interpolation qualifiers with patch", "patch", "");
 5523|       |
 5524|       |    // Only "patch in" is supported via GL_NV_gpu_shader5
 5525|   265k|    if (! symbolTable.atBuiltInLevel() && qualifier.isPatch() && 
  ------------------
  |  Branch (5525:9): [True: 0, False: 265k]
  |  Branch (5525:43): [True: 0, False: 0]
  ------------------
 5526|      0|        (language == EShLangGeometry) && qualifier.storage != EvqVaryingIn &&
  ------------------
  |  Branch (5526:9): [True: 0, False: 0]
  |  Branch (5526:42): [True: 0, False: 0]
  ------------------
 5527|      0|        extensionTurnedOn(E_GL_NV_gpu_shader5))
  ------------------
  |  Branch (5527:9): [True: 0, False: 0]
  ------------------
 5528|      0|            error(loc, "only 'patch in' is supported in this stage:", "patch", "geometry");
 5529|       |
 5530|   265k|    if (qualifier.isTaskPayload() && publicType.basicType == EbtBlock)
  ------------------
  |  Branch (5530:9): [True: 0, False: 265k]
  |  Branch (5530:38): [True: 0, False: 0]
  ------------------
 5531|      0|        error(loc, "taskPayloadSharedEXT variables should not be declared as interface blocks", "taskPayloadSharedEXT", "");
 5532|       |
 5533|   265k|    if (qualifier.isTaskMemory() && publicType.basicType != EbtBlock)
  ------------------
  |  Branch (5533:9): [True: 0, False: 265k]
  |  Branch (5533:37): [True: 0, False: 0]
  ------------------
 5534|      0|        error(loc, "taskNV variables can be declared only as blocks", "taskNV", "");
 5535|       |
 5536|   265k|    if (qualifier.storage == EvqVaryingIn) {
  ------------------
  |  Branch (5536:9): [True: 245k, False: 20.4k]
  ------------------
 5537|   245k|        switch (language) {
 5538|  23.6k|        case EShLangVertex:
  ------------------
  |  Branch (5538:9): [True: 23.6k, False: 221k]
  ------------------
 5539|  23.6k|            if (publicType.basicType == EbtStruct) {
  ------------------
  |  Branch (5539:17): [True: 0, False: 23.6k]
  ------------------
 5540|      0|                error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), "");
 5541|      0|                return;
 5542|      0|            }
 5543|  23.6k|            if (publicType.arraySizes) {
  ------------------
  |  Branch (5543:17): [True: 0, False: 23.6k]
  ------------------
 5544|      0|                requireProfile(loc, ~EEsProfile, "vertex input arrays");
 5545|      0|                profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays");
 5546|      0|            }
 5547|  23.6k|            if (publicType.basicType == EbtDouble) {
  ------------------
  |  Branch (5547:17): [True: 0, False: 23.6k]
  ------------------
 5548|      0|            	const char* const float64_attrib[] = {E_GL_NV_gpu_shader5, E_GL_ARB_vertex_attrib_64bit};
 5549|      0|                const int Num_float64_attrib = sizeof(float64_attrib) / sizeof(float64_attrib[0]);        
 5550|      0|                profileRequires(loc, ~EEsProfile, 410, Num_float64_attrib, float64_attrib, "vertex-shader `double` type input");
 5551|      0|			}
 5552|  23.6k|            if (qualifier.isAuxiliary() || qualifier.isInterpolation() || qualifier.isMemory() || qualifier.invariant)
  ------------------
  |  Branch (5552:17): [True: 0, False: 23.6k]
  |  Branch (5552:44): [True: 0, False: 23.6k]
  |  Branch (5552:75): [True: 0, False: 23.6k]
  |  Branch (5552:99): [True: 0, False: 23.6k]
  ------------------
 5553|      0|                error(loc, "vertex input cannot be further qualified", "", "");
 5554|  23.6k|            break;
 5555|  34.7k|        case EShLangFragment:
  ------------------
  |  Branch (5555:9): [True: 34.7k, False: 210k]
  ------------------
 5556|  34.7k|            if (publicType.userDef) {
  ------------------
  |  Branch (5556:17): [True: 0, False: 34.7k]
  ------------------
 5557|      0|                profileRequires(loc, EEsProfile, 300, nullptr, "fragment-shader struct input");
 5558|      0|                profileRequires(loc, ~EEsProfile, 150, nullptr, "fragment-shader struct input");
 5559|      0|                if (publicType.userDef->containsStructure())
  ------------------
  |  Branch (5559:21): [True: 0, False: 0]
  ------------------
 5560|      0|                    requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing structure");
 5561|      0|                if (publicType.userDef->containsArray())
  ------------------
  |  Branch (5561:21): [True: 0, False: 0]
  ------------------
 5562|      0|                    requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing an array");
 5563|      0|            }
 5564|  34.7k|            break;
 5565|  26.7k|       case EShLangCompute:
  ------------------
  |  Branch (5565:8): [True: 26.7k, False: 218k]
  ------------------
 5566|  26.7k|            if (! symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (5566:17): [True: 0, False: 26.7k]
  ------------------
 5567|      0|                error(loc, "global storage input qualifier cannot be used in a compute shader", "in", "");
 5568|  26.7k|            break;
 5569|  22.6k|       case EShLangTessControl:
  ------------------
  |  Branch (5569:8): [True: 22.6k, False: 222k]
  ------------------
 5570|  22.6k|            if (qualifier.patch)
  ------------------
  |  Branch (5570:17): [True: 0, False: 22.6k]
  ------------------
 5571|      0|                error(loc, "can only use on output in tessellation-control shader", "patch", "");
 5572|  22.6k|            break;
 5573|   137k|        default:
  ------------------
  |  Branch (5573:9): [True: 137k, False: 107k]
  ------------------
 5574|   137k|            break;
 5575|   245k|        }
 5576|   245k|    } else {
 5577|       |        // qualifier.storage == EvqVaryingOut
 5578|  20.4k|        switch (language) {
 5579|  4.05k|        case EShLangVertex:
  ------------------
  |  Branch (5579:9): [True: 4.05k, False: 16.4k]
  ------------------
 5580|  4.05k|            if (publicType.userDef) {
  ------------------
  |  Branch (5580:17): [True: 0, False: 4.05k]
  ------------------
 5581|      0|                profileRequires(loc, EEsProfile, 300, nullptr, "vertex-shader struct output");
 5582|      0|                profileRequires(loc, ~EEsProfile, 150, nullptr, "vertex-shader struct output");
 5583|      0|                if (publicType.userDef->containsStructure())
  ------------------
  |  Branch (5583:21): [True: 0, False: 0]
  ------------------
 5584|      0|                    requireProfile(loc, ~EEsProfile, "vertex-shader struct output containing structure");
 5585|      0|                if (publicType.userDef->containsArray())
  ------------------
  |  Branch (5585:21): [True: 0, False: 0]
  ------------------
 5586|      0|                    requireProfile(loc, ~EEsProfile, "vertex-shader struct output containing an array");
 5587|      0|            }
 5588|       |
 5589|  4.05k|            break;
 5590|  1.30k|        case EShLangFragment:
  ------------------
  |  Branch (5590:9): [True: 1.30k, False: 19.1k]
  ------------------
 5591|  1.30k|            profileRequires(loc, EEsProfile, 300, nullptr, "fragment shader output");
 5592|  1.30k|            if (publicType.basicType == EbtStruct) {
  ------------------
  |  Branch (5592:17): [True: 0, False: 1.30k]
  ------------------
 5593|      0|                error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), "");
 5594|      0|                return;
 5595|      0|            }
 5596|  1.30k|            if (publicType.matrixRows > 0) {
  ------------------
  |  Branch (5596:17): [True: 0, False: 1.30k]
  ------------------
 5597|      0|                error(loc, "cannot be a matrix", GetStorageQualifierString(qualifier.storage), "");
 5598|      0|                return;
 5599|      0|            }
 5600|  1.30k|            if (qualifier.isAuxiliary())
  ------------------
  |  Branch (5600:17): [True: 0, False: 1.30k]
  ------------------
 5601|      0|                error(loc, "can't use auxiliary qualifier on a fragment output", "centroid/sample/patch", "");
 5602|  1.30k|            if (qualifier.isInterpolation())
  ------------------
  |  Branch (5602:17): [True: 0, False: 1.30k]
  ------------------
 5603|      0|                error(loc, "can't use interpolation qualifier on a fragment output", "flat/smooth/noperspective", "");
 5604|  1.30k|            if (publicType.basicType == EbtDouble || publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64)
  ------------------
  |  Branch (5604:17): [True: 0, False: 1.30k]
  |  Branch (5604:54): [True: 0, False: 1.30k]
  |  Branch (5604:90): [True: 0, False: 1.30k]
  ------------------
 5605|      0|                error(loc, "cannot contain a double, int64, or uint64", GetStorageQualifierString(qualifier.storage), "");
 5606|  1.30k|        break;
 5607|       |
 5608|      0|        case EShLangCompute:
  ------------------
  |  Branch (5608:9): [True: 0, False: 20.4k]
  ------------------
 5609|      0|            error(loc, "global storage output qualifier cannot be used in a compute shader", "out", "");
 5610|      0|            break;
 5611|  3.12k|        case EShLangTessEvaluation:
  ------------------
  |  Branch (5611:9): [True: 3.12k, False: 17.3k]
  ------------------
 5612|  3.12k|            if (qualifier.patch)
  ------------------
  |  Branch (5612:17): [True: 0, False: 3.12k]
  ------------------
 5613|      0|                error(loc, "can only use on input in tessellation-evaluation shader", "patch", "");
 5614|  3.12k|            break;
 5615|  11.9k|        default:
  ------------------
  |  Branch (5615:9): [True: 11.9k, False: 8.48k]
  ------------------
 5616|  11.9k|            break;
 5617|  20.4k|        }
 5618|  20.4k|    }
 5619|   265k|}
_ZN7glslang13TParseContext15mergeQualifiersERKNS_10TSourceLocERNS_10TQualifierERKS4_b:
 5631|  5.25M|{
 5632|       |    // Multiple auxiliary qualifiers (mostly done later by 'individual qualifiers')
 5633|  5.25M|    if (src.isAuxiliary() && dst.isAuxiliary())
  ------------------
  |  Branch (5633:9): [True: 4.80k, False: 5.24M]
  |  Branch (5633:30): [True: 0, False: 4.80k]
  ------------------
 5634|      0|        error(loc, "can only have one auxiliary qualifier (centroid, patch, and sample)", "", "");
 5635|       |
 5636|       |    // Multiple interpolation qualifiers (mostly done later by 'individual qualifiers')
 5637|  5.25M|    if (src.isInterpolation() && dst.isInterpolation())
  ------------------
  |  Branch (5637:9): [True: 28.3k, False: 5.22M]
  |  Branch (5637:34): [True: 0, False: 28.3k]
  ------------------
 5638|      0|        error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD)", "", "");
 5639|       |
 5640|       |    // Ordering
 5641|  5.25M|    if (! force && ((!isEsProfile() && version < 420) ||
  ------------------
  |  Branch (5641:9): [True: 3.89M, False: 1.36M]
  |  Branch (5641:22): [True: 2.30M, False: 1.59M]
  |  Branch (5641:40): [True: 5.59k, False: 2.29M]
  ------------------
 5642|  3.88M|                    (isEsProfile() && version < 310))
  ------------------
  |  Branch (5642:22): [True: 1.59M, False: 2.29M]
  |  Branch (5642:39): [True: 180, False: 1.59M]
  ------------------
 5643|  5.77k|                && ! extensionTurnedOn(E_GL_ARB_shading_language_420pack)) {
  ------------------
  |  Branch (5643:20): [True: 5.77k, False: 0]
  ------------------
 5644|       |        // non-function parameters
 5645|  5.77k|        if (src.isNoContraction() && (dst.invariant || dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5645:13): [True: 0, False: 5.77k]
  |  Branch (5645:39): [True: 0, False: 0]
  |  Branch (5645:56): [True: 0, False: 0]
  |  Branch (5645:81): [True: 0, False: 0]
  |  Branch (5645:102): [True: 0, False: 0]
  |  Branch (5645:133): [True: 0, False: 0]
  ------------------
 5646|      0|            error(loc, "precise qualifier must appear first", "", "");
 5647|  5.77k|        if (src.invariant && (dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5647:13): [True: 0, False: 5.77k]
  |  Branch (5647:31): [True: 0, False: 0]
  |  Branch (5647:56): [True: 0, False: 0]
  |  Branch (5647:77): [True: 0, False: 0]
  |  Branch (5647:108): [True: 0, False: 0]
  ------------------
 5648|      0|            error(loc, "invariant qualifier must appear before interpolation, storage, and precision qualifiers ", "", "");
 5649|  5.77k|        else if (src.isInterpolation() && (dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5649:18): [True: 0, False: 5.77k]
  |  Branch (5649:44): [True: 0, False: 0]
  |  Branch (5649:65): [True: 0, False: 0]
  |  Branch (5649:96): [True: 0, False: 0]
  ------------------
 5650|      0|            error(loc, "interpolation qualifiers must appear before storage and precision qualifiers", "", "");
 5651|  5.77k|        else if (src.isAuxiliary() && (dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5651:18): [True: 0, False: 5.77k]
  |  Branch (5651:40): [True: 0, False: 0]
  |  Branch (5651:71): [True: 0, False: 0]
  ------------------
 5652|      0|            error(loc, "Auxiliary qualifiers (centroid, patch, and sample) must appear before storage and precision qualifiers", "", "");
 5653|  5.77k|        else if (src.storage != EvqTemporary && (dst.precision != EpqNone))
  ------------------
  |  Branch (5653:18): [True: 1.75k, False: 4.02k]
  |  Branch (5653:49): [True: 0, False: 1.75k]
  ------------------
 5654|      0|            error(loc, "precision qualifier must appear as last qualifier", "", "");
 5655|       |
 5656|       |        // function parameters
 5657|  5.77k|        if (src.isNoContraction() && (dst.storage == EvqConst || dst.storage == EvqIn || dst.storage == EvqOut))
  ------------------
  |  Branch (5657:13): [True: 0, False: 5.77k]
  |  Branch (5657:39): [True: 0, False: 0]
  |  Branch (5657:66): [True: 0, False: 0]
  |  Branch (5657:90): [True: 0, False: 0]
  ------------------
 5658|      0|            error(loc, "precise qualifier must appear first", "", "");
 5659|  5.77k|        if (src.storage == EvqConst && (dst.storage == EvqIn || dst.storage == EvqOut))
  ------------------
  |  Branch (5659:13): [True: 0, False: 5.77k]
  |  Branch (5659:41): [True: 0, False: 0]
  |  Branch (5659:65): [True: 0, False: 0]
  ------------------
 5660|      0|            error(loc, "in/out must appear before const", "", "");
 5661|  5.77k|    }
 5662|       |
 5663|       |    // Storage qualification
 5664|  5.25M|    if (dst.storage == EvqTemporary || dst.storage == EvqGlobal)
  ------------------
  |  Branch (5664:9): [True: 3.57M, False: 1.67M]
  |  Branch (5664:40): [True: 1.36M, False: 316k]
  ------------------
 5665|  4.93M|        dst.storage = src.storage;
 5666|   316k|    else if ((dst.storage == EvqIn  && src.storage == EvqOut) ||
  ------------------
  |  Branch (5666:15): [True: 220k, False: 95.8k]
  |  Branch (5666:40): [True: 0, False: 220k]
  ------------------
 5667|   316k|             (dst.storage == EvqOut && src.storage == EvqIn))
  ------------------
  |  Branch (5667:15): [True: 48.3k, False: 268k]
  |  Branch (5667:40): [True: 0, False: 48.3k]
  ------------------
 5668|      0|        dst.storage = EvqInOut;
 5669|   316k|    else if ((dst.storage == EvqIn    && src.storage == EvqConst) ||
  ------------------
  |  Branch (5669:15): [True: 220k, False: 95.8k]
  |  Branch (5669:42): [True: 1, False: 220k]
  ------------------
 5670|   316k|             (dst.storage == EvqConst && src.storage == EvqIn))
  ------------------
  |  Branch (5670:15): [True: 45.2k, False: 271k]
  |  Branch (5670:42): [True: 0, False: 45.2k]
  ------------------
 5671|      1|        dst.storage = EvqConstReadOnly;
 5672|   316k|    else if (src.storage != EvqTemporary &&
  ------------------
  |  Branch (5672:14): [True: 281k, False: 35.5k]
  ------------------
 5673|   281k|             src.storage != EvqGlobal)
  ------------------
  |  Branch (5673:14): [True: 2, False: 281k]
  ------------------
 5674|      2|        error(loc, "too many storage qualifiers", GetStorageQualifierString(src.storage), "");
 5675|       |
 5676|       |    // Precision qualifiers
 5677|  5.25M|    if (! force && src.precision != EpqNone && dst.precision != EpqNone)
  ------------------
  |  Branch (5677:9): [True: 3.89M, False: 1.36M]
  |  Branch (5677:20): [True: 142k, False: 3.75M]
  |  Branch (5677:48): [True: 0, False: 142k]
  ------------------
 5678|      0|        error(loc, "only one precision qualifier allowed", GetPrecisionQualifierString(src.precision), "");
 5679|  5.25M|    if (dst.precision == EpqNone || (force && src.precision != EpqNone))
  ------------------
  |  Branch (5679:9): [True: 5.25M, False: 2.38k]
  |  Branch (5679:38): [True: 1, False: 2.38k]
  |  Branch (5679:47): [True: 0, False: 1]
  ------------------
 5680|  5.25M|        dst.precision = src.precision;
 5681|       |
 5682|  5.25M|    if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5682:9): [True: 3.89M, False: 1.36M]
  |  Branch (5682:21): [True: 1.49M, False: 2.40M]
  |  Branch (5682:38): [True: 0, False: 1.49M]
  |  Branch (5682:60): [True: 0, False: 1.49M]
  |  Branch (5682:87): [True: 0, False: 1.49M]
  |  Branch (5682:112): [True: 0, False: 1.49M]
  |  Branch (5682:136): [True: 0, False: 1.49M]
  ------------------
 5683|  3.89M|                   (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5683:21): [True: 0, False: 3.89M]
  |  Branch (5683:44): [True: 0, False: 0]
  |  Branch (5683:60): [True: 0, False: 0]
  |  Branch (5683:87): [True: 0, False: 0]
  |  Branch (5683:112): [True: 0, False: 0]
  |  Branch (5683:136): [True: 0, False: 0]
  ------------------
 5684|  3.89M|                   (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5684:21): [True: 0, False: 3.89M]
  |  Branch (5684:49): [True: 0, False: 0]
  |  Branch (5684:65): [True: 0, False: 0]
  |  Branch (5684:87): [True: 0, False: 0]
  |  Branch (5684:112): [True: 0, False: 0]
  |  Branch (5684:136): [True: 0, False: 0]
  ------------------
 5685|  3.89M|                   (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5685:21): [True: 0, False: 3.89M]
  |  Branch (5685:47): [True: 0, False: 0]
  |  Branch (5685:63): [True: 0, False: 0]
  |  Branch (5685:85): [True: 0, False: 0]
  |  Branch (5685:112): [True: 0, False: 0]
  |  Branch (5685:136): [True: 0, False: 0]
  ------------------
 5686|  3.89M|                   (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5686:21): [True: 0, False: 3.89M]
  |  Branch (5686:47): [True: 0, False: 0]
  |  Branch (5686:63): [True: 0, False: 0]
  |  Branch (5686:85): [True: 0, False: 0]
  |  Branch (5686:112): [True: 0, False: 0]
  |  Branch (5686:137): [True: 0, False: 0]
  ------------------
 5687|  3.89M|                   (src.shadercallcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)))) {
  ------------------
  |  Branch (5687:21): [True: 0, False: 3.89M]
  |  Branch (5687:48): [True: 0, False: 0]
  |  Branch (5687:64): [True: 0, False: 0]
  |  Branch (5687:86): [True: 0, False: 0]
  |  Branch (5687:113): [True: 0, False: 0]
  |  Branch (5687:138): [True: 0, False: 0]
  ------------------
 5688|      0|        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed",
 5689|      0|            GetPrecisionQualifierString(src.precision), "");
 5690|      0|    }
 5691|       |
 5692|       |    // Layout qualifiers
 5693|  5.25M|    mergeObjectLayoutQualifiers(dst, src, false);
 5694|       |
 5695|       |    // individual qualifiers
 5696|  5.25M|    bool repeated = false;
 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
 5698|  5.25M|    MERGE_SINGLETON(invariant);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5699|  5.25M|    MERGE_SINGLETON(centroid);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5700|  5.25M|    MERGE_SINGLETON(smooth);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5701|  5.25M|    MERGE_SINGLETON(flat);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 49.4k, False: 5.20M]
  |  |  |  Branch (5697:61): [True: 0, False: 49.4k]
  |  |  ------------------
  ------------------
 5702|  5.25M|    MERGE_SINGLETON(specConstant);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5703|  5.25M|    MERGE_SINGLETON(noContraction);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5704|  5.25M|    MERGE_SINGLETON(nopersp);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5705|  5.25M|    MERGE_SINGLETON(explicitInterp);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5706|  5.25M|    MERGE_SINGLETON(perPrimitiveNV);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 894, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 894]
  |  |  ------------------
  ------------------
 5707|  5.25M|    MERGE_SINGLETON(perViewNV);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5708|  5.25M|    MERGE_SINGLETON(perTaskNV);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5709|  5.25M|    MERGE_SINGLETON(patch);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 7.77k, False: 5.24M]
  |  |  |  Branch (5697:61): [True: 0, False: 7.77k]
  |  |  ------------------
  ------------------
 5710|  5.25M|    MERGE_SINGLETON(sample);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5711|  5.25M|    MERGE_SINGLETON(coherent);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 1.66M, False: 3.58M]
  |  |  |  Branch (5697:61): [True: 0, False: 1.66M]
  |  |  ------------------
  ------------------
 5712|  5.25M|    MERGE_SINGLETON(devicecoherent);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5713|  5.25M|    MERGE_SINGLETON(queuefamilycoherent);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5714|  5.25M|    MERGE_SINGLETON(workgroupcoherent);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5715|  5.25M|    MERGE_SINGLETON(subgroupcoherent);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5716|  5.25M|    MERGE_SINGLETON(shadercallcoherent);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5717|  5.25M|    MERGE_SINGLETON(nonprivate);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5718|  5.25M|    MERGE_SINGLETON(volatil);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 3.07M, False: 2.17M]
  |  |  |  Branch (5697:61): [True: 0, False: 3.07M]
  |  |  ------------------
  ------------------
 5719|  5.25M|    MERGE_SINGLETON(nontemporal);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 84.7k, False: 5.16M]
  |  |  |  Branch (5697:61): [True: 0, False: 84.7k]
  |  |  ------------------
  ------------------
 5720|  5.25M|    MERGE_SINGLETON(restrict);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5721|  5.25M|    MERGE_SINGLETON(readonly);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 653k, False: 4.59M]
  |  |  |  Branch (5697:61): [True: 0, False: 653k]
  |  |  ------------------
  ------------------
 5722|  5.25M|    MERGE_SINGLETON(writeonly);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 480k, False: 4.77M]
  |  |  |  Branch (5697:61): [True: 0, False: 480k]
  |  |  ------------------
  ------------------
 5723|  5.25M|    MERGE_SINGLETON(nonUniform);
  ------------------
  |  | 5697|  5.25M|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5697:48): [True: 0, False: 5.25M]
  |  |  |  Branch (5697:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5724|       |
 5725|       |    // SPIR-V storage class qualifier (GL_EXT_spirv_intrinsics)
 5726|  5.25M|    dst.spirvStorageClass = src.spirvStorageClass;
 5727|       |
 5728|       |    // SPIR-V decorate qualifiers (GL_EXT_spirv_intrinsics)
 5729|  5.25M|    if (src.hasSpirvDecorate()) {
  ------------------
  |  Branch (5729:9): [True: 0, False: 5.25M]
  ------------------
 5730|      0|        if (dst.hasSpirvDecorate()) {
  ------------------
  |  Branch (5730:13): [True: 0, False: 0]
  ------------------
 5731|      0|            const TSpirvDecorate& srcSpirvDecorate = src.getSpirvDecorate();
 5732|      0|            TSpirvDecorate& dstSpirvDecorate = dst.getSpirvDecorate();
 5733|      0|            for (auto& decorate : srcSpirvDecorate.decorates) {
  ------------------
  |  Branch (5733:33): [True: 0, False: 0]
  ------------------
 5734|      0|                if (dstSpirvDecorate.decorates.find(decorate.first) != dstSpirvDecorate.decorates.end())
  ------------------
  |  Branch (5734:21): [True: 0, False: 0]
  ------------------
 5735|      0|                    error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate", "(decoration=%u)", decorate.first);
 5736|      0|                else
 5737|      0|                    dstSpirvDecorate.decorates.insert(decorate);
 5738|      0|            }
 5739|       |
 5740|      0|            for (auto& decorateId : srcSpirvDecorate.decorateIds) {
  ------------------
  |  Branch (5740:35): [True: 0, False: 0]
  ------------------
 5741|      0|                if (dstSpirvDecorate.decorateIds.find(decorateId.first) != dstSpirvDecorate.decorateIds.end())
  ------------------
  |  Branch (5741:21): [True: 0, False: 0]
  ------------------
 5742|      0|                    error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_id", "(decoration=%u)", decorateId.first);
 5743|      0|                else
 5744|      0|                    dstSpirvDecorate.decorateIds.insert(decorateId);
 5745|      0|            }
 5746|       |
 5747|      0|            for (auto& decorateString : srcSpirvDecorate.decorateStrings) {
  ------------------
  |  Branch (5747:39): [True: 0, False: 0]
  ------------------
 5748|      0|                if (dstSpirvDecorate.decorates.find(decorateString.first) != dstSpirvDecorate.decorates.end())
  ------------------
  |  Branch (5748:21): [True: 0, False: 0]
  ------------------
 5749|      0|                    error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_string", "(decoration=%u)", decorateString.first);
 5750|      0|                else
 5751|      0|                    dstSpirvDecorate.decorateStrings.insert(decorateString);
 5752|      0|            }
 5753|      0|        } else {
 5754|      0|            dst.spirvDecorate = src.spirvDecorate;
 5755|      0|        }
 5756|      0|    }
 5757|       |
 5758|  5.25M|    if (repeated)
  ------------------
  |  Branch (5758:9): [True: 0, False: 5.25M]
  ------------------
 5759|      0|        error(loc, "replicated qualifiers", "", "");
 5760|  5.25M|}
_ZN7glslang13TParseContext23computeSamplerTypeIndexERNS_8TSamplerE:
 5798|  3.36M|{
 5799|  3.36M|    int arrayIndex    = sampler.arrayed         ? 1 : 0;
  ------------------
  |  Branch (5799:25): [True: 1.16M, False: 2.20M]
  ------------------
 5800|  3.36M|    int shadowIndex   = sampler.shadow          ? 1 : 0;
  ------------------
  |  Branch (5800:25): [True: 356k, False: 3.00M]
  ------------------
 5801|  3.36M|    int externalIndex = sampler.isExternal()    ? 1 : 0;
  ------------------
  |  Branch (5801:25): [True: 5.74k, False: 3.35M]
  ------------------
 5802|  3.36M|    int imageIndex    = sampler.isImageClass()  ? 1 : 0;
  ------------------
  |  Branch (5802:25): [True: 1.30M, False: 2.06M]
  ------------------
 5803|  3.36M|    int msIndex       = sampler.isMultiSample() ? 1 : 0;
  ------------------
  |  Branch (5803:25): [True: 241k, False: 3.12M]
  ------------------
 5804|       |
 5805|  3.36M|    int flattened = EsdNumDims * (EbtNumTypes * (2 * (2 * (2 * (2 * arrayIndex + msIndex) + imageIndex) + shadowIndex) +
 5806|  3.36M|                                                 externalIndex) + sampler.type) + sampler.dim;
 5807|  3.36M|    assert(flattened < maxSamplerIndex);
 5808|       |
 5809|  3.36M|    return flattened;
 5810|  3.36M|}
_ZN7glslang13TParseContext19getDefaultPrecisionERNS_11TPublicTypeE:
 5813|  39.5M|{
 5814|  39.5M|    if (publicType.basicType == EbtSampler)
  ------------------
  |  Branch (5814:9): [True: 3.34M, False: 36.2M]
  ------------------
 5815|  3.34M|        return defaultSamplerPrecision[computeSamplerTypeIndex(publicType.sampler)];
 5816|  36.2M|    else
 5817|  36.2M|        return defaultPrecision[publicType.basicType];
 5818|  39.5M|}
_ZN7glslang13TParseContext23precisionQualifierCheckERKNS_10TSourceLocENS_10TBasicTypeERNS_10TQualifierEb:
 5821|  39.5M|{
 5822|       |    // Built-in symbols are allowed some ambiguous precisions, to be pinned down
 5823|       |    // later by context.
 5824|  39.5M|    if (! obeyPrecisionQualifiers() || parsingBuiltins)
  ------------------
  |  Branch (5824:9): [True: 19.6M, False: 19.9M]
  |  Branch (5824:40): [True: 19.9M, False: 118]
  ------------------
 5825|  39.5M|        return;
 5826|       |
 5827|    118|    if (baseType == EbtAtomicUint && qualifier.precision != EpqNone && qualifier.precision != EpqHigh)
  ------------------
  |  Branch (5827:9): [True: 0, False: 118]
  |  Branch (5827:38): [True: 0, False: 0]
  |  Branch (5827:72): [True: 0, False: 0]
  ------------------
 5828|      0|        error(loc, "atomic counters can only be highp", "atomic_uint", "");
 5829|       |
 5830|    118|    if (hasTypeParameter)
  ------------------
  |  Branch (5830:9): [True: 0, False: 118]
  ------------------
 5831|      0|        return;
 5832|       |
 5833|    118|    if (baseType == EbtFloat || baseType == EbtUint || baseType == EbtInt || baseType == EbtSampler || baseType == EbtAtomicUint) {
  ------------------
  |  Branch (5833:9): [True: 1, False: 117]
  |  Branch (5833:33): [True: 0, False: 117]
  |  Branch (5833:56): [True: 115, False: 2]
  |  Branch (5833:78): [True: 0, False: 2]
  |  Branch (5833:104): [True: 0, False: 2]
  ------------------
 5834|    116|        if (qualifier.precision == EpqNone) {
  ------------------
  |  Branch (5834:13): [True: 0, False: 116]
  ------------------
 5835|      0|            if (relaxedErrors())
  ------------------
  |  Branch (5835:17): [True: 0, False: 0]
  ------------------
 5836|      0|                warn(loc, "type requires declaration of default precision qualifier", TType::getBasicString(baseType), "substituting 'mediump'");
 5837|      0|            else
 5838|      0|                error(loc, "type requires declaration of default precision qualifier", TType::getBasicString(baseType), "");
 5839|      0|            qualifier.precision = EpqMedium;
 5840|      0|            defaultPrecision[baseType] = EpqMedium;
 5841|      0|        }
 5842|    116|    } else if (qualifier.precision != EpqNone)
  ------------------
  |  Branch (5842:16): [True: 0, False: 2]
  ------------------
 5843|      0|        error(loc, "type cannot have precision qualifier", TType::getBasicString(baseType), "");
 5844|    118|}
_ZN7glslang13TParseContext18parameterTypeCheckERKNS_10TSourceLocENS_17TStorageQualifierERKNS_5TTypeE:
 5847|  28.1M|{
 5848|  28.1M|    if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque() && !intermediate.getBindlessMode())
  ------------------
  |  Branch (5848:10): [True: 812k, False: 27.2M]
  |  Branch (5848:33): [True: 79.8k, False: 27.2M]
  |  Branch (5848:59): [True: 0, False: 892k]
  |  Branch (5848:78): [True: 0, False: 0]
  ------------------
 5849|      0|        error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), "");
 5850|  28.1M|    if (!parsingBuiltins && type.contains16BitFloat())
  ------------------
  |  Branch (5850:9): [True: 0, False: 28.1M]
  |  Branch (5850:29): [True: 0, False: 0]
  ------------------
 5851|      0|        requireFloat16Arithmetic(loc, type.getBasicTypeString().c_str(), "float16 types can only be in uniform block or buffer storage");
 5852|  28.1M|    if (!parsingBuiltins && type.contains16BitInt())
  ------------------
  |  Branch (5852:9): [True: 0, False: 28.1M]
  |  Branch (5852:29): [True: 0, False: 0]
  ------------------
 5853|      0|        requireInt16Arithmetic(loc, type.getBasicTypeString().c_str(), "(u)int16 types can only be in uniform block or buffer storage");
 5854|  28.1M|    if (!parsingBuiltins && type.contains8BitInt())
  ------------------
  |  Branch (5854:9): [True: 0, False: 28.1M]
  |  Branch (5854:29): [True: 0, False: 0]
  ------------------
 5855|      0|        requireInt8Arithmetic(loc, type.getBasicTypeString().c_str(), "(u)int8 types can only be in uniform block or buffer storage");
 5856|  28.1M|}
_ZN7glslang13TParseContext26containsFieldWithBasicTypeERKNS_5TTypeENS_10TBasicTypeE:
 5859|    760|{
 5860|    760|    if (type.getBasicType() == basicType)
  ------------------
  |  Branch (5860:9): [True: 0, False: 760]
  ------------------
 5861|      0|        return true;
 5862|       |
 5863|    760|    if (type.getBasicType() == EbtStruct) {
  ------------------
  |  Branch (5863:9): [True: 190, False: 570]
  ------------------
 5864|    190|        const TTypeList& structure = *type.getStruct();
 5865|    760|        for (unsigned int i = 0; i < structure.size(); ++i) {
  ------------------
  |  Branch (5865:34): [True: 570, False: 190]
  ------------------
 5866|    570|            if (containsFieldWithBasicType(*structure[i].type, basicType))
  ------------------
  |  Branch (5866:17): [True: 0, False: 570]
  ------------------
 5867|      0|                return true;
 5868|    570|        }
 5869|    190|    }
 5870|       |
 5871|    760|    return false;
 5872|    760|}
_ZN7glslang13TParseContext14arraySizeCheckERKNS_10TSourceLocEPNS_12TIntermTypedERNS_10TArraySizeEPKcb:
 5879|   123k|{
 5880|   123k|    bool isConst = false;
 5881|   123k|    sizePair.node = nullptr;
 5882|       |
 5883|   123k|    int size = 1;
 5884|       |
 5885|   123k|    TIntermConstantUnion* constant = expr->getAsConstantUnion();
 5886|   123k|    if (constant) {
  ------------------
  |  Branch (5886:9): [True: 123k, False: 0]
  ------------------
 5887|       |        // handle true (non-specialization) constant
 5888|   123k|        size = constant->getConstArray()[0].getIConst();
 5889|   123k|        isConst = true;
 5890|   123k|    } else {
 5891|       |        // see if it's a specialization constant instead
 5892|      0|        if (expr->getQualifier().isSpecConstant()) {
  ------------------
  |  Branch (5892:13): [True: 0, False: 0]
  ------------------
 5893|      0|            isConst = true;
 5894|      0|            sizePair.node = expr;
 5895|      0|            TIntermSymbol* symbol = expr->getAsSymbolNode();
 5896|      0|            if (symbol && symbol->getConstArray().size() > 0)
  ------------------
  |  Branch (5896:17): [True: 0, False: 0]
  |  Branch (5896:27): [True: 0, False: 0]
  ------------------
 5897|      0|                size = symbol->getConstArray()[0].getIConst();
 5898|      0|        } else if (expr->getAsUnaryNode() && expr->getAsUnaryNode()->getOp() == glslang::EOpArrayLength &&
  ------------------
  |  Branch (5898:20): [True: 0, False: 0]
  |  Branch (5898:46): [True: 0, False: 0]
  ------------------
 5899|      0|                   expr->getAsUnaryNode()->getOperand()->getType().isCoopMatNV()) {
  ------------------
  |  Branch (5899:20): [True: 0, False: 0]
  ------------------
 5900|      0|            isConst = true;
 5901|      0|            size = 1;
 5902|      0|            sizePair.node = expr->getAsUnaryNode();
 5903|      0|        }
 5904|      0|    }
 5905|       |
 5906|   123k|    sizePair.size = size;
 5907|       |
 5908|   123k|    if (isTypeParameter) {
  ------------------
  |  Branch (5908:9): [True: 17.1k, False: 106k]
  ------------------
 5909|  17.1k|        if (extensionTurnedOn(E_GL_NV_cooperative_matrix2)) {
  ------------------
  |  Branch (5909:13): [True: 0, False: 17.1k]
  ------------------
 5910|      0|            if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint && expr->getBasicType() != EbtBool)) {
  ------------------
  |  Branch (5910:17): [True: 0, False: 0]
  |  Branch (5910:31): [True: 0, False: 0]
  |  Branch (5910:65): [True: 0, False: 0]
  |  Branch (5910:100): [True: 0, False: 0]
  ------------------
 5911|      0|                error(loc, sizeType, "", "must be a constant integer or boolean expression");
 5912|      0|                return;
 5913|      0|            }
 5914|  17.1k|        } else {
 5915|  17.1k|            if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
  ------------------
  |  Branch (5915:17): [True: 0, False: 17.1k]
  |  Branch (5915:31): [True: 0, False: 17.1k]
  |  Branch (5915:65): [True: 0, False: 0]
  ------------------
 5916|      0|                error(loc, sizeType, "", "must be a constant integer expression");
 5917|      0|                return;
 5918|      0|            }
 5919|  17.1k|        }
 5920|  17.1k|        if (size < 0) {
  ------------------
  |  Branch (5920:13): [True: 0, False: 17.1k]
  ------------------
 5921|      0|            error(loc, sizeType, "", "must be a non-negative integer");
 5922|      0|            return;
 5923|      0|        }
 5924|   106k|    } else {
 5925|   106k|        if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
  ------------------
  |  Branch (5925:13): [True: 0, False: 106k]
  |  Branch (5925:27): [True: 0, False: 106k]
  |  Branch (5925:61): [True: 0, False: 0]
  ------------------
 5926|      0|            error(loc, sizeType, "", "must be a constant integer expression");
 5927|      0|            return;
 5928|      0|        }
 5929|   106k|        if (size <= 0) {
  ------------------
  |  Branch (5929:13): [True: 1, False: 106k]
  ------------------
 5930|      1|            error(loc, sizeType, "", "must be a positive integer");
 5931|      1|            return;
 5932|      1|        }
 5933|   106k|    }
 5934|   123k|}
_ZN7glslang13TParseContext19arrayQualifierErrorERKNS_10TSourceLocERKNS_10TQualifierE:
 5942|  15.4k|{
 5943|  15.4k|    if (qualifier.storage == EvqConst) {
  ------------------
  |  Branch (5943:9): [True: 0, False: 15.4k]
  ------------------
 5944|      0|        profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "const array");
 5945|      0|        profileRequires(loc, EEsProfile, 300, nullptr, "const array");
 5946|      0|    }
 5947|       |
 5948|  15.4k|    if (qualifier.storage == EvqVaryingIn && language == EShLangVertex) {
  ------------------
  |  Branch (5948:9): [True: 4.50k, False: 10.9k]
  |  Branch (5948:46): [True: 0, False: 4.50k]
  ------------------
 5949|      0|        requireProfile(loc, ~EEsProfile, "vertex input arrays");
 5950|      0|        profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays");
 5951|      0|    }
 5952|       |
 5953|  15.4k|    return false;
 5954|  15.4k|}
_ZN7glslang13TParseContext10arrayErrorERKNS_10TSourceLocERKNS_5TTypeE:
 5963|  15.4k|{
 5964|  15.4k|    if (type.getQualifier().storage == EvqVaryingOut && language == EShLangVertex) {
  ------------------
  |  Branch (5964:9): [True: 10.9k, False: 4.50k]
  |  Branch (5964:57): [True: 1.77k, False: 9.14k]
  ------------------
 5965|  1.77k|        if (type.isArrayOfArrays())
  ------------------
  |  Branch (5965:13): [True: 0, False: 1.77k]
  ------------------
 5966|      0|            requireProfile(loc, ~EEsProfile, "vertex-shader array-of-array output");
 5967|  1.77k|        else if (type.isStruct())
  ------------------
  |  Branch (5967:18): [True: 0, False: 1.77k]
  ------------------
 5968|      0|            requireProfile(loc, ~EEsProfile, "vertex-shader array-of-struct output");
 5969|  1.77k|    }
 5970|  15.4k|    if (type.getQualifier().storage == EvqVaryingIn && language == EShLangFragment) {
  ------------------
  |  Branch (5970:9): [True: 4.50k, False: 10.9k]
  |  Branch (5970:56): [True: 1.69k, False: 2.81k]
  ------------------
 5971|  1.69k|        if (type.isArrayOfArrays())
  ------------------
  |  Branch (5971:13): [True: 0, False: 1.69k]
  ------------------
 5972|      0|            requireProfile(loc, ~EEsProfile, "fragment-shader array-of-array input");
 5973|  1.69k|        else if (type.isStruct())
  ------------------
  |  Branch (5973:18): [True: 0, False: 1.69k]
  ------------------
 5974|      0|            requireProfile(loc, ~EEsProfile, "fragment-shader array-of-struct input");
 5975|  1.69k|    }
 5976|  15.4k|    if (type.getQualifier().storage == EvqVaryingOut && language == EShLangFragment) {
  ------------------
  |  Branch (5976:9): [True: 10.9k, False: 4.50k]
  |  Branch (5976:57): [True: 900, False: 10.0k]
  ------------------
 5977|    900|        if (type.isArrayOfArrays())
  ------------------
  |  Branch (5977:13): [True: 0, False: 900]
  ------------------
 5978|      0|            requireProfile(loc, ~EEsProfile, "fragment-shader array-of-array output");
 5979|    900|    }
 5980|       |
 5981|  15.4k|    return false;
 5982|  15.4k|}
_ZN7glslang13TParseContext22arraySizeRequiredCheckERKNS_10TSourceLocERKNS_11TArraySizesE:
 5988|   630k|{
 5989|   630k|    if (!parsingBuiltins && arraySizes.hasUnsized())
  ------------------
  |  Branch (5989:9): [True: 1, False: 630k]
  |  Branch (5989:29): [True: 0, False: 1]
  ------------------
 5990|      0|        error(loc, "array size required", "", "");
 5991|   630k|}
_ZN7glslang13TParseContext16structArrayCheckERKNS_10TSourceLocERKNS_5TTypeE:
 5994|    995|{
 5995|    995|    const TTypeList& structure = *type.getStruct();
 5996|  5.78k|    for (int m = 0; m < (int)structure.size(); ++m) {
  ------------------
  |  Branch (5996:21): [True: 4.78k, False: 995]
  ------------------
 5997|  4.78k|        const TType& member = *structure[m].type;
 5998|  4.78k|        if (member.isArray())
  ------------------
  |  Branch (5998:13): [True: 0, False: 4.78k]
  ------------------
 5999|      0|            arraySizeRequiredCheck(structure[m].loc, *member.getArraySizes());
 6000|  4.78k|    }
 6001|    995|}
_ZN7glslang13TParseContext15arraySizesCheckERKNS_10TSourceLocERKNS_10TQualifierEPNS_11TArraySizesEPKNS_12TIntermTypedEb:
 6005|  30.3k|{
 6006|  30.3k|    assert(arraySizes);
 6007|       |
 6008|       |    // always allow special built-in ins/outs sized to topologies
 6009|  30.3k|    if (parsingBuiltins)
  ------------------
  |  Branch (6009:9): [True: 30.3k, False: 1]
  ------------------
 6010|  30.3k|        return;
 6011|       |
 6012|       |    // initializer must be a sized array, in which case
 6013|       |    // allow the initializer to set any unknown array sizes
 6014|      1|    if (initializer != nullptr) {
  ------------------
  |  Branch (6014:9): [True: 0, False: 1]
  ------------------
 6015|      0|        if (initializer->getType().isUnsizedArray())
  ------------------
  |  Branch (6015:13): [True: 0, False: 0]
  ------------------
 6016|      0|            error(loc, "array initializer must be sized", "[]", "");
 6017|      0|        return;
 6018|      0|    }
 6019|       |
 6020|       |    // No environment allows any non-outer-dimension to be implicitly sized
 6021|      1|    if (arraySizes->isInnerUnsized()) {
  ------------------
  |  Branch (6021:9): [True: 0, False: 1]
  ------------------
 6022|      0|        error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", "");
 6023|      0|        arraySizes->clearInnerUnsized();
 6024|      0|    }
 6025|       |
 6026|      1|    if (arraySizes->isInnerSpecialization() &&
  ------------------
  |  Branch (6026:9): [True: 0, False: 1]
  ------------------
 6027|      0|        (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal && qualifier.storage != EvqShared && qualifier.storage != EvqConst))
  ------------------
  |  Branch (6027:10): [True: 0, False: 0]
  |  Branch (6027:47): [True: 0, False: 0]
  |  Branch (6027:81): [True: 0, False: 0]
  |  Branch (6027:115): [True: 0, False: 0]
  ------------------
 6028|      0|        error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", "");
 6029|       |
 6030|       |    // desktop always allows outer-dimension-unsized variable arrays,
 6031|      1|    if (!isEsProfile())
  ------------------
  |  Branch (6031:9): [True: 0, False: 1]
  ------------------
 6032|      0|        return;
 6033|       |
 6034|       |    // for ES, if size isn't coming from an initializer, it has to be explicitly declared now,
 6035|       |    // with very few exceptions
 6036|       |
 6037|       |    // implicitly-sized io exceptions:
 6038|      1|    switch (language) {
 6039|      0|    case EShLangGeometry:
  ------------------
  |  Branch (6039:5): [True: 0, False: 1]
  ------------------
 6040|      0|        if (qualifier.storage == EvqVaryingIn)
  ------------------
  |  Branch (6040:13): [True: 0, False: 0]
  ------------------
 6041|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (6041:18): [True: 0, False: 0]
  |  Branch (6041:35): [True: 0, False: 0]
  ------------------
 6042|      0|                extensionsTurnedOn(Num_AEP_geometry_shader, AEP_geometry_shader))
  ------------------
  |  Branch (6042:17): [True: 0, False: 0]
  ------------------
 6043|      0|                return;
 6044|      0|        break;
 6045|      0|    case EShLangTessControl:
  ------------------
  |  Branch (6045:5): [True: 0, False: 1]
  ------------------
 6046|      0|        if ( qualifier.storage == EvqVaryingIn ||
  ------------------
  |  Branch (6046:14): [True: 0, False: 0]
  ------------------
 6047|      0|            (qualifier.storage == EvqVaryingOut && ! qualifier.isPatch()))
  ------------------
  |  Branch (6047:14): [True: 0, False: 0]
  |  Branch (6047:52): [True: 0, False: 0]
  ------------------
 6048|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (6048:18): [True: 0, False: 0]
  |  Branch (6048:35): [True: 0, False: 0]
  ------------------
 6049|      0|                extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
  ------------------
  |  Branch (6049:17): [True: 0, False: 0]
  ------------------
 6050|      0|                return;
 6051|      0|        break;
 6052|      0|    case EShLangTessEvaluation:
  ------------------
  |  Branch (6052:5): [True: 0, False: 1]
  ------------------
 6053|      0|        if ((qualifier.storage == EvqVaryingIn && ! qualifier.isPatch()) ||
  ------------------
  |  Branch (6053:14): [True: 0, False: 0]
  |  Branch (6053:51): [True: 0, False: 0]
  ------------------
 6054|      0|             qualifier.storage == EvqVaryingOut)
  ------------------
  |  Branch (6054:14): [True: 0, False: 0]
  ------------------
 6055|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (6055:18): [True: 0, False: 0]
  |  Branch (6055:35): [True: 0, False: 0]
  ------------------
 6056|      0|                extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
  ------------------
  |  Branch (6056:17): [True: 0, False: 0]
  ------------------
 6057|      0|                return;
 6058|      0|        break;
 6059|      0|    case EShLangMesh:
  ------------------
  |  Branch (6059:5): [True: 0, False: 1]
  ------------------
 6060|      0|        if (qualifier.storage == EvqVaryingOut)
  ------------------
  |  Branch (6060:13): [True: 0, False: 0]
  ------------------
 6061|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (6061:18): [True: 0, False: 0]
  |  Branch (6061:35): [True: 0, False: 0]
  ------------------
 6062|      0|                extensionsTurnedOn(Num_AEP_mesh_shader, AEP_mesh_shader))
  ------------------
  |  Branch (6062:17): [True: 0, False: 0]
  ------------------
 6063|      0|                return;
 6064|      0|        break;
 6065|      1|    default:
  ------------------
  |  Branch (6065:5): [True: 1, False: 0]
  ------------------
 6066|      1|        break;
 6067|      1|    }
 6068|       |
 6069|       |    // last member of ssbo block exception:
 6070|      1|    if (qualifier.storage == EvqBuffer && lastMember)
  ------------------
  |  Branch (6070:9): [True: 0, False: 1]
  |  Branch (6070:43): [True: 0, False: 0]
  ------------------
 6071|      0|        return;
 6072|       |
 6073|      1|    if (qualifier.storage == EvqUniform && lastMember && extensionTurnedOn(E_GL_EXT_uniform_buffer_unsized_array))
  ------------------
  |  Branch (6073:9): [True: 0, False: 1]
  |  Branch (6073:44): [True: 0, False: 0]
  |  Branch (6073:58): [True: 0, False: 0]
  ------------------
 6074|      0|        return;
 6075|       |
 6076|      1|    arraySizeRequiredCheck(loc, *arraySizes);
 6077|      1|}
_ZN7glslang13TParseContext24arrayOfArrayVersionCheckERKNS_10TSourceLocEPKNS_11TArraySizesE:
 6080|  1.09M|{
 6081|  1.09M|    if (sizes == nullptr || sizes->getNumDims() == 1)
  ------------------
  |  Branch (6081:9): [True: 426k, False: 672k]
  |  Branch (6081:29): [True: 669k, False: 2.68k]
  ------------------
 6082|  1.09M|        return;
 6083|       |
 6084|  2.68k|    const char* feature = "arrays of arrays";
 6085|       |
 6086|  2.68k|    requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
 6087|  2.68k|    profileRequires(loc, EEsProfile, 310, nullptr, feature);
 6088|  2.68k|    profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature);
 6089|  2.68k|}
_ZN7glslang13TParseContext12declareArrayERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_5TTypeERPNS_7TSymbolE:
 6096|  15.4k|{
 6097|  15.4k|    if (symbol == nullptr) {
  ------------------
  |  Branch (6097:9): [True: 15.4k, False: 0]
  ------------------
 6098|  15.4k|        bool currentScope;
 6099|  15.4k|        symbol = symbolTable.find(identifier, nullptr, &currentScope);
 6100|       |
 6101|  15.4k|        if (symbol && builtInName(identifier) && ! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (6101:13): [True: 0, False: 15.4k]
  |  Branch (6101:23): [True: 0, False: 0]
  |  Branch (6101:50): [True: 0, False: 0]
  ------------------
 6102|       |            // bad shader (errors already reported) trying to redeclare a built-in name as an array
 6103|      0|            symbol = nullptr;
 6104|      0|            return;
 6105|      0|        }
 6106|  15.4k|        if (symbol == nullptr || ! currentScope) {
  ------------------
  |  Branch (6106:13): [True: 15.4k, False: 0]
  |  Branch (6106:34): [True: 0, False: 0]
  ------------------
 6107|       |            //
 6108|       |            // Successfully process a new definition.
 6109|       |            // (Redeclarations have to take place at the same scope; otherwise they are hiding declarations)
 6110|       |            //
 6111|  15.4k|            symbol = new TVariable(&identifier, type);
 6112|  15.4k|            symbolTable.insert(*symbol);
 6113|  15.4k|            if (symbolTable.atGlobalLevel())
  ------------------
  |  Branch (6113:17): [True: 15.4k, False: 0]
  ------------------
 6114|  15.4k|                trackLinkage(*symbol);
 6115|       |
 6116|  15.4k|            if (! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (6116:17): [True: 1, False: 15.4k]
  ------------------
 6117|      1|                if (isIoResizeArray(type)) {
  ------------------
  |  Branch (6117:21): [True: 0, False: 1]
  ------------------
 6118|      0|                    ioArraySymbolResizeList.push_back(symbol);
 6119|      0|                    checkIoArraysConsistency(loc, true);
 6120|      0|                } else
 6121|      1|                    fixIoArraySize(loc, symbol->getWritableType());
 6122|      1|            }
 6123|       |
 6124|  15.4k|            return;
 6125|  15.4k|        }
 6126|      0|        if (symbol->getAsAnonMember()) {
  ------------------
  |  Branch (6126:13): [True: 0, False: 0]
  ------------------
 6127|      0|            error(loc, "cannot redeclare a user-block member array", identifier.c_str(), "");
 6128|      0|            symbol = nullptr;
 6129|      0|            return;
 6130|      0|        }
 6131|      0|    }
 6132|       |
 6133|       |    //
 6134|       |    // Process a redeclaration.
 6135|       |    //
 6136|       |
 6137|      0|    if (symbol == nullptr) {
  ------------------
  |  Branch (6137:9): [True: 0, False: 0]
  ------------------
 6138|      0|        error(loc, "array variable name expected", identifier.c_str(), "");
 6139|      0|        return;
 6140|      0|    }
 6141|       |
 6142|       |    // redeclareBuiltinVariable() should have already done the copyUp()
 6143|      0|    TType& existingType = symbol->getWritableType();
 6144|       |
 6145|      0|    if (! existingType.isArray()) {
  ------------------
  |  Branch (6145:9): [True: 0, False: 0]
  ------------------
 6146|      0|        error(loc, "redeclaring non-array as array", identifier.c_str(), "");
 6147|      0|        return;
 6148|      0|    }
 6149|       |
 6150|      0|    if (! existingType.sameElementType(type)) {
  ------------------
  |  Branch (6150:9): [True: 0, False: 0]
  ------------------
 6151|      0|        error(loc, "redeclaration of array with a different element type", identifier.c_str(), "");
 6152|      0|        return;
 6153|      0|    }
 6154|       |
 6155|      0|    if (! existingType.sameInnerArrayness(type)) {
  ------------------
  |  Branch (6155:9): [True: 0, False: 0]
  ------------------
 6156|      0|        error(loc, "redeclaration of array with a different array dimensions or sizes", identifier.c_str(), "");
 6157|      0|        return;
 6158|      0|    }
 6159|       |
 6160|      0|    if (existingType.isSizedArray()) {
  ------------------
  |  Branch (6160:9): [True: 0, False: 0]
  ------------------
 6161|       |        // be more leniant for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
 6162|      0|        if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize()))
  ------------------
  |  Branch (6162:16): [True: 0, False: 0]
  |  Branch (6162:41): [True: 0, False: 0]
  ------------------
 6163|      0|            error(loc, "redeclaration of array with size", identifier.c_str(), "");
 6164|      0|        return;
 6165|      0|    }
 6166|       |
 6167|      0|    arrayLimitCheck(loc, identifier, type.getOuterArraySize());
 6168|       |
 6169|      0|    existingType.updateArraySizes(type);
 6170|       |
 6171|      0|    if (isIoResizeArray(type))
  ------------------
  |  Branch (6171:9): [True: 0, False: 0]
  ------------------
 6172|      0|        checkIoArraysConsistency(loc);
 6173|      0|}
_ZN7glslang13TParseContext25checkAndResizeMeshViewDimERKNS_10TSourceLocERNS_5TTypeEb:
 6247|   426k|{
 6248|       |    // see if member is a per-view attribute
 6249|   426k|    if (!type.getQualifier().isPerView())
  ------------------
  |  Branch (6249:9): [True: 424k, False: 2.23k]
  ------------------
 6250|   424k|        return;
 6251|       |
 6252|  2.23k|    if ((isBlockMember && type.isArray()) || (!isBlockMember && type.isArrayOfArrays())) {
  ------------------
  |  Branch (6252:10): [True: 2.23k, False: 0]
  |  Branch (6252:27): [True: 2.23k, False: 0]
  |  Branch (6252:47): [True: 0, False: 0]
  |  Branch (6252:65): [True: 0, False: 0]
  ------------------
 6253|       |        // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value.
 6254|  2.23k|        int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
  ------------------
  |  Branch (6254:28): [True: 2.23k, False: 0]
  ------------------
 6255|       |        // For block members, outermost array dimension is the view dimension.
 6256|       |        // For non-block members, outermost array dimension is the vertex/primitive dimension
 6257|       |        // and 2nd outermost is the view dimension.
 6258|  2.23k|        int viewDim = isBlockMember ? 0 : 1;
  ------------------
  |  Branch (6258:23): [True: 2.23k, False: 0]
  ------------------
 6259|  2.23k|        int viewDimSize = type.getArraySizes()->getDimSize(viewDim);
 6260|       |
 6261|  2.23k|        if (viewDimSize != UnsizedArraySize && viewDimSize != maxViewCount)
  ------------------
  |  Branch (6261:13): [True: 0, False: 2.23k]
  |  Branch (6261:48): [True: 0, False: 0]
  ------------------
 6262|      0|            error(loc, "mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized", "[]", "");
 6263|  2.23k|        else if (viewDimSize == UnsizedArraySize)
  ------------------
  |  Branch (6263:18): [True: 2.23k, False: 0]
  ------------------
 6264|  2.23k|            type.getArraySizes()->setDimSize(viewDim, maxViewCount);
 6265|  2.23k|    }
 6266|      0|    else {
 6267|      0|        error(loc, "requires a view array dimension", "perviewNV", "");
 6268|      0|    }
 6269|  2.23k|}
_ZNK7glslang13TParseContext30lineDirectiveShouldSetNextLineEv:
 6281|      1|{
 6282|      1|    return isEsProfile() || version >= 330;
  ------------------
  |  Branch (6282:12): [True: 0, False: 1]
  |  Branch (6282:29): [True: 1, False: 0]
  ------------------
 6283|      1|}
_ZN7glslang13TParseContext17nonInitConstCheckERKNS_10TSourceLocERNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeE:
 6289|   278k|{
 6290|       |    //
 6291|       |    // Make the qualifier make sense, given that there is not an initializer.
 6292|       |    //
 6293|   278k|    if (type.getQualifier().storage == EvqConst ||
  ------------------
  |  Branch (6293:9): [True: 0, False: 278k]
  ------------------
 6294|   278k|        type.getQualifier().storage == EvqConstReadOnly) {
  ------------------
  |  Branch (6294:9): [True: 1, False: 278k]
  ------------------
 6295|      1|        type.getQualifier().makeTemporary();
 6296|      1|        error(loc, "variables with qualifier 'const' must be initialized", identifier.c_str(), "");
 6297|      1|    }
 6298|   278k|}
_ZN7glslang13TParseContext24redeclareBuiltinVariableERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_10TQualifierERKNS_17TShaderQualifiersE:
 6312|   420k|{
 6313|   420k|    if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (6313:9): [True: 2, False: 420k]
  |  Branch (6313:38): [True: 420k, False: 0]
  |  Branch (6313:70): [True: 0, False: 0]
  ------------------
 6314|   420k|        return nullptr;
 6315|       |
 6316|      0|    bool nonEsRedecls = (!isEsProfile() && (version >= 130 || identifier == "gl_TexCoord"));
  ------------------
  |  Branch (6316:26): [True: 0, False: 0]
  |  Branch (6316:45): [True: 0, False: 0]
  |  Branch (6316:63): [True: 0, False: 0]
  ------------------
 6317|      0|    bool    esRedecls = (isEsProfile() &&
  ------------------
  |  Branch (6317:26): [True: 0, False: 0]
  ------------------
 6318|      0|                         (version >= 320 || extensionsTurnedOn(Num_AEP_shader_io_blocks, AEP_shader_io_blocks) ||
  ------------------
  |  Branch (6318:27): [True: 0, False: 0]
  |  Branch (6318:45): [True: 0, False: 0]
  ------------------
 6319|      0|                          (identifier == "gl_FragDepth" && extensionTurnedOn(E_GL_EXT_conservative_depth))));
  ------------------
  |  Branch (6319:28): [True: 0, False: 0]
  |  Branch (6319:60): [True: 0, False: 0]
  ------------------
 6320|      0|    if (! esRedecls && ! nonEsRedecls)
  ------------------
  |  Branch (6320:9): [True: 0, False: 0]
  |  Branch (6320:24): [True: 0, False: 0]
  ------------------
 6321|      0|        return nullptr;
 6322|       |
 6323|       |    // Special case when using GL_ARB_separate_shader_objects
 6324|      0|    bool ssoPre150 = false;  // means the only reason this variable is redeclared is due to this combination
 6325|      0|    if (!isEsProfile() && version <= 140 && extensionTurnedOn(E_GL_ARB_separate_shader_objects)) {
  ------------------
  |  Branch (6325:9): [True: 0, False: 0]
  |  Branch (6325:27): [True: 0, False: 0]
  |  Branch (6325:45): [True: 0, False: 0]
  ------------------
 6326|      0|        if (identifier == "gl_Position"     ||
  ------------------
  |  Branch (6326:13): [True: 0, False: 0]
  ------------------
 6327|      0|            identifier == "gl_PointSize"    ||
  ------------------
  |  Branch (6327:13): [True: 0, False: 0]
  ------------------
 6328|      0|            identifier == "gl_ClipVertex"   ||
  ------------------
  |  Branch (6328:13): [True: 0, False: 0]
  ------------------
 6329|      0|            identifier == "gl_FogFragCoord")
  ------------------
  |  Branch (6329:13): [True: 0, False: 0]
  ------------------
 6330|      0|            ssoPre150 = true;
 6331|      0|    }
 6332|       |
 6333|       |    // Potentially redeclaring a built-in variable...
 6334|       |
 6335|      0|    if (ssoPre150 ||
  ------------------
  |  Branch (6335:9): [True: 0, False: 0]
  ------------------
 6336|      0|        (identifier == "gl_FragDepth"           && ((nonEsRedecls && version >= 420) || esRedecls)) ||
  ------------------
  |  Branch (6336:10): [True: 0, False: 0]
  |  Branch (6336:54): [True: 0, False: 0]
  |  Branch (6336:70): [True: 0, False: 0]
  |  Branch (6336:89): [True: 0, False: 0]
  ------------------
 6337|      0|        (identifier == "gl_FragCoord"           && ((nonEsRedecls && version >= 140) || esRedecls)) ||
  ------------------
  |  Branch (6337:10): [True: 0, False: 0]
  |  Branch (6337:54): [True: 0, False: 0]
  |  Branch (6337:70): [True: 0, False: 0]
  |  Branch (6337:89): [True: 0, False: 0]
  ------------------
 6338|      0|         identifier == "gl_ClipDistance"                                                            ||
  ------------------
  |  Branch (6338:10): [True: 0, False: 0]
  ------------------
 6339|      0|         identifier == "gl_CullDistance"                                                            ||
  ------------------
  |  Branch (6339:10): [True: 0, False: 0]
  ------------------
 6340|      0|         identifier == "gl_ShadingRateEXT"                                                          ||
  ------------------
  |  Branch (6340:10): [True: 0, False: 0]
  ------------------
 6341|      0|         identifier == "gl_PrimitiveShadingRateEXT"                                                 ||
  ------------------
  |  Branch (6341:10): [True: 0, False: 0]
  ------------------
 6342|      0|         identifier == "gl_FrontColor"                                                              ||
  ------------------
  |  Branch (6342:10): [True: 0, False: 0]
  ------------------
 6343|      0|         identifier == "gl_BackColor"                                                               ||
  ------------------
  |  Branch (6343:10): [True: 0, False: 0]
  ------------------
 6344|      0|         identifier == "gl_FrontSecondaryColor"                                                     ||
  ------------------
  |  Branch (6344:10): [True: 0, False: 0]
  ------------------
 6345|      0|         identifier == "gl_BackSecondaryColor"                                                      ||
  ------------------
  |  Branch (6345:10): [True: 0, False: 0]
  ------------------
 6346|      0|         identifier == "gl_SecondaryColor"                                                          ||
  ------------------
  |  Branch (6346:10): [True: 0, False: 0]
  ------------------
 6347|      0|        (identifier == "gl_Color"               && language == EShLangFragment)                     ||
  ------------------
  |  Branch (6347:10): [True: 0, False: 0]
  |  Branch (6347:52): [True: 0, False: 0]
  ------------------
 6348|      0|        (identifier == "gl_FragStencilRefARB"   && (nonEsRedecls && version >= 140)
  ------------------
  |  Branch (6348:10): [True: 0, False: 0]
  |  Branch (6348:53): [True: 0, False: 0]
  |  Branch (6348:69): [True: 0, False: 0]
  ------------------
 6349|      0|                                                && language == EShLangFragment)                     ||
  ------------------
  |  Branch (6349:52): [True: 0, False: 0]
  ------------------
 6350|      0|         identifier == "gl_SampleMask"                                                              ||
  ------------------
  |  Branch (6350:10): [True: 0, False: 0]
  ------------------
 6351|      0|         identifier == "gl_EnableOpacityMicromapEXT"                                                ||
  ------------------
  |  Branch (6351:10): [True: 0, False: 0]
  ------------------
 6352|      0|         identifier == "gl_Layer"                                                                   ||
  ------------------
  |  Branch (6352:10): [True: 0, False: 0]
  ------------------
 6353|      0|         identifier == "gl_PrimitiveIndicesNV"                                                      ||
  ------------------
  |  Branch (6353:10): [True: 0, False: 0]
  ------------------
 6354|      0|         identifier == "gl_PrimitivePointIndicesEXT"                                                ||
  ------------------
  |  Branch (6354:10): [True: 0, False: 0]
  ------------------
 6355|      0|         identifier == "gl_PrimitiveLineIndicesEXT"                                                 ||
  ------------------
  |  Branch (6355:10): [True: 0, False: 0]
  ------------------
 6356|      0|         identifier == "gl_PrimitiveTriangleIndicesEXT"                                             ||
  ------------------
  |  Branch (6356:10): [True: 0, False: 0]
  ------------------
 6357|      0|         identifier == "gl_TexCoord") {
  ------------------
  |  Branch (6357:10): [True: 0, False: 0]
  ------------------
 6358|       |
 6359|       |        // Find the existing symbol, if any.
 6360|      0|        bool builtIn;
 6361|      0|        TSymbol* symbol = symbolTable.find(identifier, &builtIn);
 6362|       |
 6363|       |        // If the symbol was not found, this must be a version/profile/stage
 6364|       |        // that doesn't have it.
 6365|      0|        if (! symbol)
  ------------------
  |  Branch (6365:13): [True: 0, False: 0]
  ------------------
 6366|      0|            return nullptr;
 6367|       |
 6368|       |        // If it wasn't at a built-in level, then it's already been redeclared;
 6369|       |        // that is, this is a redeclaration of a redeclaration; reuse that initial
 6370|       |        // redeclaration.  Otherwise, make the new one.
 6371|      0|        if (builtIn) {
  ------------------
  |  Branch (6371:13): [True: 0, False: 0]
  ------------------
 6372|      0|            makeEditable(symbol);
 6373|      0|            symbolTable.amendSymbolIdLevel(*symbol);
 6374|      0|        }
 6375|       |
 6376|       |        // Now, modify the type of the copy, as per the type of the current redeclaration.
 6377|       |
 6378|      0|        TQualifier& symbolQualifier = symbol->getWritableType().getQualifier();
 6379|      0|        if (ssoPre150) {
  ------------------
  |  Branch (6379:13): [True: 0, False: 0]
  ------------------
 6380|      0|            if (intermediate.inIoAccessed(identifier))
  ------------------
  |  Branch (6380:17): [True: 0, False: 0]
  ------------------
 6381|      0|                error(loc, "cannot redeclare after use", identifier.c_str(), "");
 6382|      0|            if (qualifier.hasLayout())
  ------------------
  |  Branch (6382:17): [True: 0, False: 0]
  ------------------
 6383|      0|                error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
 6384|      0|            if (qualifier.isMemory() || qualifier.isAuxiliary() || (language == EShLangVertex   && qualifier.storage != EvqVaryingOut) ||
  ------------------
  |  Branch (6384:17): [True: 0, False: 0]
  |  Branch (6384:41): [True: 0, False: 0]
  |  Branch (6384:69): [True: 0, False: 0]
  |  Branch (6384:100): [True: 0, False: 0]
  ------------------
 6385|      0|                                                                   (language == EShLangFragment && qualifier.storage != EvqVaryingIn))
  ------------------
  |  Branch (6385:69): [True: 0, False: 0]
  |  Branch (6385:100): [True: 0, False: 0]
  ------------------
 6386|      0|                error(loc, "cannot change storage, memory, or auxiliary qualification of", "redeclaration", symbol->getName().c_str());
 6387|      0|            if (! qualifier.smooth)
  ------------------
  |  Branch (6387:17): [True: 0, False: 0]
  ------------------
 6388|      0|                error(loc, "cannot change interpolation qualification of", "redeclaration", symbol->getName().c_str());
 6389|      0|        } else if (identifier == "gl_FrontColor"          ||
  ------------------
  |  Branch (6389:20): [True: 0, False: 0]
  ------------------
 6390|      0|                   identifier == "gl_BackColor"           ||
  ------------------
  |  Branch (6390:20): [True: 0, False: 0]
  ------------------
 6391|      0|                   identifier == "gl_FrontSecondaryColor" ||
  ------------------
  |  Branch (6391:20): [True: 0, False: 0]
  ------------------
 6392|      0|                   identifier == "gl_BackSecondaryColor"  ||
  ------------------
  |  Branch (6392:20): [True: 0, False: 0]
  ------------------
 6393|      0|                   identifier == "gl_SecondaryColor"      ||
  ------------------
  |  Branch (6393:20): [True: 0, False: 0]
  ------------------
 6394|      0|                   identifier == "gl_Color") {
  ------------------
  |  Branch (6394:20): [True: 0, False: 0]
  ------------------
 6395|      0|            symbolQualifier.flat = qualifier.flat;
 6396|      0|            symbolQualifier.smooth = qualifier.smooth;
 6397|      0|            symbolQualifier.nopersp = qualifier.nopersp;
 6398|      0|            if (qualifier.hasLayout())
  ------------------
  |  Branch (6398:17): [True: 0, False: 0]
  ------------------
 6399|      0|                error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
 6400|      0|            if (qualifier.isMemory() || qualifier.isAuxiliary() || symbol->getType().getQualifier().storage != qualifier.storage)
  ------------------
  |  Branch (6400:17): [True: 0, False: 0]
  |  Branch (6400:41): [True: 0, False: 0]
  |  Branch (6400:68): [True: 0, False: 0]
  ------------------
 6401|      0|                error(loc, "cannot change storage, memory, or auxiliary qualification of", "redeclaration", symbol->getName().c_str());
 6402|      0|        } else if (identifier == "gl_TexCoord"     ||
  ------------------
  |  Branch (6402:20): [True: 0, False: 0]
  ------------------
 6403|      0|                   identifier == "gl_ClipDistance" ||
  ------------------
  |  Branch (6403:20): [True: 0, False: 0]
  ------------------
 6404|      0|                   identifier == "gl_CullDistance") {
  ------------------
  |  Branch (6404:20): [True: 0, False: 0]
  ------------------
 6405|      0|            if (qualifier.hasLayout() || qualifier.isMemory() || qualifier.isAuxiliary() ||
  ------------------
  |  Branch (6405:17): [True: 0, False: 0]
  |  Branch (6405:42): [True: 0, False: 0]
  |  Branch (6405:66): [True: 0, False: 0]
  ------------------
 6406|      0|                qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6406:17): [True: 0, False: 0]
  |  Branch (6406:65): [True: 0, False: 0]
  ------------------
 6407|      0|                symbolQualifier.storage != qualifier.storage)
  ------------------
  |  Branch (6407:17): [True: 0, False: 0]
  ------------------
 6408|      0|                error(loc, "cannot change qualification of", "redeclaration", symbol->getName().c_str());
 6409|      0|        } else if (identifier == "gl_FragCoord") {
  ------------------
  |  Branch (6409:20): [True: 0, False: 0]
  ------------------
 6410|      0|            if (!intermediate.getTexCoordRedeclared() && intermediate.inIoAccessed("gl_FragCoord"))
  ------------------
  |  Branch (6410:17): [True: 0, False: 0]
  |  Branch (6410:17): [True: 0, False: 0]
  |  Branch (6410:58): [True: 0, False: 0]
  ------------------
 6411|      0|                error(loc, "cannot redeclare after use", "gl_FragCoord", "");
 6412|      0|            if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6412:17): [True: 0, False: 0]
  |  Branch (6412:65): [True: 0, False: 0]
  ------------------
 6413|      0|                qualifier.isMemory() || qualifier.isAuxiliary())
  ------------------
  |  Branch (6413:17): [True: 0, False: 0]
  |  Branch (6413:41): [True: 0, False: 0]
  ------------------
 6414|      0|                error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str());
 6415|      0|            if (qualifier.storage != EvqVaryingIn)
  ------------------
  |  Branch (6415:17): [True: 0, False: 0]
  ------------------
 6416|      0|                error(loc, "cannot change input storage qualification of", "redeclaration", symbol->getName().c_str());
 6417|      0|            if (! builtIn && (publicType.pixelCenterInteger != intermediate.getPixelCenterInteger() ||
  ------------------
  |  Branch (6417:17): [True: 0, False: 0]
  |  Branch (6417:31): [True: 0, False: 0]
  ------------------
 6418|      0|                              publicType.originUpperLeft != intermediate.getOriginUpperLeft()))
  ------------------
  |  Branch (6418:31): [True: 0, False: 0]
  ------------------
 6419|      0|                error(loc, "cannot redeclare with different qualification:", "redeclaration", symbol->getName().c_str());
 6420|       |
 6421|       |
 6422|      0|            intermediate.setTexCoordRedeclared();
 6423|      0|            if (publicType.pixelCenterInteger)
  ------------------
  |  Branch (6423:17): [True: 0, False: 0]
  ------------------
 6424|      0|                intermediate.setPixelCenterInteger();
 6425|      0|            if (publicType.originUpperLeft)
  ------------------
  |  Branch (6425:17): [True: 0, False: 0]
  ------------------
 6426|      0|                intermediate.setOriginUpperLeft();
 6427|      0|        } else if (identifier == "gl_FragDepth") {
  ------------------
  |  Branch (6427:20): [True: 0, False: 0]
  ------------------
 6428|      0|            if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6428:17): [True: 0, False: 0]
  |  Branch (6428:65): [True: 0, False: 0]
  ------------------
 6429|      0|                qualifier.isMemory() || qualifier.isAuxiliary())
  ------------------
  |  Branch (6429:17): [True: 0, False: 0]
  |  Branch (6429:41): [True: 0, False: 0]
  ------------------
 6430|      0|                error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str());
 6431|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (6431:17): [True: 0, False: 0]
  ------------------
 6432|      0|                error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
 6433|      0|            if (publicType.layoutDepth != EldNone) {
  ------------------
  |  Branch (6433:17): [True: 0, False: 0]
  ------------------
 6434|      0|                if (intermediate.inIoAccessed("gl_FragDepth"))
  ------------------
  |  Branch (6434:21): [True: 0, False: 0]
  ------------------
 6435|      0|                    error(loc, "cannot redeclare after use", "gl_FragDepth", "");
 6436|      0|                if (! intermediate.setDepth(publicType.layoutDepth))
  ------------------
  |  Branch (6436:21): [True: 0, False: 0]
  ------------------
 6437|      0|                    error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str());
 6438|      0|            }
 6439|      0|        } else if (identifier == "gl_FragStencilRefARB") {
  ------------------
  |  Branch (6439:20): [True: 0, False: 0]
  ------------------
 6440|      0|            if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6440:17): [True: 0, False: 0]
  |  Branch (6440:65): [True: 0, False: 0]
  ------------------
 6441|      0|                qualifier.isMemory() || qualifier.isAuxiliary())
  ------------------
  |  Branch (6441:17): [True: 0, False: 0]
  |  Branch (6441:41): [True: 0, False: 0]
  ------------------
 6442|      0|                error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str());
 6443|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (6443:17): [True: 0, False: 0]
  ------------------
 6444|      0|                error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
 6445|      0|            if (publicType.layoutStencil != ElsNone) {
  ------------------
  |  Branch (6445:17): [True: 0, False: 0]
  ------------------
 6446|      0|                if (intermediate.inIoAccessed("gl_FragStencilRefARB"))
  ------------------
  |  Branch (6446:21): [True: 0, False: 0]
  ------------------
 6447|      0|                    error(loc, "cannot redeclare after use", "gl_FragStencilRefARB", "");
 6448|      0|                if (!intermediate.setStencil(publicType.layoutStencil))
  ------------------
  |  Branch (6448:21): [True: 0, False: 0]
  ------------------
 6449|      0|                    error(loc, "all redeclarations must use the same stencil layout on", "redeclaration",
 6450|      0|                          symbol->getName().c_str());
 6451|      0|            }
 6452|      0|        }
 6453|      0|        else if (
 6454|      0|            identifier == "gl_PrimitiveIndicesNV") {
  ------------------
  |  Branch (6454:13): [True: 0, False: 0]
  ------------------
 6455|      0|            if (qualifier.hasLayout())
  ------------------
  |  Branch (6455:17): [True: 0, False: 0]
  ------------------
 6456|      0|                error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
 6457|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (6457:17): [True: 0, False: 0]
  ------------------
 6458|      0|                error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
 6459|      0|        }
 6460|      0|        else if (identifier == "gl_SampleMask") {
  ------------------
  |  Branch (6460:18): [True: 0, False: 0]
  ------------------
 6461|      0|            if (!publicType.layoutOverrideCoverage) {
  ------------------
  |  Branch (6461:17): [True: 0, False: 0]
  ------------------
 6462|      0|                error(loc, "redeclaration only allowed for override_coverage layout", "redeclaration", symbol->getName().c_str());
 6463|      0|            }
 6464|      0|            intermediate.setLayoutOverrideCoverage();
 6465|      0|        }
 6466|      0|        else if (identifier == "gl_Layer") {
  ------------------
  |  Branch (6466:18): [True: 0, False: 0]
  ------------------
 6467|      0|            if (!qualifier.layoutViewportRelative && qualifier.layoutSecondaryViewportRelativeOffset == -2048)
  ------------------
  |  Branch (6467:17): [True: 0, False: 0]
  |  Branch (6467:54): [True: 0, False: 0]
  ------------------
 6468|      0|                error(loc, "redeclaration only allowed for viewport_relative or secondary_view_offset layout", "redeclaration", symbol->getName().c_str());
 6469|      0|            symbolQualifier.layoutViewportRelative = qualifier.layoutViewportRelative;
 6470|      0|            symbolQualifier.layoutSecondaryViewportRelativeOffset = qualifier.layoutSecondaryViewportRelativeOffset;
 6471|      0|        }
 6472|      0|        else if (identifier == "gl_EnableOpacityMicromapEXT") {
  ------------------
  |  Branch (6472:18): [True: 0, False: 0]
  ------------------
 6473|       |            // GL_EXT_opacity_micromap_ray_query_mode. This branch handles the full-redeclaration form
 6474|       |            //   const bool gl_EnableOpacityMicromapEXT = <true|false>;
 6475|       |            // which sets the built-in's value (emitted as OpConstantTrue/OpConstantFalse). The
 6476|       |            // specialization-constant form is the bare "layout(constant_id = N) gl_EnableOpacityMicromapEXT;"
 6477|       |            // (handled in addQualifierToExisting); per the extension it is not valid to restate the type
 6478|       |            // or specify a value together with constant_id.
 6479|      0|            requireExtensions(loc, 1, &E_GL_EXT_opacity_micromap_ray_query_mode, "gl_EnableOpacityMicromapEXT redeclaration");
 6480|      0|            if (qualifier.hasSpecConstantId())
  ------------------
  |  Branch (6480:17): [True: 0, False: 0]
  ------------------
 6481|      0|                error(loc, "cannot restate the type or specify a value with constant_id; use "
 6482|      0|                           "'layout(constant_id = N) gl_EnableOpacityMicromapEXT;'", "redeclaration",
 6483|      0|                      symbol->getName().c_str());
 6484|      0|            else if (qualifier.storage != EvqConst)
  ------------------
  |  Branch (6484:22): [True: 0, False: 0]
  ------------------
 6485|      0|                error(loc, "can only be redeclared as 'const bool gl_EnableOpacityMicromapEXT = <true|false>;' "
 6486|      0|                           "or 'layout(constant_id = N) gl_EnableOpacityMicromapEXT;'", "redeclaration",
 6487|      0|                      symbol->getName().c_str());
 6488|       |            // For the valid 'const bool = <true|false>;' form the value is captured from the initializer
 6489|       |            // after it is processed (see declareVariable); nothing else to do to the symbol's qualifier here.
 6490|      0|        }
 6491|       |
 6492|       |        // TODO: semantics quality: separate smooth from nothing declared, then use IsInterpolation for several tests above
 6493|       |
 6494|      0|        return symbol;
 6495|      0|    }
 6496|       |
 6497|      0|    return nullptr;
 6498|      0|}
_ZN7glslang13TParseContext20paramCheckFixStorageERKNS_10TSourceLocERKNS_17TStorageQualifierERNS_5TTypeE:
 6725|  28.1M|{
 6726|  28.1M|    switch (qualifier) {
 6727|      0|    case EvqConst:
  ------------------
  |  Branch (6727:5): [True: 0, False: 28.1M]
  ------------------
 6728|      0|    case EvqConstReadOnly:
  ------------------
  |  Branch (6728:5): [True: 0, False: 28.1M]
  ------------------
 6729|      0|        type.getQualifier().storage = EvqConstReadOnly;
 6730|      0|        break;
 6731|  10.8k|    case EvqIn:
  ------------------
  |  Branch (6731:5): [True: 10.8k, False: 28.0M]
  ------------------
 6732|   823k|    case EvqOut:
  ------------------
  |  Branch (6732:5): [True: 812k, False: 27.2M]
  ------------------
 6733|   903k|    case EvqInOut:
  ------------------
  |  Branch (6733:5): [True: 79.8k, False: 28.0M]
  ------------------
 6734|   903k|    case EvqTileImageEXT:
  ------------------
  |  Branch (6734:5): [True: 0, False: 28.1M]
  ------------------
 6735|   903k|        type.getQualifier().storage = qualifier;
 6736|   903k|        break;
 6737|  1.04M|    case EvqGlobal:
  ------------------
  |  Branch (6737:5): [True: 1.04M, False: 27.0M]
  ------------------
 6738|  27.1M|    case EvqTemporary:
  ------------------
  |  Branch (6738:5): [True: 26.1M, False: 1.94M]
  ------------------
 6739|  27.1M|        type.getQualifier().storage = EvqIn;
 6740|  27.1M|        break;
 6741|      0|    default:
  ------------------
  |  Branch (6741:5): [True: 0, False: 28.1M]
  ------------------
 6742|      0|        type.getQualifier().storage = EvqIn;
 6743|      0|        error(loc, "storage qualifier not allowed on function parameter", GetStorageQualifierString(qualifier), "");
 6744|      0|        break;
 6745|  28.1M|    }
 6746|  28.1M|}
_ZN7glslang13TParseContext13paramCheckFixERKNS_10TSourceLocERKNS_10TQualifierERNS_5TTypeE:
 6749|  3.46M|{
 6750|  3.46M|    if (qualifier.isMemory()) {
  ------------------
  |  Branch (6750:9): [True: 1.60M, False: 1.86M]
  ------------------
 6751|  1.60M|        type.getQualifier().volatil   = qualifier.volatil;
 6752|  1.60M|        type.getQualifier().nontemporal   = qualifier.nontemporal;
 6753|  1.60M|        type.getQualifier().coherent  = qualifier.coherent;
 6754|  1.60M|        type.getQualifier().devicecoherent  = qualifier.devicecoherent ;
 6755|  1.60M|        type.getQualifier().queuefamilycoherent  = qualifier.queuefamilycoherent;
 6756|  1.60M|        type.getQualifier().workgroupcoherent  = qualifier.workgroupcoherent;
 6757|  1.60M|        type.getQualifier().subgroupcoherent  = qualifier.subgroupcoherent;
 6758|  1.60M|        type.getQualifier().shadercallcoherent = qualifier.shadercallcoherent;
 6759|  1.60M|        type.getQualifier().nonprivate = qualifier.nonprivate;
 6760|  1.60M|        type.getQualifier().readonly  = qualifier.readonly;
 6761|  1.60M|        type.getQualifier().writeonly = qualifier.writeonly;
 6762|  1.60M|        type.getQualifier().restrict  = qualifier.restrict;
 6763|  1.60M|    }
 6764|       |
 6765|  3.46M|    if (qualifier.isAuxiliary() ||
  ------------------
  |  Branch (6765:9): [True: 0, False: 3.46M]
  ------------------
 6766|  3.46M|        qualifier.isInterpolation())
  ------------------
  |  Branch (6766:9): [True: 0, False: 3.46M]
  ------------------
 6767|      0|        error(loc, "cannot use auxiliary or interpolation qualifiers on a function parameter", "", "");
 6768|  3.46M|    if (qualifier.hasLayout())
  ------------------
  |  Branch (6768:9): [True: 0, False: 3.46M]
  ------------------
 6769|      0|        error(loc, "cannot use layout qualifiers on a function parameter", "", "");
 6770|  3.46M|    if (qualifier.invariant)
  ------------------
  |  Branch (6770:9): [True: 0, False: 3.46M]
  ------------------
 6771|      0|        error(loc, "cannot use invariant qualifier on a function parameter", "", "");
 6772|  3.46M|    if (qualifier.isNoContraction()) {
  ------------------
  |  Branch (6772:9): [True: 0, False: 3.46M]
  ------------------
 6773|      0|        if (qualifier.isParamOutput())
  ------------------
  |  Branch (6773:13): [True: 0, False: 0]
  ------------------
 6774|      0|            type.getQualifier().setNoContraction();
 6775|      0|        else
 6776|      0|            warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
 6777|      0|    }
 6778|  3.46M|    if (qualifier.isNonUniform())
  ------------------
  |  Branch (6778:9): [True: 0, False: 3.46M]
  ------------------
 6779|      0|        type.getQualifier().nonUniform = qualifier.nonUniform;
 6780|  3.46M|    if (qualifier.isSpirvByReference())
  ------------------
  |  Branch (6780:9): [True: 0, False: 3.46M]
  ------------------
 6781|      0|        type.getQualifier().setSpirvByReference();
 6782|  3.46M|    if (qualifier.isSpirvLiteral()) {
  ------------------
  |  Branch (6782:9): [True: 0, False: 3.46M]
  ------------------
 6783|      0|        if (type.getBasicType() == EbtFloat || type.getBasicType() == EbtInt || type.getBasicType() == EbtUint ||
  ------------------
  |  Branch (6783:13): [True: 0, False: 0]
  |  Branch (6783:48): [True: 0, False: 0]
  |  Branch (6783:81): [True: 0, False: 0]
  ------------------
 6784|      0|            type.getBasicType() == EbtBool)
  ------------------
  |  Branch (6784:13): [True: 0, False: 0]
  ------------------
 6785|      0|            type.getQualifier().setSpirvLiteral();
 6786|      0|        else
 6787|      0|            error(loc, "cannot use spirv_literal qualifier", type.getBasicTypeString().c_str(), "");
 6788|      0|    }
 6789|       |
 6790|  3.46M|    paramCheckFixStorage(loc, qualifier.storage, type);
 6791|  3.46M|}
_ZN7glslang13TParseContext16nestedBlockCheckERKNS_10TSourceLocEb:
 6794|  6.53k|{
 6795|  6.53k|    if (allowedInnerStruct) {
  ------------------
  |  Branch (6795:9): [True: 0, False: 6.53k]
  ------------------
 6796|      0|        if ((structNestingLevel <= 0 && blockNestingLevel <= 0) ||
  ------------------
  |  Branch (6796:14): [True: 0, False: 0]
  |  Branch (6796:41): [True: 0, False: 0]
  ------------------
 6797|      0|            (structNestingLevel > 0 && blockNestingLevel > 0) ||
  ------------------
  |  Branch (6797:14): [True: 0, False: 0]
  |  Branch (6797:40): [True: 0, False: 0]
  ------------------
 6798|      0|            blockNestingLevel > 1)
  ------------------
  |  Branch (6798:13): [True: 0, False: 0]
  ------------------
 6799|      0|            error(loc, "cannot nest a block definition inside a structure or block", "", "");
 6800|  6.53k|    } else if (structNestingLevel > 0 || blockNestingLevel > 0)
  ------------------
  |  Branch (6800:16): [True: 0, False: 6.53k]
  |  Branch (6800:42): [True: 0, False: 6.53k]
  ------------------
 6801|      0|        error(loc, "cannot nest a block definition inside a structure or block", "", "");
 6802|  6.53k|    ++blockNestingLevel;
 6803|  6.53k|}
_ZN7glslang13TParseContext17nestedStructCheckERKNS_10TSourceLocE:
 6806|    995|{
 6807|    995|    if (structNestingLevel > 0 || blockNestingLevel > 0)
  ------------------
  |  Branch (6807:9): [True: 0, False: 995]
  |  Branch (6807:35): [True: 0, False: 995]
  ------------------
 6808|      0|        error(loc, "cannot nest a structure definition inside a structure or block", "", "");
 6809|    995|    ++structNestingLevel;
 6810|    995|}
_ZN7glslang13TParseContext16arrayObjectCheckERKNS_10TSourceLocERKNS_5TTypeEPKc:
 6813|  11.1M|{
 6814|       |    // Some versions don't allow comparing arrays or structures containing arrays
 6815|  11.1M|    if (type.containsArray()) {
  ------------------
  |  Branch (6815:9): [True: 0, False: 11.1M]
  ------------------
 6816|      0|        profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, op);
 6817|      0|        profileRequires(loc, EEsProfile, 300, nullptr, op);
 6818|      0|    }
 6819|  11.1M|}
_ZN7glslang13TParseContext19specializationCheckERKNS_10TSourceLocERKNS_5TTypeEPKc:
 6867|      1|{
 6868|      1|    if (type.containsSpecializationSize())
  ------------------
  |  Branch (6868:9): [True: 0, False: 1]
  ------------------
 6869|      0|        error(loc, "can't use with types containing arrays sized with a specialization constant", op, "");
 6870|      1|}
_ZN7glslang13TParseContext15structTypeCheckERKNS_10TSourceLocERNS_11TPublicTypeE:
 6873|    995|{
 6874|    995|    const TTypeList& typeList = *publicType.userDef->getStruct();
 6875|       |
 6876|       |    // fix and check for member storage qualifiers and types that don't belong within a structure
 6877|  5.78k|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (6877:35): [True: 4.78k, False: 995]
  ------------------
 6878|  4.78k|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
 6879|  4.78k|        const TSourceLoc& memberLoc = typeList[member].loc;
 6880|  4.78k|        if (memberQualifier.isAuxiliary() ||
  ------------------
  |  Branch (6880:13): [True: 0, False: 4.78k]
  ------------------
 6881|  4.78k|            memberQualifier.isInterpolation() ||
  ------------------
  |  Branch (6881:13): [True: 0, False: 4.78k]
  ------------------
 6882|  4.78k|            (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal &&
  ------------------
  |  Branch (6882:14): [True: 4.78k, False: 0]
  |  Branch (6882:57): [True: 0, False: 4.78k]
  ------------------
 6883|      0|             !memberQualifier.layoutDescriptorHeap && !memberQualifier.isBufferType()))
  ------------------
  |  Branch (6883:14): [True: 0, False: 0]
  |  Branch (6883:55): [True: 0, False: 0]
  ------------------
 6884|      0|            error(memberLoc, "cannot use storage or interpolation qualifiers on structure members", typeList[member].type->getFieldName().c_str(), "");
 6885|  4.78k|        if (memberQualifier.isMemory())
  ------------------
  |  Branch (6885:13): [True: 0, False: 4.78k]
  ------------------
 6886|      0|            error(memberLoc, "cannot use memory qualifiers on structure members", typeList[member].type->getFieldName().c_str(), "");
 6887|  4.78k|        if (memberQualifier.hasLayout() && !memberQualifier.isBufferType()) {
  ------------------
  |  Branch (6887:13): [True: 0, False: 4.78k]
  |  Branch (6887:44): [True: 0, False: 0]
  ------------------
 6888|      0|            error(memberLoc, "cannot use layout qualifiers on structure members", typeList[member].type->getFieldName().c_str(), "");
 6889|      0|            memberQualifier.clearLayout();
 6890|      0|        }
 6891|  4.78k|        if (memberQualifier.invariant)
  ------------------
  |  Branch (6891:13): [True: 0, False: 4.78k]
  ------------------
 6892|      0|            error(memberLoc, "cannot use invariant qualifier on structure members", typeList[member].type->getFieldName().c_str(), "");
 6893|  4.78k|    }
 6894|    995|}
_ZN7glslang13TParseContext6finishEv:
 7044|  13.1k|{
 7045|  13.1k|    TParseContextBase::finish();
 7046|       |
 7047|  13.1k|    if (parsingBuiltins)
  ------------------
  |  Branch (7047:9): [True: 12.2k, False: 913]
  ------------------
 7048|  12.2k|        return;
 7049|       |
 7050|       |    // Forward builtin alias to AST for later use
 7051|    913|    intermediate.setBuiltinAliasLookup(symbolTable.collectBuiltinAlias());
 7052|       |
 7053|       |    // Check on array indexes for ES 2.0 (version 100) limitations.
 7054|    913|    for (size_t i = 0; i < needsIndexLimitationChecking.size(); ++i)
  ------------------
  |  Branch (7054:24): [True: 0, False: 913]
  ------------------
 7055|      0|        constantIndexExpressionCheck(needsIndexLimitationChecking[i]);
 7056|       |
 7057|       |    // Check for stages that are enabled by extension.
 7058|       |    // Can't do this at the beginning, it is chicken and egg to add a stage by
 7059|       |    // extension.
 7060|       |    // Stage-specific features were correctly tested for already, this is just
 7061|       |    // about the stage itself.
 7062|    913|    switch (language) {
 7063|      0|    case EShLangGeometry:
  ------------------
  |  Branch (7063:5): [True: 0, False: 913]
  ------------------
 7064|      0|        if (isEsProfile() && version == 310)
  ------------------
  |  Branch (7064:13): [True: 0, False: 0]
  |  Branch (7064:30): [True: 0, False: 0]
  ------------------
 7065|      0|            requireExtensions(getCurrentLoc(), Num_AEP_geometry_shader, AEP_geometry_shader, "geometry shaders");
 7066|      0|        break;
 7067|      0|    case EShLangTessControl:
  ------------------
  |  Branch (7067:5): [True: 0, False: 913]
  ------------------
 7068|      0|    case EShLangTessEvaluation:
  ------------------
  |  Branch (7068:5): [True: 0, False: 913]
  ------------------
 7069|      0|        if (isEsProfile() && version == 310)
  ------------------
  |  Branch (7069:13): [True: 0, False: 0]
  |  Branch (7069:30): [True: 0, False: 0]
  ------------------
 7070|      0|            requireExtensions(getCurrentLoc(), Num_AEP_tessellation_shader, AEP_tessellation_shader, "tessellation shaders");
 7071|      0|        else if (!isEsProfile() && version < 400)
  ------------------
  |  Branch (7071:18): [True: 0, False: 0]
  |  Branch (7071:36): [True: 0, False: 0]
  ------------------
 7072|      0|            requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_tessellation_shader, "tessellation shaders");
 7073|      0|        break;
 7074|      0|    case EShLangCompute:
  ------------------
  |  Branch (7074:5): [True: 0, False: 913]
  ------------------
 7075|      0|        if (!isEsProfile() && version < 430)
  ------------------
  |  Branch (7075:13): [True: 0, False: 0]
  |  Branch (7075:31): [True: 0, False: 0]
  ------------------
 7076|      0|            requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders");
 7077|      0|        break;
 7078|      0|    case EShLangTask:
  ------------------
  |  Branch (7078:5): [True: 0, False: 913]
  ------------------
 7079|      0|        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "task shaders");
 7080|      0|        break;
 7081|      0|    case EShLangMesh:
  ------------------
  |  Branch (7081:5): [True: 0, False: 913]
  ------------------
 7082|      0|        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "mesh shaders");
 7083|      0|        break;
 7084|    913|    default:
  ------------------
  |  Branch (7084:5): [True: 913, False: 0]
  ------------------
 7085|    913|        break;
 7086|    913|    }
 7087|       |
 7088|    913|    if (intermediate.IsRequestedExtension(E_GL_KHR_compute_shader_derivatives) &&
  ------------------
  |  Branch (7088:9): [True: 0, False: 913]
  ------------------
 7089|      0|        !khrDerivativeLayoutQualifierSpecified) {
  ------------------
  |  Branch (7089:9): [True: 0, False: 0]
  ------------------
 7090|      0|        error(getCurrentLoc(), "requires one of derivative_group_quadsKHR or derivative_group_linearKHR layout qualifiers",
 7091|      0|              E_GL_KHR_compute_shader_derivatives, "");
 7092|      0|    }
 7093|       |
 7094|    913|    if (intermediate.getLayoutDerivativeModeNone() == LayoutDerivativeGroupQuads) {
  ------------------
  |  Branch (7094:9): [True: 0, False: 913]
  ------------------
 7095|      0|        if ((intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet && (intermediate.getLocalSize(0) & 1)) ||
  ------------------
  |  Branch (7095:14): [True: 0, False: 0]
  |  Branch (7095:80): [True: 0, False: 0]
  ------------------
 7096|      0|            (intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet && (intermediate.getLocalSize(1) & 1)))
  ------------------
  |  Branch (7096:14): [True: 0, False: 0]
  |  Branch (7096:80): [True: 0, False: 0]
  ------------------
 7097|      0|            error(getCurrentLoc(), "requires local_size_x and local_size_y to be multiple of two", "derivative_group_quads", "");
 7098|    913|    } else if (intermediate.getLayoutDerivativeModeNone() == LayoutDerivativeGroupLinear) {
  ------------------
  |  Branch (7098:16): [True: 0, False: 913]
  ------------------
 7099|      0|        if (intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet &&
  ------------------
  |  Branch (7099:13): [True: 0, False: 0]
  ------------------
 7100|      0|            intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet &&
  ------------------
  |  Branch (7100:13): [True: 0, False: 0]
  ------------------
 7101|      0|            intermediate.getLocalSizeSpecId(2) == TQualifier::layoutNotSet &&
  ------------------
  |  Branch (7101:13): [True: 0, False: 0]
  ------------------
 7102|      0|            (intermediate.getLocalSize(0) *
  ------------------
  |  Branch (7102:13): [True: 0, False: 0]
  ------------------
 7103|      0|             intermediate.getLocalSize(1) *
 7104|      0|             intermediate.getLocalSize(2)) % 4 != 0)
 7105|      0|            error(getCurrentLoc(), "requires total group size to be multiple of four", "derivative_group_linear", "");
 7106|      0|    }
 7107|       |
 7108|       |    // Set default outputs for GL_NV_geometry_shader_passthrough
 7109|    913|    if (language == EShLangGeometry && extensionTurnedOn(E_SPV_NV_geometry_shader_passthrough)) {
  ------------------
  |  Branch (7109:9): [True: 0, False: 913]
  |  Branch (7109:40): [True: 0, False: 0]
  ------------------
 7110|      0|        if (intermediate.getOutputPrimitive() == ElgNone) {
  ------------------
  |  Branch (7110:13): [True: 0, False: 0]
  ------------------
 7111|      0|            switch (intermediate.getInputPrimitive()) {
 7112|      0|            case ElgPoints:      intermediate.setOutputPrimitive(ElgPoints);    break;
  ------------------
  |  Branch (7112:13): [True: 0, False: 0]
  ------------------
 7113|      0|            case ElgLines:       intermediate.setOutputPrimitive(ElgLineStrip); break;
  ------------------
  |  Branch (7113:13): [True: 0, False: 0]
  ------------------
 7114|      0|            case ElgTriangles:   intermediate.setOutputPrimitive(ElgTriangleStrip); break;
  ------------------
  |  Branch (7114:13): [True: 0, False: 0]
  ------------------
 7115|      0|            default: break;
  ------------------
  |  Branch (7115:13): [True: 0, False: 0]
  ------------------
 7116|      0|            }
 7117|      0|        }
 7118|      0|        if (intermediate.getVertices() == TQualifier::layoutNotSet) {
  ------------------
  |  Branch (7118:13): [True: 0, False: 0]
  ------------------
 7119|      0|            switch (intermediate.getInputPrimitive()) {
 7120|      0|            case ElgPoints:      intermediate.setVertices(1); break;
  ------------------
  |  Branch (7120:13): [True: 0, False: 0]
  ------------------
 7121|      0|            case ElgLines:       intermediate.setVertices(2); break;
  ------------------
  |  Branch (7121:13): [True: 0, False: 0]
  ------------------
 7122|      0|            case ElgTriangles:   intermediate.setVertices(3); break;
  ------------------
  |  Branch (7122:13): [True: 0, False: 0]
  ------------------
 7123|      0|            default: break;
  ------------------
  |  Branch (7123:13): [True: 0, False: 0]
  ------------------
 7124|      0|            }
 7125|      0|        }
 7126|      0|    }
 7127|    913|}
_ZN7glslang13TParseContext27mergeObjectLayoutQualifiersERNS_10TQualifierERKS1_b:
 8005|  5.26M|{
 8006|  5.26M|    if (src.hasMatrix())
  ------------------
  |  Branch (8006:9): [True: 0, False: 5.26M]
  ------------------
 8007|      0|        dst.layoutMatrix = src.layoutMatrix;
 8008|  5.26M|    if (src.hasPacking())
  ------------------
  |  Branch (8008:9): [True: 0, False: 5.26M]
  ------------------
 8009|      0|        dst.layoutPacking = src.layoutPacking;
 8010|       |
 8011|  5.26M|    if (src.hasStream())
  ------------------
  |  Branch (8011:9): [True: 946, False: 5.26M]
  ------------------
 8012|    946|        dst.layoutStream = src.layoutStream;
 8013|  5.26M|    if (src.hasFormat())
  ------------------
  |  Branch (8013:9): [True: 0, False: 5.26M]
  ------------------
 8014|      0|        dst.layoutFormat = src.layoutFormat;
 8015|  5.26M|    if (src.hasXfbBuffer())
  ------------------
  |  Branch (8015:9): [True: 3.80k, False: 5.26M]
  ------------------
 8016|  3.80k|        dst.layoutXfbBuffer = src.layoutXfbBuffer;
 8017|  5.26M|    if (src.hasBufferReferenceAlign())
  ------------------
  |  Branch (8017:9): [True: 0, False: 5.26M]
  ------------------
 8018|      0|        dst.layoutBufferReferenceAlign = src.layoutBufferReferenceAlign;
 8019|       |
 8020|  5.26M|    if (src.hasAlign())
  ------------------
  |  Branch (8020:9): [True: 0, False: 5.26M]
  ------------------
 8021|      0|        dst.layoutAlign = src.layoutAlign;
 8022|       |
 8023|  5.26M|    if (! inheritOnly) {
  ------------------
  |  Branch (8023:9): [True: 5.25M, False: 13.0k]
  ------------------
 8024|  5.25M|        if (src.hasLocation())
  ------------------
  |  Branch (8024:13): [True: 0, False: 5.25M]
  ------------------
 8025|      0|            dst.layoutLocation = src.layoutLocation;
 8026|  5.25M|        if (src.hasOffset())
  ------------------
  |  Branch (8026:13): [True: 0, False: 5.25M]
  ------------------
 8027|      0|            dst.layoutOffset = src.layoutOffset;
 8028|  5.25M|        if (src.hasSet())
  ------------------
  |  Branch (8028:13): [True: 0, False: 5.25M]
  ------------------
 8029|      0|            dst.layoutSet = src.layoutSet;
 8030|  5.25M|        if (src.hasBinding())
  ------------------
  |  Branch (8030:13): [True: 0, False: 5.25M]
  ------------------
 8031|      0|            dst.layoutBinding = src.layoutBinding;
 8032|       |
 8033|  5.25M|        if (src.hasSpecConstantId())
  ------------------
  |  Branch (8033:13): [True: 0, False: 5.25M]
  ------------------
 8034|      0|            dst.layoutSpecConstantId = src.layoutSpecConstantId;
 8035|       |
 8036|  5.25M|        if (src.hasComponent())
  ------------------
  |  Branch (8036:13): [True: 0, False: 5.25M]
  ------------------
 8037|      0|            dst.layoutComponent = src.layoutComponent;
 8038|  5.25M|        if (src.hasIndex())
  ------------------
  |  Branch (8038:13): [True: 0, False: 5.25M]
  ------------------
 8039|      0|            dst.layoutIndex = src.layoutIndex;
 8040|  5.25M|        if (src.hasXfbStride())
  ------------------
  |  Branch (8040:13): [True: 0, False: 5.25M]
  ------------------
 8041|      0|            dst.layoutXfbStride = src.layoutXfbStride;
 8042|  5.25M|        if (src.hasXfbOffset())
  ------------------
  |  Branch (8042:13): [True: 0, False: 5.25M]
  ------------------
 8043|      0|            dst.layoutXfbOffset = src.layoutXfbOffset;
 8044|  5.25M|        if (src.hasAttachment())
  ------------------
  |  Branch (8044:13): [True: 0, False: 5.25M]
  ------------------
 8045|      0|            dst.layoutAttachment = src.layoutAttachment;
 8046|  5.25M|        if (src.layoutDescriptorHeap)
  ------------------
  |  Branch (8046:13): [True: 0, False: 5.25M]
  ------------------
 8047|      0|            dst.layoutDescriptorHeap = true;
 8048|  5.25M|        if (src.descriptorHeapDescriptorNode)
  ------------------
  |  Branch (8048:13): [True: 0, False: 5.25M]
  ------------------
 8049|      0|            dst.descriptorHeapDescriptorNode = true;
 8050|  5.25M|        if (src.layoutDescriptorStride != TQualifier::layoutDescriptorStrideEnd)
  ------------------
  |  Branch (8050:13): [True: 0, False: 5.25M]
  ------------------
 8051|      0|            dst.layoutDescriptorStride = src.layoutDescriptorStride;
 8052|  5.25M|        if (src.layoutDescriptorSize != TQualifier::layoutDescriptorSizeEnd)
  ------------------
  |  Branch (8052:13): [True: 0, False: 5.25M]
  ------------------
 8053|      0|            dst.layoutDescriptorSize = src.layoutDescriptorSize;
 8054|  5.25M|        if (src.layoutHeapOffset != 0)
  ------------------
  |  Branch (8054:13): [True: 0, False: 5.25M]
  ------------------
 8055|      0|            dst.layoutHeapOffset = src.layoutHeapOffset;
 8056|  5.25M|        if (src.layoutHeapOffsetNode != nullptr)
  ------------------
  |  Branch (8056:13): [True: 0, False: 5.25M]
  ------------------
 8057|      0|            dst.layoutHeapOffsetNode = src.layoutHeapOffsetNode;
 8058|  5.25M|        if (src.layoutPushConstant)
  ------------------
  |  Branch (8058:13): [True: 0, False: 5.25M]
  ------------------
 8059|      0|            dst.layoutPushConstant = true;
 8060|       |
 8061|  5.25M|        if (src.layoutBufferReference)
  ------------------
  |  Branch (8061:13): [True: 0, False: 5.25M]
  ------------------
 8062|      0|            dst.layoutBufferReference = true;
 8063|  5.25M|        if (src.layoutDescriptorBufferType)
  ------------------
  |  Branch (8063:13): [True: 0, False: 5.25M]
  ------------------
 8064|      0|            dst.layoutDescriptorBufferType = true;
 8065|       |
 8066|  5.25M|        if (src.layoutPassthrough)
  ------------------
  |  Branch (8066:13): [True: 0, False: 5.25M]
  ------------------
 8067|      0|            dst.layoutPassthrough = true;
 8068|  5.25M|        if (src.layoutViewportRelative)
  ------------------
  |  Branch (8068:13): [True: 0, False: 5.25M]
  ------------------
 8069|      0|            dst.layoutViewportRelative = true;
 8070|  5.25M|        if (src.layoutSecondaryViewportRelativeOffset != -2048)
  ------------------
  |  Branch (8070:13): [True: 0, False: 5.25M]
  ------------------
 8071|      0|            dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
 8072|  5.25M|        if (src.layoutShaderRecord)
  ------------------
  |  Branch (8072:13): [True: 0, False: 5.25M]
  ------------------
 8073|      0|            dst.layoutShaderRecord = true;
 8074|  5.25M|        if (src.layoutFullQuads)
  ------------------
  |  Branch (8074:13): [True: 0, False: 5.25M]
  ------------------
 8075|      0|            dst.layoutFullQuads = true;
 8076|  5.25M|        if (src.layoutQuadDeriv)
  ------------------
  |  Branch (8076:13): [True: 0, False: 5.25M]
  ------------------
 8077|      0|            dst.layoutQuadDeriv = true;
 8078|  5.25M|        if (src.layoutBindlessSampler)
  ------------------
  |  Branch (8078:13): [True: 0, False: 5.25M]
  ------------------
 8079|      0|            dst.layoutBindlessSampler = true;
 8080|  5.25M|        if (src.layoutBindlessImage)
  ------------------
  |  Branch (8080:13): [True: 0, False: 5.25M]
  ------------------
 8081|      0|            dst.layoutBindlessImage = true;
 8082|  5.25M|        if (src.pervertexNV)
  ------------------
  |  Branch (8082:13): [True: 0, False: 5.25M]
  ------------------
 8083|      0|            dst.pervertexNV = true;
 8084|  5.25M|        if (src.pervertexEXT)
  ------------------
  |  Branch (8084:13): [True: 0, False: 5.25M]
  ------------------
 8085|      0|            dst.pervertexEXT = true;
 8086|  5.25M|        if (src.layoutHitObjectShaderRecordNV)
  ------------------
  |  Branch (8086:13): [True: 0, False: 5.25M]
  ------------------
 8087|      0|            dst.layoutHitObjectShaderRecordNV = true;
 8088|  5.25M|        dst.layoutTileAttachmentQCOM |= src.layoutTileAttachmentQCOM;
 8089|  5.25M|        if (src.layoutHitObjectShaderRecordEXT)
  ------------------
  |  Branch (8089:13): [True: 0, False: 5.25M]
  ------------------
 8090|      0|            dst.layoutHitObjectShaderRecordEXT = true;
 8091|  5.25M|        if (src.hasBank())
  ------------------
  |  Branch (8091:13): [True: 0, False: 5.25M]
  ------------------
 8092|      0|            dst.layoutBank = src.layoutBank;
 8093|  5.25M|        if (src.hasMemberOffset())
  ------------------
  |  Branch (8093:13): [True: 0, False: 5.25M]
  ------------------
 8094|      0|            dst.layoutMemberOffset = src.layoutMemberOffset;
 8095|  5.25M|    }
 8096|  5.26M|}
_ZN7glslang13TParseContext17layoutObjectCheckERKNS_10TSourceLocERKNS_7TSymbolE:
 8100|   427k|{
 8101|   427k|    const TType& type = symbol.getType();
 8102|   427k|    const TQualifier& qualifier = type.getQualifier();
 8103|       |
 8104|       |    // first, cross check WRT to just the type
 8105|   427k|    layoutTypeCheck(loc, type);
 8106|       |
 8107|       |    // now, any remaining error checking based on the object itself
 8108|       |
 8109|   427k|    if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (8109:9): [True: 0, False: 427k]
  ------------------
 8110|      0|        switch (qualifier.storage) {
 8111|      0|        case EvqUniform:
  ------------------
  |  Branch (8111:9): [True: 0, False: 0]
  ------------------
 8112|      0|        case EvqBuffer:
  ------------------
  |  Branch (8112:9): [True: 0, False: 0]
  ------------------
 8113|      0|            if (symbol.getAsVariable() == nullptr)
  ------------------
  |  Branch (8113:17): [True: 0, False: 0]
  ------------------
 8114|      0|                error(loc, "can only be used on variable declaration", "location", "");
 8115|      0|            break;
 8116|      0|        default:
  ------------------
  |  Branch (8116:9): [True: 0, False: 0]
  ------------------
 8117|      0|            break;
 8118|      0|        }
 8119|      0|    }
 8120|       |
 8121|       |    // user-variable location check, which are required for SPIR-V in/out:
 8122|       |    //  - variables have it directly,
 8123|       |    //  - blocks have it on each member (already enforced), so check first one
 8124|   427k|    if (spvVersion.spv > 0 && !parsingBuiltins && qualifier.builtIn == EbvNone &&
  ------------------
  |  Branch (8124:9): [True: 397k, False: 29.5k]
  |  Branch (8124:31): [True: 2, False: 397k]
  |  Branch (8124:51): [True: 2, False: 0]
  ------------------
 8125|      2|        !qualifier.hasLocation() && !intermediate.getAutoMapLocations()) {
  ------------------
  |  Branch (8125:9): [True: 2, False: 0]
  |  Branch (8125:37): [True: 2, False: 0]
  ------------------
 8126|       |
 8127|      2|        switch (qualifier.storage) {
 8128|      0|        case EvqVaryingIn:
  ------------------
  |  Branch (8128:9): [True: 0, False: 2]
  ------------------
 8129|      0|        case EvqVaryingOut:
  ------------------
  |  Branch (8129:9): [True: 0, False: 2]
  ------------------
 8130|      0|            if (!type.getQualifier().isTaskMemory() && !type.getQualifier().hasSpirvDecorate() &&
  ------------------
  |  Branch (8130:17): [True: 0, False: 0]
  |  Branch (8130:56): [True: 0, False: 0]
  ------------------
 8131|      0|                (type.getBasicType() != EbtBlock ||
  ------------------
  |  Branch (8131:18): [True: 0, False: 0]
  ------------------
 8132|      0|                 (type.getStruct()->size() > 0 &&
  ------------------
  |  Branch (8132:19): [True: 0, False: 0]
  ------------------
 8133|      0|                  !(*type.getStruct())[0].type->getQualifier().hasLocation() &&
  ------------------
  |  Branch (8133:19): [True: 0, False: 0]
  ------------------
 8134|      0|                   (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone)))
  ------------------
  |  Branch (8134:20): [True: 0, False: 0]
  ------------------
 8135|      0|                error(loc, "SPIR-V requires location for user input/output", "location", "");
 8136|      0|            break;
 8137|      2|        default:
  ------------------
  |  Branch (8137:9): [True: 2, False: 0]
  ------------------
 8138|      2|            break;
 8139|      2|        }
 8140|      2|    }
 8141|       |
 8142|       |    // Check packing and matrix
 8143|   427k|    if (qualifier.hasUniformLayout()) {
  ------------------
  |  Branch (8143:9): [True: 0, False: 427k]
  ------------------
 8144|      0|        switch (qualifier.storage) {
 8145|      0|        case EvqUniform:
  ------------------
  |  Branch (8145:9): [True: 0, False: 0]
  ------------------
 8146|      0|        case EvqBuffer:
  ------------------
  |  Branch (8146:9): [True: 0, False: 0]
  ------------------
 8147|      0|            if (type.getBasicType() != EbtBlock) {
  ------------------
  |  Branch (8147:17): [True: 0, False: 0]
  ------------------
 8148|      0|                if (qualifier.hasMatrix())
  ------------------
  |  Branch (8148:21): [True: 0, False: 0]
  ------------------
 8149|      0|                    error(loc, "cannot specify matrix layout on a variable declaration", "layout", "");
 8150|      0|                if (qualifier.hasPacking())
  ------------------
  |  Branch (8150:21): [True: 0, False: 0]
  ------------------
 8151|      0|                    error(loc, "cannot specify packing on a variable declaration", "layout", "");
 8152|       |                // "The offset qualifier can only be used on block members of blocks..."
 8153|      0|                if (qualifier.hasOffset() && !type.isAtomic())
  ------------------
  |  Branch (8153:21): [True: 0, False: 0]
  |  Branch (8153:46): [True: 0, False: 0]
  ------------------
 8154|      0|                    error(loc, "cannot specify on a variable declaration", "offset", "");
 8155|       |                // "The align qualifier can only be used on blocks or block members..."
 8156|      0|                if (qualifier.hasAlign())
  ------------------
  |  Branch (8156:21): [True: 0, False: 0]
  ------------------
 8157|      0|                    error(loc, "cannot specify on a variable declaration", "align", "");
 8158|      0|                if (qualifier.isPushConstant())
  ------------------
  |  Branch (8158:21): [True: 0, False: 0]
  ------------------
 8159|      0|                    error(loc, "can only specify on a uniform block", "push_constant", "");
 8160|      0|                if (qualifier.isShaderRecord())
  ------------------
  |  Branch (8160:21): [True: 0, False: 0]
  ------------------
 8161|      0|                    error(loc, "can only specify on a buffer block", "shaderRecordNV", "");
 8162|      0|                if (qualifier.hasLocation() && type.isAtomic())
  ------------------
  |  Branch (8162:21): [True: 0, False: 0]
  |  Branch (8162:48): [True: 0, False: 0]
  ------------------
 8163|      0|                    error(loc, "cannot specify on atomic counter", "location", "");
 8164|      0|            }
 8165|      0|            break;
 8166|      0|        default:
  ------------------
  |  Branch (8166:9): [True: 0, False: 0]
  ------------------
 8167|       |            // these were already filtered by layoutTypeCheck() (or its callees)
 8168|      0|            break;
 8169|      0|        }
 8170|      0|    }
 8171|       |
 8172|       |    // Check that an in/out variable or block doesn't contain a boolean member
 8173|       |    // Don't enforce if redeclaring a builtin, which are allowed to contain bool
 8174|   427k|    if (!parsingBuiltins && type.containsBasicType(EbtBool) && !builtInName(symbol.getName())) {
  ------------------
  |  Branch (8174:9): [True: 2, False: 427k]
  |  Branch (8174:29): [True: 0, False: 2]
  |  Branch (8174:64): [True: 0, False: 0]
  ------------------
 8175|      0|        switch(qualifier.storage) {
 8176|      0|        case EvqVaryingIn:
  ------------------
  |  Branch (8176:9): [True: 0, False: 0]
  ------------------
 8177|      0|        case EvqVaryingOut:
  ------------------
  |  Branch (8177:9): [True: 0, False: 0]
  ------------------
 8178|      0|        {
 8179|      0|            const char *reason = type.getBasicType() == EbtBool ? "cannot be bool" : "cannot contain bool";
  ------------------
  |  Branch (8179:34): [True: 0, False: 0]
  ------------------
 8180|      0|            error(loc, reason, GetStorageQualifierString(qualifier.storage), "");
 8181|      0|            break;
 8182|      0|        }
 8183|      0|        default:
  ------------------
  |  Branch (8183:9): [True: 0, False: 0]
  ------------------
 8184|      0|            break;
 8185|      0|        }
 8186|      0|    }
 8187|   427k|}
_ZN7glslang13TParseContext30layoutMemberLocationArrayCheckERKNS_10TSourceLocEbPNS_11TArraySizesE:
 8198|  6.53k|{
 8199|  6.53k|    if (memberWithLocation && arraySizes != nullptr) {
  ------------------
  |  Branch (8199:9): [True: 0, False: 6.53k]
  |  Branch (8199:31): [True: 0, False: 0]
  ------------------
 8200|      0|        if (arraySizes->getNumDims() > (currentBlockQualifier.isArrayedIo(language) ? 1 : 0))
  ------------------
  |  Branch (8200:13): [True: 0, False: 0]
  |  Branch (8200:41): [True: 0, False: 0]
  ------------------
 8201|      0|            error(loc, "cannot use in a block array where new locations are needed for each block element",
 8202|      0|                       "location", "");
 8203|      0|    }
 8204|  6.53k|}
_ZN7glslang13TParseContext15layoutTypeCheckERKNS_10TSourceLocERKNS_5TTypeE:
 8208|   454k|{
 8209|   454k|    const TQualifier& qualifier = type.getQualifier();
 8210|       |
 8211|       |    // first, intra-layout qualifier-only error checking
 8212|   454k|    layoutQualifierCheck(loc, qualifier);
 8213|       |
 8214|       |    // now, error checking combining type and qualifier
 8215|       |
 8216|   454k|    if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (8216:9): [True: 0, False: 454k]
  ------------------
 8217|      0|        if (qualifier.hasLocation()) {
  ------------------
  |  Branch (8217:13): [True: 0, False: 0]
  ------------------
 8218|      0|            if (qualifier.storage == EvqVaryingOut && language == EShLangFragment) {
  ------------------
  |  Branch (8218:17): [True: 0, False: 0]
  |  Branch (8218:55): [True: 0, False: 0]
  ------------------
 8219|      0|                if (qualifier.layoutLocation >= (unsigned int)resources.maxDrawBuffers)
  ------------------
  |  Branch (8219:21): [True: 0, False: 0]
  ------------------
 8220|      0|                    error(loc, "too large for fragment output", "location", "");
 8221|      0|            }
 8222|      0|        }
 8223|      0|        if (qualifier.hasComponent()) {
  ------------------
  |  Branch (8223:13): [True: 0, False: 0]
  ------------------
 8224|       |            // "It is a compile-time error if this sequence of components gets larger than 3."
 8225|      0|            if (qualifier.layoutComponent + type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1) > 4)
  ------------------
  |  Branch (8225:17): [True: 0, False: 0]
  |  Branch (8225:69): [True: 0, False: 0]
  ------------------
 8226|      0|                error(loc, "type overflows the available 4 components", "component", "");
 8227|       |
 8228|       |            // "It is a compile-time error to apply the component qualifier to a matrix, a structure, a block, or an array containing any of these."
 8229|      0|            if (type.isMatrix() || type.getBasicType() == EbtBlock || type.getBasicType() == EbtStruct)
  ------------------
  |  Branch (8229:17): [True: 0, False: 0]
  |  Branch (8229:36): [True: 0, False: 0]
  |  Branch (8229:71): [True: 0, False: 0]
  ------------------
 8230|      0|                error(loc, "cannot apply to a matrix, structure, or block", "component", "");
 8231|       |
 8232|       |            // " It is a compile-time error to use component 1 or 3 as the beginning of a double or dvec2."
 8233|      0|            if (type.getBasicType() == EbtDouble)
  ------------------
  |  Branch (8233:17): [True: 0, False: 0]
  ------------------
 8234|      0|                if (qualifier.layoutComponent & 1)
  ------------------
  |  Branch (8234:21): [True: 0, False: 0]
  ------------------
 8235|      0|                    error(loc, "doubles cannot start on an odd-numbered component", "component", "");
 8236|      0|        }
 8237|       |
 8238|      0|        switch (qualifier.storage) {
 8239|      0|        case EvqVaryingIn:
  ------------------
  |  Branch (8239:9): [True: 0, False: 0]
  ------------------
 8240|      0|        case EvqVaryingOut:
  ------------------
  |  Branch (8240:9): [True: 0, False: 0]
  ------------------
 8241|      0|            if (type.getBasicType() == EbtBlock)
  ------------------
  |  Branch (8241:17): [True: 0, False: 0]
  ------------------
 8242|      0|                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "location qualifier on in/out block");
 8243|      0|            if (type.getQualifier().isTaskMemory())
  ------------------
  |  Branch (8243:17): [True: 0, False: 0]
  ------------------
 8244|      0|                error(loc, "cannot apply to taskNV in/out blocks", "location", "");
 8245|      0|            break;
 8246|      0|        case EvqUniform:
  ------------------
  |  Branch (8246:9): [True: 0, False: 0]
  ------------------
 8247|      0|        case EvqBuffer:
  ------------------
  |  Branch (8247:9): [True: 0, False: 0]
  ------------------
 8248|      0|            if (type.getBasicType() == EbtBlock)
  ------------------
  |  Branch (8248:17): [True: 0, False: 0]
  ------------------
 8249|      0|                error(loc, "cannot apply to uniform or buffer block", "location", "");
 8250|      0|            else if (type.getBasicType() == EbtSampler && type.getSampler().isAttachmentEXT())
  ------------------
  |  Branch (8250:22): [True: 0, False: 0]
  |  Branch (8250:59): [True: 0, False: 0]
  ------------------
 8251|      0|                error(loc, "only applies to", "location", "%s with storage tileImageEXT", type.getBasicTypeString().c_str());
 8252|      0|            break;
 8253|      0|        case EvqtaskPayloadSharedEXT:
  ------------------
  |  Branch (8253:9): [True: 0, False: 0]
  ------------------
 8254|      0|            error(loc, "cannot apply to taskPayloadSharedEXT", "location", "");
 8255|      0|            break;
 8256|      0|        case EvqPayload:
  ------------------
  |  Branch (8256:9): [True: 0, False: 0]
  ------------------
 8257|      0|        case EvqPayloadIn:
  ------------------
  |  Branch (8257:9): [True: 0, False: 0]
  ------------------
 8258|      0|        case EvqHitAttr:
  ------------------
  |  Branch (8258:9): [True: 0, False: 0]
  ------------------
 8259|      0|        case EvqCallableData:
  ------------------
  |  Branch (8259:9): [True: 0, False: 0]
  ------------------
 8260|      0|        case EvqCallableDataIn:
  ------------------
  |  Branch (8260:9): [True: 0, False: 0]
  ------------------
 8261|      0|        case EvqHitObjectAttrNV:
  ------------------
  |  Branch (8261:9): [True: 0, False: 0]
  ------------------
 8262|      0|        case EvqHitObjectAttrEXT:
  ------------------
  |  Branch (8262:9): [True: 0, False: 0]
  ------------------
 8263|      0|        case EvqSpirvStorageClass:
  ------------------
  |  Branch (8263:9): [True: 0, False: 0]
  ------------------
 8264|      0|            break;
 8265|      0|        case EvqTileImageEXT:
  ------------------
  |  Branch (8265:9): [True: 0, False: 0]
  ------------------
 8266|      0|            break;
 8267|      0|        default:
  ------------------
  |  Branch (8267:9): [True: 0, False: 0]
  ------------------
 8268|      0|            error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", "");
 8269|      0|            break;
 8270|      0|        }
 8271|       |
 8272|      0|        bool typeCollision;
 8273|      0|        int repeated = intermediate.addUsedLocation(qualifier, type, typeCollision);
 8274|      0|        if (repeated >= 0 && ! typeCollision)
  ------------------
  |  Branch (8274:13): [True: 0, False: 0]
  |  Branch (8274:30): [True: 0, False: 0]
  ------------------
 8275|      0|            error(loc, "overlapping use of location", "location", "%d", repeated);
 8276|       |        // When location aliasing, the aliases sharing the location must have the same underlying numerical type and bit width(
 8277|       |        // floating - point or integer, 32 - bit versus 64 - bit,etc.)
 8278|      0|        if (typeCollision && (qualifier.isPipeInput() || qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT))
  ------------------
  |  Branch (8278:13): [True: 0, False: 0]
  |  Branch (8278:31): [True: 0, False: 0]
  |  Branch (8278:58): [True: 0, False: 0]
  |  Branch (8278:86): [True: 0, False: 0]
  ------------------
 8279|      0|            error(loc, "the aliases sharing the location", "location", "%d must be the same basic type and interpolation qualification", repeated);
 8280|      0|    }
 8281|       |
 8282|   454k|    if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) {
  ------------------
  |  Branch (8282:9): [True: 0, False: 454k]
  |  Branch (8282:37): [True: 0, False: 0]
  ------------------
 8283|      0|        if (type.isUnsizedArray()) {
  ------------------
  |  Branch (8283:13): [True: 0, False: 0]
  ------------------
 8284|      0|            error(loc, "unsized array", "xfb_offset", "in buffer %d", qualifier.layoutXfbBuffer);
 8285|      0|        } else {
 8286|      0|            int repeated = intermediate.addXfbBufferOffset(type);
 8287|      0|            if (repeated >= 0)
  ------------------
  |  Branch (8287:17): [True: 0, False: 0]
  ------------------
 8288|      0|                error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer);
 8289|      0|        }
 8290|       |
 8291|       |        // "The offset must be a multiple of the size of the first component of the first
 8292|       |        // qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate
 8293|       |        // containing a double or 64-bit integer, the offset must also be a multiple of 8..."
 8294|      0|        if ((type.containsBasicType(EbtDouble) || type.containsBasicType(EbtInt64) || type.containsBasicType(EbtUint64)) &&
  ------------------
  |  Branch (8294:14): [True: 0, False: 0]
  |  Branch (8294:51): [True: 0, False: 0]
  |  Branch (8294:87): [True: 0, False: 0]
  ------------------
 8295|      0|            ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
  ------------------
  |  Branch (8295:13): [True: 0, False: 0]
  ------------------
 8296|      0|            error(loc, "type contains double or 64-bit integer; xfb_offset must be a multiple of 8", "xfb_offset", "");
 8297|      0|        else if ((type.containsBasicType(EbtBool) || type.containsBasicType(EbtFloat) ||
  ------------------
  |  Branch (8297:19): [True: 0, False: 0]
  |  Branch (8297:54): [True: 0, False: 0]
  ------------------
 8298|      0|                  type.containsBasicType(EbtInt) || type.containsBasicType(EbtUint)) &&
  ------------------
  |  Branch (8298:19): [True: 0, False: 0]
  |  Branch (8298:53): [True: 0, False: 0]
  ------------------
 8299|      0|                 ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
  ------------------
  |  Branch (8299:18): [True: 0, False: 0]
  ------------------
 8300|      0|            error(loc, "must be a multiple of size of first component", "xfb_offset", "");
 8301|       |        // ..., if applied to an aggregate containing a half float or 16-bit integer, the offset must also be a multiple of 2..."
 8302|      0|        else if ((type.contains16BitFloat() || type.containsBasicType(EbtInt16) || type.containsBasicType(EbtUint16)) &&
  ------------------
  |  Branch (8302:19): [True: 0, False: 0]
  |  Branch (8302:48): [True: 0, False: 0]
  |  Branch (8302:84): [True: 0, False: 0]
  ------------------
 8303|      0|                 !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
  ------------------
  |  Branch (8303:18): [True: 0, False: 0]
  ------------------
 8304|      0|            error(loc, "type contains half float or 16-bit integer; xfb_offset must be a multiple of 2", "xfb_offset", "");
 8305|      0|    }
 8306|   454k|    if (qualifier.hasXfbStride() && qualifier.hasXfbBuffer()) {
  ------------------
  |  Branch (8306:9): [True: 0, False: 454k]
  |  Branch (8306:37): [True: 0, False: 0]
  ------------------
 8307|      0|        if (! intermediate.setXfbBufferStride(qualifier.layoutXfbBuffer, qualifier.layoutXfbStride))
  ------------------
  |  Branch (8307:13): [True: 0, False: 0]
  ------------------
 8308|      0|            error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer);
 8309|      0|    }
 8310|       |
 8311|   454k|    if (qualifier.hasBinding()) {
  ------------------
  |  Branch (8311:9): [True: 0, False: 454k]
  ------------------
 8312|       |        // Binding checking, from the spec:
 8313|       |        //
 8314|       |        // "If the binding point for any uniform or shader storage block instance is less than zero, or greater than or
 8315|       |        // equal to the implementation-dependent maximum number of uniform buffer bindings, a compile-time
 8316|       |        // error will occur. When the binding identifier is used with a uniform or shader storage block instanced as
 8317|       |        // an array of size N, all elements of the array from binding through binding + N - 1 must be within this
 8318|       |        // range."
 8319|       |        //
 8320|      0|        if (!type.isOpaque() && type.getBasicType() != EbtBlock && type.getBasicType() != EbtSpirvType)
  ------------------
  |  Branch (8320:13): [True: 0, False: 0]
  |  Branch (8320:33): [True: 0, False: 0]
  |  Branch (8320:68): [True: 0, False: 0]
  ------------------
 8321|      0|            error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", "");
 8322|      0|        if (type.getBasicType() == EbtSampler) {
  ------------------
  |  Branch (8322:13): [True: 0, False: 0]
  ------------------
 8323|      0|            int lastBinding = qualifier.layoutBinding;
 8324|      0|            if (type.isArray()) {
  ------------------
  |  Branch (8324:17): [True: 0, False: 0]
  ------------------
 8325|      0|                if (spvVersion.vulkan == 0) {
  ------------------
  |  Branch (8325:21): [True: 0, False: 0]
  ------------------
 8326|      0|                    if (type.isSizedArray())
  ------------------
  |  Branch (8326:25): [True: 0, False: 0]
  ------------------
 8327|      0|                        lastBinding += (type.getCumulativeArraySize() - 1);
 8328|      0|                    else {
 8329|      0|                        warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
 8330|      0|                    }
 8331|      0|                }
 8332|      0|            }
 8333|      0|            if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
  ------------------
  |  Branch (8333:17): [True: 0, False: 0]
  |  Branch (8333:43): [True: 0, False: 0]
  ------------------
 8334|      0|                error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
  ------------------
  |  Branch (8334:104): [True: 0, False: 0]
  ------------------
 8335|      0|        }
 8336|      0|        if (type.isAtomic() && !spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (8336:13): [True: 0, False: 0]
  |  Branch (8336:32): [True: 0, False: 0]
  ------------------
 8337|      0|            if (qualifier.layoutBinding >= resources.maxAtomicCounterBindings) {
  ------------------
  |  Branch (8337:17): [True: 0, False: 0]
  ------------------
 8338|      0|                error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", "");
 8339|      0|                return;
 8340|      0|            }
 8341|      0|        }
 8342|   454k|    } else if (!intermediate.getAutoMapBindings()) {
  ------------------
  |  Branch (8342:16): [True: 454k, False: 0]
  ------------------
 8343|       |        // some types require bindings
 8344|       |
 8345|       |        // atomic_uint
 8346|   454k|        if (type.isAtomic())
  ------------------
  |  Branch (8346:13): [True: 0, False: 454k]
  ------------------
 8347|      0|            error(loc, "layout(binding=X) is required", "atomic_uint", "");
 8348|       |
 8349|       |        // SPIR-V
 8350|   454k|        if (spvVersion.spv > 0) {
  ------------------
  |  Branch (8350:13): [True: 422k, False: 32.2k]
  ------------------
 8351|   422k|            if (qualifier.isUniformOrBuffer() && !intermediate.IsRequestedExtension(E_GL_EXT_descriptor_heap)) {
  ------------------
  |  Branch (8351:17): [True: 5.44k, False: 416k]
  |  Branch (8351:50): [True: 5.44k, False: 0]
  ------------------
 8352|  5.44k|                if (type.getBasicType() == EbtBlock && !qualifier.isPushConstant() &&
  ------------------
  |  Branch (8352:21): [True: 0, False: 5.44k]
  |  Branch (8352:56): [True: 0, False: 0]
  ------------------
 8353|      0|                       !qualifier.isShaderRecord() &&
  ------------------
  |  Branch (8353:24): [True: 0, False: 0]
  ------------------
 8354|      0|                       !qualifier.hasAttachment() &&
  ------------------
  |  Branch (8354:24): [True: 0, False: 0]
  ------------------
 8355|      0|                       !qualifier.hasBufferReference())
  ------------------
  |  Branch (8355:24): [True: 0, False: 0]
  ------------------
 8356|      0|                    error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
 8357|  5.44k|                else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler && !type.getSampler().isAttachmentEXT())
  ------------------
  |  Branch (8357:26): [True: 0, False: 5.44k]
  |  Branch (8357:51): [True: 0, False: 0]
  |  Branch (8357:88): [True: 0, False: 0]
  ------------------
 8358|      0|                    error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
 8359|  5.44k|            }
 8360|   422k|        }
 8361|   454k|    }
 8362|       |
 8363|       |    // some things can't have arrays of arrays
 8364|   454k|    if (type.isArrayOfArrays()) {
  ------------------
  |  Branch (8364:9): [True: 1.34k, False: 453k]
  ------------------
 8365|  1.34k|        if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (8365:13): [True: 159, False: 1.18k]
  ------------------
 8366|    159|            if (type.isOpaque() || (type.getQualifier().isUniformOrBuffer() && type.getBasicType() == EbtBlock))
  ------------------
  |  Branch (8366:17): [True: 0, False: 159]
  |  Branch (8366:37): [True: 0, False: 159]
  |  Branch (8366:80): [True: 0, False: 0]
  ------------------
 8367|      0|                warn(loc, "Generating SPIR-V array-of-arrays, but Vulkan only supports single array level for this resource", "[][]", "");
 8368|    159|        }
 8369|  1.34k|    }
 8370|       |
 8371|       |    // "The offset qualifier can only be used on block members of blocks..."
 8372|   454k|    if (qualifier.hasOffset()) {
  ------------------
  |  Branch (8372:9): [True: 0, False: 454k]
  ------------------
 8373|      0|        if (type.getBasicType() == EbtBlock)
  ------------------
  |  Branch (8373:13): [True: 0, False: 0]
  ------------------
 8374|      0|            error(loc, "only applies to block members, not blocks", "offset", "");
 8375|      0|    }
 8376|       |
 8377|       |    // Image format
 8378|   454k|    if (qualifier.hasFormat()) {
  ------------------
  |  Branch (8378:9): [True: 0, False: 454k]
  ------------------
 8379|      0|        if (! type.isImage() && !intermediate.getBindlessImageMode())
  ------------------
  |  Branch (8379:13): [True: 0, False: 0]
  |  Branch (8379:33): [True: 0, False: 0]
  ------------------
 8380|      0|            error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8381|      0|        else {
 8382|      0|            if (type.getSampler().type == EbtFloat && qualifier.getFormat() > ElfFloatGuard)
  ------------------
  |  Branch (8382:17): [True: 0, False: 0]
  |  Branch (8382:55): [True: 0, False: 0]
  ------------------
 8383|      0|                error(loc, "does not apply to floating point images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8384|      0|            if (type.getSampler().type == EbtInt && (qualifier.getFormat() < ElfFloatGuard || qualifier.getFormat() > ElfIntGuard))
  ------------------
  |  Branch (8384:17): [True: 0, False: 0]
  |  Branch (8384:54): [True: 0, False: 0]
  |  Branch (8384:95): [True: 0, False: 0]
  ------------------
 8385|      0|                error(loc, "does not apply to signed integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8386|      0|            if (type.getSampler().type == EbtUint && qualifier.getFormat() < ElfIntGuard)
  ------------------
  |  Branch (8386:17): [True: 0, False: 0]
  |  Branch (8386:54): [True: 0, False: 0]
  ------------------
 8387|      0|                error(loc, "does not apply to unsigned integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8388|       |
 8389|      0|            if (isEsProfile()) {
  ------------------
  |  Branch (8389:17): [True: 0, False: 0]
  ------------------
 8390|       |                // "Except for image variables qualified with the format qualifiers r32f, r32i, and r32ui, image variables must
 8391|       |                // specify either memory qualifier readonly or the memory qualifier writeonly."
 8392|      0|                if (! (qualifier.getFormat() == ElfR32f || qualifier.getFormat() == ElfR32i || qualifier.getFormat() == ElfR32ui)) {
  ------------------
  |  Branch (8392:24): [True: 0, False: 0]
  |  Branch (8392:60): [True: 0, False: 0]
  |  Branch (8392:96): [True: 0, False: 0]
  ------------------
 8393|      0|                    if (! qualifier.isReadOnly() && ! qualifier.isWriteOnly())
  ------------------
  |  Branch (8393:25): [True: 0, False: 0]
  |  Branch (8393:53): [True: 0, False: 0]
  ------------------
 8394|      0|                        error(loc, "format requires readonly or writeonly memory qualifier", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8395|      0|                }
 8396|      0|            }
 8397|      0|        }
 8398|   454k|    } else if (type.isImage() && ! qualifier.isWriteOnly() && !intermediate.getBindlessImageMode()) {
  ------------------
  |  Branch (8398:16): [True: 0, False: 454k]
  |  Branch (8398:34): [True: 0, False: 0]
  |  Branch (8398:63): [True: 0, False: 0]
  ------------------
 8399|      0|        const char *explanation = "image variables not declared 'writeonly' and without a format layout qualifier";
 8400|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation);
 8401|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
 8402|      0|    }
 8403|       |
 8404|   454k|    if (qualifier.isPushConstant()) {
  ------------------
  |  Branch (8404:9): [True: 0, False: 454k]
  ------------------
 8405|      0|        if (type.getBasicType() != EbtBlock)
  ------------------
  |  Branch (8405:13): [True: 0, False: 0]
  ------------------
 8406|      0|            error(loc, "can only be used with a block", "push_constant", "");
 8407|      0|        if (type.isArray())
  ------------------
  |  Branch (8407:13): [True: 0, False: 0]
  ------------------
 8408|      0|            error(loc, "Push constants blocks can't be an array", "push_constant", "");
 8409|      0|    }
 8410|       |
 8411|   454k|    if (type.getBasicType() == EbtReference) {
  ------------------
  |  Branch (8411:9): [True: 0, False: 454k]
  ------------------
 8412|      0|        if (qualifier.isPipeInput())
  ------------------
  |  Branch (8412:13): [True: 0, False: 0]
  ------------------
 8413|      0|            error(loc, "cannot contain any structs with buffer_reference.", "in",
 8414|      0|                  "If you want to interface shader stages with a buffer_reference cast to a uint64 or uvec2 instead.");
 8415|      0|        if (qualifier.isPipeOutput())
  ------------------
  |  Branch (8415:13): [True: 0, False: 0]
  ------------------
 8416|      0|            error(loc, "cannot contain any structs with buffer_reference.", "out",
 8417|      0|                  "If you want to interface shader stages with a buffer_reference cast to a uint64 or uvec2 instead.");
 8418|      0|    }
 8419|       |
 8420|   454k|    if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock)
  ------------------
  |  Branch (8420:9): [True: 0, False: 454k]
  |  Branch (8420:43): [True: 0, False: 0]
  ------------------
 8421|      0|        error(loc, "can only be used with a block", "buffer_reference", "");
 8422|       |
 8423|   454k|    if (qualifier.isShaderRecord() && type.getBasicType() != EbtBlock)
  ------------------
  |  Branch (8423:9): [True: 0, False: 454k]
  |  Branch (8423:39): [True: 0, False: 0]
  ------------------
 8424|      0|        error(loc, "can only be used with a block", "shaderRecordNV", "");
 8425|       |
 8426|       |    // input attachment
 8427|   454k|    if (type.isSubpass()) {
  ------------------
  |  Branch (8427:9): [True: 0, False: 454k]
  ------------------
 8428|      0|        if (extensionTurnedOn(E_GL_EXT_shader_tile_image))
  ------------------
  |  Branch (8428:13): [True: 0, False: 0]
  ------------------
 8429|      0|            error(loc, "cannot be used with GL_EXT_shader_tile_image enabled", type.getSampler().getString().c_str(),
 8430|      0|                  "");
 8431|      0|        if (!qualifier.hasAttachment() && (type.isArray() || !extensionTurnedOn(E_GL_EXT_optional_input_attachment_index)))
  ------------------
  |  Branch (8431:13): [True: 0, False: 0]
  |  Branch (8431:44): [True: 0, False: 0]
  |  Branch (8431:62): [True: 0, False: 0]
  ------------------
 8432|      0|            error(loc, "requires an input_attachment_index layout qualifier", "subpass", "");
 8433|   454k|    } else {
 8434|   454k|        if (qualifier.hasAttachment())
  ------------------
  |  Branch (8434:13): [True: 0, False: 454k]
  ------------------
 8435|      0|            error(loc, "can only be used with a subpass", "input_attachment_index", "");
 8436|   454k|    }
 8437|       |
 8438|       |    // specialization-constant id
 8439|   454k|    if (qualifier.hasSpecConstantId()) {
  ------------------
  |  Branch (8439:9): [True: 0, False: 454k]
  ------------------
 8440|      0|        if (type.getQualifier().storage != EvqConst)
  ------------------
  |  Branch (8440:13): [True: 0, False: 0]
  ------------------
 8441|      0|            error(loc, "can only be applied to 'const'-qualified scalar", "constant_id", "");
 8442|      0|        if (! type.isScalar())
  ------------------
  |  Branch (8442:13): [True: 0, False: 0]
  ------------------
 8443|      0|            error(loc, "can only be applied to a scalar", "constant_id", "");
 8444|      0|        switch (type.getBasicType())
 8445|      0|        {
 8446|      0|        case EbtInt8:
  ------------------
  |  Branch (8446:9): [True: 0, False: 0]
  ------------------
 8447|      0|        case EbtUint8:
  ------------------
  |  Branch (8447:9): [True: 0, False: 0]
  ------------------
 8448|      0|        case EbtInt16:
  ------------------
  |  Branch (8448:9): [True: 0, False: 0]
  ------------------
 8449|      0|        case EbtUint16:
  ------------------
  |  Branch (8449:9): [True: 0, False: 0]
  ------------------
 8450|      0|        case EbtInt:
  ------------------
  |  Branch (8450:9): [True: 0, False: 0]
  ------------------
 8451|      0|        case EbtUint:
  ------------------
  |  Branch (8451:9): [True: 0, False: 0]
  ------------------
 8452|      0|        case EbtInt64:
  ------------------
  |  Branch (8452:9): [True: 0, False: 0]
  ------------------
 8453|      0|        case EbtUint64:
  ------------------
  |  Branch (8453:9): [True: 0, False: 0]
  ------------------
 8454|      0|        case EbtBool:
  ------------------
  |  Branch (8454:9): [True: 0, False: 0]
  ------------------
 8455|      0|        case EbtFloat:
  ------------------
  |  Branch (8455:9): [True: 0, False: 0]
  ------------------
 8456|      0|        case EbtDouble:
  ------------------
  |  Branch (8456:9): [True: 0, False: 0]
  ------------------
 8457|      0|        case EbtFloat16:
  ------------------
  |  Branch (8457:9): [True: 0, False: 0]
  ------------------
 8458|      0|        case EbtBFloat16:
  ------------------
  |  Branch (8458:9): [True: 0, False: 0]
  ------------------
 8459|      0|        case EbtFloatE5M2:
  ------------------
  |  Branch (8459:9): [True: 0, False: 0]
  ------------------
 8460|      0|        case EbtFloatE4M3:
  ------------------
  |  Branch (8460:9): [True: 0, False: 0]
  ------------------
 8461|      0|        case EbtFloatE2M1:
  ------------------
  |  Branch (8461:9): [True: 0, False: 0]
  ------------------
 8462|      0|        case EbtFloatE3M2:
  ------------------
  |  Branch (8462:9): [True: 0, False: 0]
  ------------------
 8463|      0|        case EbtFloatE2M3:
  ------------------
  |  Branch (8463:9): [True: 0, False: 0]
  ------------------
 8464|      0|        case EbtFloatUE8M0:
  ------------------
  |  Branch (8464:9): [True: 0, False: 0]
  ------------------
 8465|      0|        case EbtFloatMXINT8:
  ------------------
  |  Branch (8465:9): [True: 0, False: 0]
  ------------------
 8466|      0|            break;
 8467|      0|        default:
  ------------------
  |  Branch (8467:9): [True: 0, False: 0]
  ------------------
 8468|      0|            error(loc, "cannot be applied to this type", "constant_id", "");
 8469|      0|            break;
 8470|      0|        }
 8471|      0|    }
 8472|   454k|}
_ZN7glslang13TParseContext20layoutQualifierCheckERKNS_10TSourceLocERKNS_10TQualifierE:
 8491|   454k|{
 8492|   454k|    if (qualifier.storage == EvqShared && qualifier.hasLayout()) {
  ------------------
  |  Branch (8492:9): [True: 0, False: 454k]
  |  Branch (8492:43): [True: 0, False: 0]
  ------------------
 8493|      0|        if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4) {
  ------------------
  |  Branch (8493:13): [True: 0, False: 0]
  |  Branch (8493:35): [True: 0, False: 0]
  ------------------
 8494|      0|            error(loc, "shared block requires at least SPIR-V 1.4", "shared block", "");
 8495|      0|        }
 8496|      0|        profileRequires(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shared_memory_block, "shared block");
 8497|      0|    }
 8498|       |
 8499|       |    // "It is a compile-time error to use *component* without also specifying the location qualifier (order does not matter)."
 8500|   454k|    if (qualifier.hasComponent() && ! qualifier.hasLocation())
  ------------------
  |  Branch (8500:9): [True: 0, False: 454k]
  |  Branch (8500:37): [True: 0, False: 0]
  ------------------
 8501|      0|        error(loc, "must specify 'location' to use 'component'", "component", "");
 8502|       |
 8503|   454k|    if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (8503:9): [True: 0, False: 454k]
  ------------------
 8504|       |
 8505|       |        // "As with input layout qualifiers, all shaders except compute shaders
 8506|       |        // allow *location* layout qualifiers on output variable declarations,
 8507|       |        // output block declarations, and output block member declarations."
 8508|       |
 8509|      0|        switch (qualifier.storage) {
 8510|      0|        case EvqVaryingIn:
  ------------------
  |  Branch (8510:9): [True: 0, False: 0]
  ------------------
 8511|      0|        {
 8512|      0|            const char* feature = "location qualifier on input";
 8513|      0|            if (isEsProfile() && version < 310)
  ------------------
  |  Branch (8513:17): [True: 0, False: 0]
  |  Branch (8513:34): [True: 0, False: 0]
  ------------------
 8514|      0|                requireStage(loc, EShLangVertex, feature);
 8515|      0|            else
 8516|      0|                requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
 8517|      0|            if (language == EShLangVertex) {
  ------------------
  |  Branch (8517:17): [True: 0, False: 0]
  ------------------
 8518|      0|                const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 8519|      0|                profileRequires(loc, ~EEsProfile, 330, 2, exts, feature);
 8520|      0|                profileRequires(loc, EEsProfile, 300, nullptr, feature);
 8521|      0|            } else {
 8522|      0|                profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 8523|      0|                profileRequires(loc, EEsProfile, 310, nullptr, feature);
 8524|      0|            }
 8525|      0|            break;
 8526|      0|        }
 8527|      0|        case EvqVaryingOut:
  ------------------
  |  Branch (8527:9): [True: 0, False: 0]
  ------------------
 8528|      0|        {
 8529|      0|            const char* feature = "location qualifier on output";
 8530|      0|            if (isEsProfile() && version < 310)
  ------------------
  |  Branch (8530:17): [True: 0, False: 0]
  |  Branch (8530:34): [True: 0, False: 0]
  ------------------
 8531|      0|                requireStage(loc, EShLangFragment, feature);
 8532|      0|            else
 8533|      0|                requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
 8534|      0|            if (language == EShLangFragment) {
  ------------------
  |  Branch (8534:17): [True: 0, False: 0]
  ------------------
 8535|      0|                const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 8536|      0|                profileRequires(loc, ~EEsProfile, 330, 2, exts, feature);
 8537|      0|                profileRequires(loc, EEsProfile, 300, nullptr, feature);
 8538|      0|            } else {
 8539|      0|                profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 8540|      0|                profileRequires(loc, EEsProfile, 310, nullptr, feature);
 8541|      0|            }
 8542|      0|            break;
 8543|      0|        }
 8544|      0|        case EvqUniform:
  ------------------
  |  Branch (8544:9): [True: 0, False: 0]
  ------------------
 8545|      0|        case EvqBuffer:
  ------------------
  |  Branch (8545:9): [True: 0, False: 0]
  ------------------
 8546|      0|        {
 8547|      0|            const char* feature = "location qualifier on uniform or buffer";
 8548|      0|            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile | ENoProfile, feature);
 8549|      0|            profileRequires(loc, ~EEsProfile, 330, E_GL_ARB_explicit_attrib_location, feature);
 8550|      0|            profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_explicit_uniform_location, feature);
 8551|      0|            profileRequires(loc, EEsProfile, 310, nullptr, feature);
 8552|      0|            break;
 8553|      0|        }
 8554|      0|        default:
  ------------------
  |  Branch (8554:9): [True: 0, False: 0]
  ------------------
 8555|      0|            break;
 8556|      0|        }
 8557|      0|        if (qualifier.hasIndex()) {
  ------------------
  |  Branch (8557:13): [True: 0, False: 0]
  ------------------
 8558|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (8558:17): [True: 0, False: 0]
  ------------------
 8559|      0|                error(loc, "can only be used on an output", "index", "");
 8560|      0|            if (! qualifier.hasLocation())
  ------------------
  |  Branch (8560:17): [True: 0, False: 0]
  ------------------
 8561|      0|                error(loc, "can only be used with an explicit location", "index", "");
 8562|      0|        }
 8563|      0|    }
 8564|       |
 8565|   454k|    if (qualifier.hasBinding()) {
  ------------------
  |  Branch (8565:9): [True: 0, False: 454k]
  ------------------
 8566|      0|        if (! qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory() && !qualifier.isTileAttachmentQCOM())
  ------------------
  |  Branch (8566:13): [True: 0, False: 0]
  |  Branch (8566:48): [True: 0, False: 0]
  |  Branch (8566:77): [True: 0, False: 0]
  ------------------
 8567|      0|            error(loc, "requires uniform or buffer or tile image storage qualifier", "binding", "");
 8568|      0|    }
 8569|   454k|    if (qualifier.hasStream()) {
  ------------------
  |  Branch (8569:9): [True: 9.23k, False: 445k]
  ------------------
 8570|  9.23k|        if (!qualifier.isPipeOutput())
  ------------------
  |  Branch (8570:13): [True: 0, False: 9.23k]
  ------------------
 8571|      0|            error(loc, "can only be used on an output", "stream", "");
 8572|  9.23k|    }
 8573|   454k|    if (qualifier.hasXfb()) {
  ------------------
  |  Branch (8573:9): [True: 33.7k, False: 420k]
  ------------------
 8574|  33.7k|        if (!qualifier.isPipeOutput())
  ------------------
  |  Branch (8574:13): [True: 0, False: 33.7k]
  ------------------
 8575|      0|            error(loc, "can only be used on an output", "xfb layout qualifier", "");
 8576|  33.7k|    }
 8577|   454k|    if (qualifier.hasUniformLayout()) {
  ------------------
  |  Branch (8577:9): [True: 0, False: 454k]
  ------------------
 8578|      0|        if (!storageCanHaveLayoutInBlock(qualifier.storage) && !qualifier.isTaskMemory()) {
  ------------------
  |  Branch (8578:13): [True: 0, False: 0]
  |  Branch (8578:64): [True: 0, False: 0]
  ------------------
 8579|      0|            if (qualifier.hasMatrix() || qualifier.hasPacking())
  ------------------
  |  Branch (8579:17): [True: 0, False: 0]
  |  Branch (8579:42): [True: 0, False: 0]
  ------------------
 8580|      0|                error(loc, "matrix or packing qualifiers can only be used on a uniform or buffer", "layout", "");
 8581|      0|            if (qualifier.hasOffset() || qualifier.hasAlign())
  ------------------
  |  Branch (8581:17): [True: 0, False: 0]
  |  Branch (8581:42): [True: 0, False: 0]
  ------------------
 8582|      0|                error(loc, "offset/align can only be used on a uniform or buffer", "layout", "");
 8583|      0|        }
 8584|      0|    }
 8585|   454k|    if (qualifier.isPushConstant()) {
  ------------------
  |  Branch (8585:9): [True: 0, False: 454k]
  ------------------
 8586|      0|        if (qualifier.storage != EvqUniform)
  ------------------
  |  Branch (8586:13): [True: 0, False: 0]
  ------------------
 8587|      0|            error(loc, "can only be used with a uniform", "push_constant", "");
 8588|      0|        if (qualifier.hasSet())
  ------------------
  |  Branch (8588:13): [True: 0, False: 0]
  ------------------
 8589|      0|            error(loc, "cannot be used with push_constant", "set", "");
 8590|      0|        if (qualifier.hasBinding())
  ------------------
  |  Branch (8590:13): [True: 0, False: 0]
  ------------------
 8591|      0|            error(loc, "cannot be used with push_constant", "binding", "");
 8592|      0|    }
 8593|   454k|    if (qualifier.hasBufferReference()) {
  ------------------
  |  Branch (8593:9): [True: 0, False: 454k]
  ------------------
 8594|      0|        if (qualifier.storage != EvqBuffer)
  ------------------
  |  Branch (8594:13): [True: 0, False: 0]
  ------------------
 8595|      0|            error(loc, "can only be used with buffer", "buffer_reference", "");
 8596|      0|    }
 8597|   454k|    if (qualifier.isBufferType()) {
  ------------------
  |  Branch (8597:9): [True: 0, False: 454k]
  ------------------
 8598|      0|        if (qualifier.storage != EvqUniform && qualifier.storage != EvqBuffer)
  ------------------
  |  Branch (8598:13): [True: 0, False: 0]
  |  Branch (8598:48): [True: 0, False: 0]
  ------------------
 8599|      0|            error(loc, "can only be used with uniform or buffer", "buffer_type", "");
 8600|      0|    }
 8601|   454k|    if (qualifier.isShaderRecord()) {
  ------------------
  |  Branch (8601:9): [True: 0, False: 454k]
  ------------------
 8602|      0|        if (qualifier.storage != EvqBuffer)
  ------------------
  |  Branch (8602:13): [True: 0, False: 0]
  ------------------
 8603|      0|            error(loc, "can only be used with a buffer", "shaderRecordNV", "");
 8604|      0|        if (qualifier.hasBinding())
  ------------------
  |  Branch (8604:13): [True: 0, False: 0]
  ------------------
 8605|      0|            error(loc, "cannot be used with shaderRecordNV", "binding", "");
 8606|      0|        if (qualifier.hasSet())
  ------------------
  |  Branch (8606:13): [True: 0, False: 0]
  ------------------
 8607|      0|            error(loc, "cannot be used with shaderRecordNV", "set", "");
 8608|       |
 8609|      0|    }
 8610|       |
 8611|   454k|    if (qualifier.storage == EvqTileImageEXT) {
  ------------------
  |  Branch (8611:9): [True: 0, False: 454k]
  ------------------
 8612|      0|        if (qualifier.hasSet())
  ------------------
  |  Branch (8612:13): [True: 0, False: 0]
  ------------------
 8613|      0|            error(loc, "cannot be used with tileImageEXT", "set", "");
 8614|      0|        if (!qualifier.hasLocation())
  ------------------
  |  Branch (8614:13): [True: 0, False: 0]
  ------------------
 8615|      0|            error(loc, "can only be used with an explicit location", "tileImageEXT", "");
 8616|      0|    }
 8617|       |
 8618|   454k|    if (qualifier.storage == EvqHitAttr && qualifier.hasLayout()) {
  ------------------
  |  Branch (8618:9): [True: 0, False: 454k]
  |  Branch (8618:44): [True: 0, False: 0]
  ------------------
 8619|      0|        error(loc, "cannot apply layout qualifiers to hitAttributeNV variable", "hitAttributeNV", "");
 8620|      0|    }
 8621|   454k|    if (qualifier.hasBank()) {
  ------------------
  |  Branch (8621:9): [True: 0, False: 454k]
  ------------------
 8622|      0|        if (!qualifier.isPushConstant())
  ------------------
  |  Branch (8622:13): [True: 0, False: 0]
  ------------------
 8623|      0|            error(loc, "can only be used with push_constant", "bank", "");
 8624|      0|    }
 8625|   454k|    if (qualifier.hasMemberOffset()) {
  ------------------
  |  Branch (8625:9): [True: 0, False: 454k]
  ------------------
 8626|      0|        if (!qualifier.isPushConstant())
  ------------------
  |  Branch (8626:13): [True: 0, False: 0]
  ------------------
 8627|      0|            error(loc, "can only be used with push_constant", "member_offset", "");
 8628|      0|    }
 8629|       |
 8630|   454k|    if (qualifier.layoutDescriptorStride != TQualifier::layoutDescriptorStrideEnd &&
  ------------------
  |  Branch (8630:9): [True: 0, False: 454k]
  ------------------
 8631|      0|        !qualifier.layoutDescriptorHeap)
  ------------------
  |  Branch (8631:9): [True: 0, False: 0]
  ------------------
 8632|      0|        error(loc, "must specify 'descriptor_heap' to use 'descriptor_stride'", "descriptor_stride", "");
 8633|   454k|    if ((qualifier.layoutHeapOffset != 0 || qualifier.layoutHeapOffsetNode != nullptr) && !qualifier.layoutDescriptorHeap &&
  ------------------
  |  Branch (8633:10): [True: 0, False: 454k]
  |  Branch (8633:45): [True: 0, False: 454k]
  |  Branch (8633:91): [True: 0, False: 0]
  ------------------
 8634|      0|        qualifier.storage != EvqSamplerHeap && qualifier.storage != EvqResourceHeap)
  ------------------
  |  Branch (8634:9): [True: 0, False: 0]
  |  Branch (8634:48): [True: 0, False: 0]
  ------------------
 8635|      0|        error(loc, "must specify 'descriptor_heap' to use 'heap_offset'", "heap_offset", "");
 8636|   454k|}
_ZN7glslang13TParseContext20checkNoShaderLayoutsERKNS_10TSourceLocERKNS_17TShaderQualifiersE:
 8640|  4.83M|{
 8641|  4.83M|    const char* message = "can only apply to a standalone qualifier";
 8642|       |
 8643|  4.83M|    if (shaderQualifiers.geometry != ElgNone)
  ------------------
  |  Branch (8643:9): [True: 0, False: 4.83M]
  ------------------
 8644|      0|        error(loc, message, TQualifier::getGeometryString(shaderQualifiers.geometry), "");
 8645|  4.83M|    if (shaderQualifiers.spacing != EvsNone)
  ------------------
  |  Branch (8645:9): [True: 0, False: 4.83M]
  ------------------
 8646|      0|        error(loc, message, TQualifier::getVertexSpacingString(shaderQualifiers.spacing), "");
 8647|  4.83M|    if (shaderQualifiers.order != EvoNone)
  ------------------
  |  Branch (8647:9): [True: 0, False: 4.83M]
  ------------------
 8648|      0|        error(loc, message, TQualifier::getVertexOrderString(shaderQualifiers.order), "");
 8649|  4.83M|    if (shaderQualifiers.pointMode)
  ------------------
  |  Branch (8649:9): [True: 0, False: 4.83M]
  ------------------
 8650|      0|        error(loc, message, "point_mode", "");
 8651|  4.83M|    if (shaderQualifiers.invocations != TQualifier::layoutNotSet)
  ------------------
  |  Branch (8651:9): [True: 0, False: 4.83M]
  ------------------
 8652|      0|        error(loc, message, "invocations", "");
 8653|  19.3M|    for (int i = 0; i < 3; ++i) {
  ------------------
  |  Branch (8653:21): [True: 14.5M, False: 4.83M]
  ------------------
 8654|  14.5M|        if (shaderQualifiers.localSize[i] > 1)
  ------------------
  |  Branch (8654:13): [True: 0, False: 14.5M]
  ------------------
 8655|      0|            error(loc, message, "local_size", "");
 8656|  14.5M|        if (shaderQualifiers.localSizeSpecId[i] != TQualifier::layoutNotSet)
  ------------------
  |  Branch (8656:13): [True: 0, False: 14.5M]
  ------------------
 8657|      0|            error(loc, message, "local_size id", "");
 8658|  14.5M|    }
 8659|  4.83M|    if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
  ------------------
  |  Branch (8659:9): [True: 0, False: 4.83M]
  ------------------
 8660|      0|        if (language == EShLangGeometry || language == EShLangMesh)
  ------------------
  |  Branch (8660:13): [True: 0, False: 0]
  |  Branch (8660:44): [True: 0, False: 0]
  ------------------
 8661|      0|            error(loc, message, "max_vertices", "");
 8662|      0|        else if (language == EShLangTessControl)
  ------------------
  |  Branch (8662:18): [True: 0, False: 0]
  ------------------
 8663|      0|            error(loc, message, "vertices", "");
 8664|      0|        else
 8665|      0|            assert(0);
 8666|      0|    }
 8667|  4.83M|    if (shaderQualifiers.earlyFragmentTests)
  ------------------
  |  Branch (8667:9): [True: 0, False: 4.83M]
  ------------------
 8668|      0|        error(loc, message, "early_fragment_tests", "");
 8669|  4.83M|    if (shaderQualifiers.postDepthCoverage)
  ------------------
  |  Branch (8669:9): [True: 0, False: 4.83M]
  ------------------
 8670|      0|        error(loc, message, "post_depth_coverage", "");
 8671|  4.83M|    if (shaderQualifiers.nonCoherentColorAttachmentReadEXT)
  ------------------
  |  Branch (8671:9): [True: 0, False: 4.83M]
  ------------------
 8672|      0|        error(loc, message, "non_coherent_color_attachment_readEXT", "");
 8673|  4.83M|    if (shaderQualifiers.nonCoherentDepthAttachmentReadEXT)
  ------------------
  |  Branch (8673:9): [True: 0, False: 4.83M]
  ------------------
 8674|      0|        error(loc, message, "non_coherent_depth_attachment_readEXT", "");
 8675|  4.83M|    if (shaderQualifiers.nonCoherentStencilAttachmentReadEXT)
  ------------------
  |  Branch (8675:9): [True: 0, False: 4.83M]
  ------------------
 8676|      0|        error(loc, message, "non_coherent_stencil_attachment_readEXT", "");
 8677|  4.83M|    if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
  ------------------
  |  Branch (8677:9): [True: 0, False: 4.83M]
  ------------------
 8678|      0|        if (language == EShLangMesh)
  ------------------
  |  Branch (8678:13): [True: 0, False: 0]
  ------------------
 8679|      0|            error(loc, message, "max_primitives", "");
 8680|      0|        else
 8681|      0|            assert(0);
 8682|      0|    }
 8683|  4.83M|    if (shaderQualifiers.hasBlendEquation())
  ------------------
  |  Branch (8683:9): [True: 0, False: 4.83M]
  ------------------
 8684|      0|        error(loc, message, "blend equation", "");
 8685|  4.83M|    if (shaderQualifiers.numViews != TQualifier::layoutNotSet)
  ------------------
  |  Branch (8685:9): [True: 0, False: 4.83M]
  ------------------
 8686|      0|        error(loc, message, "num_views", "");
 8687|  4.83M|    if (shaderQualifiers.interlockOrdering != EioNone)
  ------------------
  |  Branch (8687:9): [True: 0, False: 4.83M]
  ------------------
 8688|      0|        error(loc, message, TQualifier::getInterlockOrderingString(shaderQualifiers.interlockOrdering), "");
 8689|  4.83M|    if (shaderQualifiers.layoutPrimitiveCulling)
  ------------------
  |  Branch (8689:9): [True: 0, False: 4.83M]
  ------------------
 8690|      0|        error(loc, "can only be applied as standalone", "primitive_culling", "");
 8691|       |
 8692|  4.83M|    if (shaderQualifiers.layoutNonCoherentTileAttachmentReadQCOM)
  ------------------
  |  Branch (8692:9): [True: 0, False: 4.83M]
  ------------------
 8693|      0|        error(loc, message, "non_coherent_attachment_readQCOM", "");
 8694|  4.83M|    if (shaderQualifiers.layoutTileShadingRateQCOM[0] >= 1)
  ------------------
  |  Branch (8694:9): [True: 0, False: 4.83M]
  ------------------
 8695|      0|        error(loc, message, "shading_rate_xQCOM", "");
 8696|  4.83M|    if (shaderQualifiers.layoutTileShadingRateQCOM[1] >= 1)
  ------------------
  |  Branch (8696:9): [True: 0, False: 4.83M]
  ------------------
 8697|      0|        error(loc, message, "shading_rate_yQCOM", "");
 8698|  4.83M|    if (shaderQualifiers.layoutTileShadingRateQCOM[2] >= 1)
  ------------------
  |  Branch (8698:9): [True: 0, False: 4.83M]
  ------------------
 8699|      0|        error(loc, message, "shading_rate_zQCOM", "");
 8700|  4.83M|}
_ZN7glslang13TParseContext9fixOffsetERKNS_10TSourceLocERNS_7TSymbolE:
 8704|   420k|{
 8705|   420k|    const TQualifier& qualifier = symbol.getType().getQualifier();
 8706|   420k|    if (symbol.getType().isAtomic()) {
  ------------------
  |  Branch (8706:9): [True: 0, False: 420k]
  ------------------
 8707|      0|        if (qualifier.hasBinding() && (int)qualifier.layoutBinding < resources.maxAtomicCounterBindings) {
  ------------------
  |  Branch (8707:13): [True: 0, False: 0]
  |  Branch (8707:39): [True: 0, False: 0]
  ------------------
 8708|       |
 8709|       |            // Set the offset
 8710|      0|            int offset;
 8711|      0|            if (qualifier.hasOffset())
  ------------------
  |  Branch (8711:17): [True: 0, False: 0]
  ------------------
 8712|      0|                offset = qualifier.layoutOffset;
 8713|      0|            else
 8714|      0|                offset = atomicUintOffsets[qualifier.layoutBinding];
 8715|       |
 8716|      0|            if (offset % 4 != 0)
  ------------------
  |  Branch (8716:17): [True: 0, False: 0]
  ------------------
 8717|      0|                error(loc, "atomic counters offset should align based on 4:", "offset", "%d", offset);
 8718|       |
 8719|      0|            symbol.getWritableType().getQualifier().layoutOffset = offset;
 8720|       |
 8721|       |            // Check for overlap
 8722|      0|            int numOffsets = 4;
 8723|      0|            if (symbol.getType().isArray()) {
  ------------------
  |  Branch (8723:17): [True: 0, False: 0]
  ------------------
 8724|      0|                if (symbol.getType().isSizedArray() && !symbol.getType().getArraySizes()->isInnerUnsized())
  ------------------
  |  Branch (8724:21): [True: 0, False: 0]
  |  Branch (8724:56): [True: 0, False: 0]
  ------------------
 8725|      0|                    numOffsets *= symbol.getType().getCumulativeArraySize();
 8726|      0|                else {
 8727|       |                    // "It is a compile-time error to declare an unsized array of atomic_uint."
 8728|      0|                    error(loc, "array must be explicitly sized", "atomic_uint", "");
 8729|      0|                }
 8730|      0|            }
 8731|      0|            int repeated = intermediate.addUsedOffsets(qualifier.layoutBinding, offset, numOffsets);
 8732|      0|            if (repeated >= 0)
  ------------------
  |  Branch (8732:17): [True: 0, False: 0]
  ------------------
 8733|      0|                error(loc, "atomic counters sharing the same offset:", "offset", "%d", repeated);
 8734|       |
 8735|       |            // Bump the default offset
 8736|      0|            atomicUintOffsets[qualifier.layoutBinding] = offset + numOffsets;
 8737|      0|        }
 8738|      0|    }
 8739|   420k|}
_ZN7glslang13TParseContext19declareTypeDefaultsERKNS_10TSourceLocERKNS_11TPublicTypeE:
 9227|  1.62k|{
 9228|  1.62k|    if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding()) {
  ------------------
  |  Branch (9228:9): [True: 0, False: 1.62k]
  |  Branch (9228:50): [True: 0, False: 0]
  ------------------
 9229|      0|        if (publicType.qualifier.layoutBinding >= resources.maxAtomicCounterBindings) {
  ------------------
  |  Branch (9229:13): [True: 0, False: 0]
  ------------------
 9230|      0|            error(loc, "atomic_uint binding is too large", "binding", "");
 9231|      0|            return;
 9232|      0|        }
 9233|      0|        if (publicType.qualifier.hasOffset())
  ------------------
  |  Branch (9233:13): [True: 0, False: 0]
  ------------------
 9234|      0|            atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset;
 9235|      0|        return;
 9236|      0|    }
 9237|       |
 9238|  1.62k|    if (publicType.arraySizes) {
  ------------------
  |  Branch (9238:9): [True: 0, False: 1.62k]
  ------------------
 9239|      0|        error(loc, "expect an array name", "", "");
 9240|      0|    }
 9241|       |
 9242|  1.62k|    if (publicType.qualifier.hasLayout() && !publicType.qualifier.hasBufferReference())
  ------------------
  |  Branch (9242:9): [True: 0, False: 1.62k]
  |  Branch (9242:45): [True: 0, False: 0]
  ------------------
 9243|      0|        warn(loc, "useless application of layout qualifier", "layout", "");
 9244|  1.62k|}
_ZN7glslang13TParseContext19typeParametersCheckERKNS_10TSourceLocERKNS_11TPublicTypeE:
 9247|  39.5M|{
 9248|  39.5M|    if (parsingBuiltins)
  ------------------
  |  Branch (9248:9): [True: 39.5M, False: 156]
  ------------------
 9249|  39.5M|        return;
 9250|    156|    if (publicType.isCoopmatKHR()) {
  ------------------
  |  Branch (9250:9): [True: 0, False: 156]
  ------------------
 9251|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (9251:13): [True: 0, False: 0]
  ------------------
 9252|      0|            error(loc, "coopmat missing type parameters", "", "");
 9253|      0|            return;
 9254|      0|        }
 9255|      0|        switch (publicType.typeParameters->basicType) {
 9256|      0|        case EbtFloat:
  ------------------
  |  Branch (9256:9): [True: 0, False: 0]
  ------------------
 9257|      0|        case EbtFloat16:
  ------------------
  |  Branch (9257:9): [True: 0, False: 0]
  ------------------
 9258|      0|        case EbtBFloat16:
  ------------------
  |  Branch (9258:9): [True: 0, False: 0]
  ------------------
 9259|      0|        case EbtFloatE5M2:
  ------------------
  |  Branch (9259:9): [True: 0, False: 0]
  ------------------
 9260|      0|        case EbtFloatE4M3:
  ------------------
  |  Branch (9260:9): [True: 0, False: 0]
  ------------------
 9261|      0|        case EbtInt:
  ------------------
  |  Branch (9261:9): [True: 0, False: 0]
  ------------------
 9262|      0|        case EbtInt8:
  ------------------
  |  Branch (9262:9): [True: 0, False: 0]
  ------------------
 9263|      0|        case EbtInt16:
  ------------------
  |  Branch (9263:9): [True: 0, False: 0]
  ------------------
 9264|      0|        case EbtUint:
  ------------------
  |  Branch (9264:9): [True: 0, False: 0]
  ------------------
 9265|      0|        case EbtUint8:
  ------------------
  |  Branch (9265:9): [True: 0, False: 0]
  ------------------
 9266|      0|        case EbtUint16:
  ------------------
  |  Branch (9266:9): [True: 0, False: 0]
  ------------------
 9267|      0|        case EbtSpirvType:
  ------------------
  |  Branch (9267:9): [True: 0, False: 0]
  ------------------
 9268|      0|            break;
 9269|      0|        default:
  ------------------
  |  Branch (9269:9): [True: 0, False: 0]
  ------------------
 9270|      0|            error(loc, "coopmat invalid basic type", TType::getBasicString(publicType.typeParameters->basicType), "");
 9271|      0|            break;
 9272|      0|        }
 9273|      0|        if (publicType.typeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (9273:13): [True: 0, False: 0]
  ------------------
 9274|      0|            error(loc, "coopmat incorrect number of type parameters", "", "");
 9275|      0|            return;
 9276|      0|        }
 9277|      0|        int use = publicType.typeParameters->arraySizes->getDimSize(3);
 9278|      0|        if (use < 0 || use > 2) {
  ------------------
  |  Branch (9278:13): [True: 0, False: 0]
  |  Branch (9278:24): [True: 0, False: 0]
  ------------------
 9279|      0|            error(loc, "coopmat invalid matrix Use", "", "");
 9280|      0|            return;
 9281|      0|        }
 9282|      0|    }
 9283|    156|    if (publicType.isTensorLayoutNV()) {
  ------------------
  |  Branch (9283:9): [True: 0, False: 156]
  ------------------
 9284|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (9284:13): [True: 0, False: 0]
  ------------------
 9285|      0|            error(loc, "tensorLayout missing type parameters", "", "");
 9286|      0|            return;
 9287|      0|        }
 9288|      0|        if (publicType.typeParameters->arraySizes->getNumDims() > 2) {
  ------------------
  |  Branch (9288:13): [True: 0, False: 0]
  ------------------
 9289|      0|            error(loc, "tensorLayout incorrect number of type parameters", "", "");
 9290|      0|            return;
 9291|      0|        }
 9292|      0|        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() < 2) {
  ------------------
  |  Branch (9292:13): [True: 0, False: 0]
  |  Branch (9292:42): [True: 0, False: 0]
  ------------------
 9293|      0|            while (publicType.typeParameters->arraySizes->getNumDims() < 2) {
  ------------------
  |  Branch (9293:20): [True: 0, False: 0]
  ------------------
 9294|      0|                publicType.typeParameters->arraySizes->addInnerSize(0);
 9295|      0|            }
 9296|      0|        }
 9297|      0|    }
 9298|    156|    if (publicType.isTensorViewNV()) {
  ------------------
  |  Branch (9298:9): [True: 0, False: 156]
  ------------------
 9299|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (9299:13): [True: 0, False: 0]
  ------------------
 9300|      0|            error(loc, "tensorView missing type parameters", "", "");
 9301|      0|            return;
 9302|      0|        }
 9303|      0|        if (publicType.typeParameters->arraySizes->getNumDims() < 1 ||
  ------------------
  |  Branch (9303:13): [True: 0, False: 0]
  ------------------
 9304|      0|            publicType.typeParameters->arraySizes->getNumDims() > 7) {
  ------------------
  |  Branch (9304:13): [True: 0, False: 0]
  ------------------
 9305|      0|            error(loc, "tensorView incorrect number of type parameters", "", "");
 9306|      0|            return;
 9307|      0|        }
 9308|      0|        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() < 7) {
  ------------------
  |  Branch (9308:13): [True: 0, False: 0]
  |  Branch (9308:42): [True: 0, False: 0]
  ------------------
 9309|      0|            uint32_t numDims = publicType.typeParameters->arraySizes->getNumDims();
 9310|      0|            while (numDims < 7) {
  ------------------
  |  Branch (9310:20): [True: 0, False: 0]
  ------------------
 9311|      0|                uint32_t dim = (numDims == 1) ? 0 : (numDims - 2);
  ------------------
  |  Branch (9311:32): [True: 0, False: 0]
  ------------------
 9312|      0|                publicType.typeParameters->arraySizes->addInnerSize(dim);
 9313|      0|                numDims++;
 9314|      0|            }
 9315|      0|        }
 9316|      0|    }
 9317|    156|    if (publicType.isTensorARM()) {
  ------------------
  |  Branch (9317:9): [True: 0, False: 156]
  ------------------
 9318|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (9318:13): [True: 0, False: 0]
  ------------------
 9319|      0|            error(loc, "tensor type is missing type parameters", "", "");
 9320|      0|            return;
 9321|      0|        }
 9322|      0|        if (publicType.typeParameters->arraySizes == nullptr) {
  ------------------
  |  Branch (9322:13): [True: 0, False: 0]
  ------------------
 9323|      0|            error(loc, "tensor type is missing rank information", "", "");
 9324|      0|            return;
 9325|      0|        }
 9326|      0|        if (publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (9326:13): [True: 0, False: 0]
  ------------------
 9327|      0|            error(loc, "tensor type requires exactly 1 rank specifier", "", "");
 9328|      0|            return;
 9329|      0|        }
 9330|      0|        if (publicType.typeParameters->arraySizes->getDimSize(0) < 1) {
  ------------------
  |  Branch (9330:13): [True: 0, False: 0]
  ------------------
 9331|      0|            error(loc, "tensor rank must be greater than or equal to 1", "", "");
 9332|      0|            return;
 9333|      0|        }
 9334|      0|    }
 9335|    156|    if (publicType.isLongVector() && !isValidLongVectorElseError(loc, publicType)) {
  ------------------
  |  Branch (9335:9): [True: 0, False: 156]
  |  Branch (9335:38): [True: 0, False: 0]
  ------------------
 9336|      0|        return;
 9337|      0|    }
 9338|    156|}
_ZN7glslang13TParseContext15declareVariableERKNS_10TSourceLocERNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_11TPublicTypeEPNS_11TArraySizesEPNS_12TIntermTypedE:
 9706|   420k|{
 9707|       |    // Make a fresh type that combines the characteristics from the individual
 9708|       |    // identifier syntax and the declaration-type syntax.
 9709|   420k|    TType type(publicType);
 9710|   420k|    type.transferArraySizes(arraySizes);
 9711|   420k|    type.copyArrayInnerSizes(publicType.arraySizes);
 9712|   420k|    arrayOfArrayVersionCheck(loc, type.getArraySizes());
 9713|       |
 9714|   420k|    if (initializer) {
  ------------------
  |  Branch (9714:9): [True: 142k, False: 278k]
  ------------------
 9715|   142k|        if (type.getBasicType() == EbtRayQuery) {
  ------------------
  |  Branch (9715:13): [True: 0, False: 142k]
  ------------------
 9716|      0|            error(loc, "ray queries can only be initialized by using the rayQueryInitializeEXT intrinsic:", "=", identifier.c_str());
 9717|   142k|        } else if ((type.getBasicType() == EbtHitObjectNV) || (type.getBasicType() == EbtHitObjectEXT)) {
  ------------------
  |  Branch (9717:20): [True: 0, False: 142k]
  |  Branch (9717:63): [True: 0, False: 142k]
  ------------------
 9718|      0|            error(loc, "hit objects cannot be initialized using initializers", "=", identifier.c_str());
 9719|      0|        }
 9720|       |
 9721|   142k|    }
 9722|       |
 9723|   420k|    if (type.isCoopMatKHR()) {
  ------------------
  |  Branch (9723:9): [True: 0, False: 420k]
  ------------------
 9724|      0|        intermediate.setUseVulkanMemoryModel();
 9725|      0|        intermediate.setUseStorageBuffer();
 9726|       |
 9727|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes ||
  ------------------
  |  Branch (9727:13): [True: 0, False: 0]
  |  Branch (9727:43): [True: 0, False: 0]
  ------------------
 9728|      0|            publicType.typeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (9728:13): [True: 0, False: 0]
  ------------------
 9729|      0|            error(loc, "unexpected number type parameters", identifier.c_str(), "");
 9730|      0|        }
 9731|      0|        if (publicType.typeParameters) {
  ------------------
  |  Branch (9731:13): [True: 0, False: 0]
  ------------------
 9732|      0|            if (!isTypeFloat(publicType.typeParameters->basicType) &&
  ------------------
  |  Branch (9732:17): [True: 0, False: 0]
  ------------------
 9733|      0|                !isTypeInt(publicType.typeParameters->basicType) && publicType.typeParameters->basicType != EbtSpirvType) {
  ------------------
  |  Branch (9733:17): [True: 0, False: 0]
  |  Branch (9733:69): [True: 0, False: 0]
  ------------------
 9734|      0|                error(loc, "expected 8, 16, 32, or 64 bit signed or unsigned integer or 16, 32, or 64 bit float type", identifier.c_str(), "");
 9735|      0|            }
 9736|      0|        }
 9737|      0|    }
 9738|   420k|    else if (type.isCoopMatNV()) {
  ------------------
  |  Branch (9738:14): [True: 0, False: 420k]
  ------------------
 9739|      0|        intermediate.setUseVulkanMemoryModel();
 9740|      0|        intermediate.setUseStorageBuffer();
 9741|       |
 9742|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (9742:13): [True: 0, False: 0]
  |  Branch (9742:43): [True: 0, False: 0]
  |  Branch (9742:85): [True: 0, False: 0]
  ------------------
 9743|      0|            error(loc, "expected four type parameters", identifier.c_str(), "");
 9744|      0|        } else {
 9745|      0|            if (isTypeFloat(publicType.basicType) &&
  ------------------
  |  Branch (9745:17): [True: 0, False: 0]
  ------------------
 9746|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 16 &&
  ------------------
  |  Branch (9746:17): [True: 0, False: 0]
  ------------------
 9747|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 32 &&
  ------------------
  |  Branch (9747:17): [True: 0, False: 0]
  ------------------
 9748|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 64) {
  ------------------
  |  Branch (9748:17): [True: 0, False: 0]
  ------------------
 9749|      0|                error(loc, "expected 16, 32, or 64 bits for first type parameter", identifier.c_str(), "");
 9750|      0|            }
 9751|      0|            if (isTypeInt(publicType.basicType) &&
  ------------------
  |  Branch (9751:17): [True: 0, False: 0]
  ------------------
 9752|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 8 &&
  ------------------
  |  Branch (9752:17): [True: 0, False: 0]
  ------------------
 9753|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 16 &&
  ------------------
  |  Branch (9753:17): [True: 0, False: 0]
  ------------------
 9754|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 32) {
  ------------------
  |  Branch (9754:17): [True: 0, False: 0]
  ------------------
 9755|      0|                error(loc, "expected 8, 16, or 32 bits for first type parameter", identifier.c_str(), "");
 9756|      0|            }
 9757|      0|        }
 9758|   420k|    } else if (type.isTensorLayoutNV()) {
  ------------------
  |  Branch (9758:16): [True: 0, False: 420k]
  ------------------
 9759|      0|        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() > 2) {
  ------------------
  |  Branch (9759:13): [True: 0, False: 0]
  |  Branch (9759:43): [True: 0, False: 0]
  ------------------
 9760|      0|            error(loc, "expected 1-2 type parameters", identifier.c_str(), "");
 9761|      0|        }
 9762|   420k|    } else if (type.isTensorViewNV()) {
  ------------------
  |  Branch (9762:16): [True: 0, False: 420k]
  ------------------
 9763|      0|        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() > 7) {
  ------------------
  |  Branch (9763:13): [True: 0, False: 0]
  |  Branch (9763:43): [True: 0, False: 0]
  ------------------
 9764|      0|            error(loc, "expected 1-7 type parameters", identifier.c_str(), "");
 9765|      0|        }
 9766|   420k|    } else if (type.isCoopVecNV()) {
  ------------------
  |  Branch (9766:16): [True: 0, False: 420k]
  ------------------
 9767|      0|        intermediate.setUseVulkanMemoryModel();
 9768|      0|        intermediate.setUseStorageBuffer();
 9769|       |
 9770|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (9770:13): [True: 0, False: 0]
  |  Branch (9770:43): [True: 0, False: 0]
  |  Branch (9770:85): [True: 0, False: 0]
  ------------------
 9771|      0|            error(loc, "expected two type parameters", identifier.c_str(), "");
 9772|      0|        } else if (publicType.typeParameters->arraySizes->getDimNode(0) == nullptr && publicType.typeParameters->arraySizes->getDimSize(0) <= 0) {
  ------------------
  |  Branch (9772:20): [True: 0, False: 0]
  |  Branch (9772:87): [True: 0, False: 0]
  ------------------
 9773|      0|            error(loc, "expected positive number of components", identifier.c_str(), "");
 9774|      0|        }
 9775|   420k|    } else if (type.isLongVector()) {
  ------------------
  |  Branch (9775:16): [True: 0, False: 420k]
  ------------------
 9776|      0|        intermediate.setUseStorageBuffer();
 9777|       |
 9778|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (9778:13): [True: 0, False: 0]
  |  Branch (9778:43): [True: 0, False: 0]
  |  Branch (9778:85): [True: 0, False: 0]
  ------------------
 9779|      0|            error(loc, "expected two type parameters", identifier.c_str(), "");
 9780|      0|        } else if (publicType.typeParameters->arraySizes->getDimNode(0) == nullptr && publicType.typeParameters->arraySizes->getDimSize(0) <= 0) {
  ------------------
  |  Branch (9780:20): [True: 0, False: 0]
  |  Branch (9780:87): [True: 0, False: 0]
  ------------------
 9781|      0|            error(loc, "expected positive number of components", identifier.c_str(), "");
 9782|      0|        }
 9783|   420k|    } else if (type.isTensorARM()) {
  ------------------
  |  Branch (9783:16): [True: 0, False: 420k]
  ------------------
 9784|      0|        intermediate.setUseStorageBuffer();
 9785|       |
 9786|      0|        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (9786:13): [True: 0, False: 0]
  |  Branch (9786:43): [True: 0, False: 0]
  ------------------
 9787|      0|            error(loc, "expected two type parameters", identifier.c_str(), "");
 9788|      0|        }
 9789|      0|        if (publicType.typeParameters) {
  ------------------
  |  Branch (9789:13): [True: 0, False: 0]
  ------------------
 9790|      0|            if (publicType.typeParameters->basicType != EbtBool &&
  ------------------
  |  Branch (9790:17): [True: 0, False: 0]
  ------------------
 9791|      0|                publicType.typeParameters->basicType != EbtInt8 &&
  ------------------
  |  Branch (9791:17): [True: 0, False: 0]
  ------------------
 9792|      0|                publicType.typeParameters->basicType != EbtInt16 &&
  ------------------
  |  Branch (9792:17): [True: 0, False: 0]
  ------------------
 9793|      0|                publicType.typeParameters->basicType != EbtInt &&
  ------------------
  |  Branch (9793:17): [True: 0, False: 0]
  ------------------
 9794|      0|                publicType.typeParameters->basicType != EbtInt64 &&
  ------------------
  |  Branch (9794:17): [True: 0, False: 0]
  ------------------
 9795|      0|                publicType.typeParameters->basicType != EbtUint8 &&
  ------------------
  |  Branch (9795:17): [True: 0, False: 0]
  ------------------
 9796|      0|                publicType.typeParameters->basicType != EbtUint16 &&
  ------------------
  |  Branch (9796:17): [True: 0, False: 0]
  ------------------
 9797|      0|                publicType.typeParameters->basicType != EbtUint &&
  ------------------
  |  Branch (9797:17): [True: 0, False: 0]
  ------------------
 9798|      0|                publicType.typeParameters->basicType != EbtUint64 &&
  ------------------
  |  Branch (9798:17): [True: 0, False: 0]
  ------------------
 9799|      0|                publicType.typeParameters->basicType != EbtFloat16 &&
  ------------------
  |  Branch (9799:17): [True: 0, False: 0]
  ------------------
 9800|      0|                publicType.typeParameters->basicType != EbtFloat &&
  ------------------
  |  Branch (9800:17): [True: 0, False: 0]
  ------------------
 9801|      0|                publicType.typeParameters->basicType != EbtDouble &&
  ------------------
  |  Branch (9801:17): [True: 0, False: 0]
  ------------------
 9802|      0|                publicType.typeParameters->basicType != EbtBFloat16 &&
  ------------------
  |  Branch (9802:17): [True: 0, False: 0]
  ------------------
 9803|      0|                publicType.typeParameters->basicType != EbtFloatE5M2 &&
  ------------------
  |  Branch (9803:17): [True: 0, False: 0]
  ------------------
 9804|      0|                publicType.typeParameters->basicType != EbtFloatE4M3) {
  ------------------
  |  Branch (9804:17): [True: 0, False: 0]
  ------------------
 9805|      0|                error(loc, "expected bool, integer or floating point type parameter", identifier.c_str(), "");
 9806|      0|            }
 9807|       |
 9808|      0|            if (publicType.typeParameters->basicType == EbtBFloat16) {
  ------------------
  |  Branch (9808:17): [True: 0, False: 0]
  ------------------
 9809|      0|                requireExtensions(loc, 1, &E_GL_ARM_tensors_bfloat16, "tensor with bfloat16_t type");
 9810|      0|            }
 9811|       |
 9812|      0|            if (publicType.typeParameters->basicType == EbtFloatE5M2) {
  ------------------
  |  Branch (9812:17): [True: 0, False: 0]
  ------------------
 9813|      0|                requireExtensions(loc, 1, &E_GL_ARM_tensors_float_e5m2, "tensor with floate5m2_t type");
 9814|      0|            }
 9815|       |
 9816|      0|            if (publicType.typeParameters->basicType == EbtFloatE4M3) {
  ------------------
  |  Branch (9816:17): [True: 0, False: 0]
  ------------------
 9817|      0|                requireExtensions(loc, 1, &E_GL_ARM_tensors_float_e4m3, "tensor with floate4m3_t type");
 9818|      0|            }
 9819|      0|        }
 9820|   420k|    } else {
 9821|   420k|        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() != 0) {
  ------------------
  |  Branch (9821:13): [True: 0, False: 420k]
  |  Branch (9821:42): [True: 0, False: 0]
  ------------------
 9822|      0|            error(loc, "unexpected type parameters", identifier.c_str(), "");
 9823|      0|        }
 9824|   420k|    }
 9825|       |
 9826|   420k|    if (voidErrorCheck(loc, identifier, type.getBasicType()))
  ------------------
  |  Branch (9826:9): [True: 1, False: 420k]
  ------------------
 9827|      1|        return nullptr;
 9828|       |
 9829|   420k|    if (initializer)
  ------------------
  |  Branch (9829:9): [True: 142k, False: 278k]
  ------------------
 9830|   142k|        rValueErrorCheck(loc, "initializer", initializer);
 9831|   278k|    else
 9832|   278k|        nonInitConstCheck(loc, identifier, type);
 9833|       |
 9834|   420k|    samplerCheck(loc, type, identifier, initializer);
 9835|   420k|    transparentOpaqueCheck(loc, type, identifier);
 9836|   420k|    atomicUintCheck(loc, type, identifier);
 9837|   420k|    accStructCheck(loc, type, identifier);
 9838|   420k|    hitObjectNVCheck(loc, type, identifier);
 9839|   420k|    hitObjectEXTCheck(loc, type, identifier);
 9840|   420k|    checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false);
 9841|   420k|    if (type.getQualifier().storage == EvqConst && type.containsReference()) {
  ------------------
  |  Branch (9841:9): [True: 142k, False: 278k]
  |  Branch (9841:52): [True: 0, False: 142k]
  ------------------
 9842|      0|        error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", "");
 9843|      0|    }
 9844|       |
 9845|   420k|    if (type.getQualifier().storage != EvqUniform && type.getQualifier().storage != EvqBuffer) {
  ------------------
  |  Branch (9845:9): [True: 414k, False: 6.26k]
  |  Branch (9845:54): [True: 414k, False: 0]
  ------------------
 9846|   414k|        if (type.contains16BitFloat())
  ------------------
  |  Branch (9846:13): [True: 0, False: 414k]
  ------------------
 9847|      0|            requireFloat16Arithmetic(loc, "qualifier", "float16 types can only be in uniform block or buffer storage");
 9848|   414k|        if (type.contains16BitInt())
  ------------------
  |  Branch (9848:13): [True: 0, False: 414k]
  ------------------
 9849|      0|            requireInt16Arithmetic(loc, "qualifier", "(u)int16 types can only be in uniform block or buffer storage");
 9850|   414k|        if (type.contains8BitInt())
  ------------------
  |  Branch (9850:13): [True: 0, False: 414k]
  ------------------
 9851|      0|            requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage");
 9852|   414k|    }
 9853|   420k|    if (type.getBasicType() == EbtBFloat16 &&
  ------------------
  |  Branch (9853:9): [True: 0, False: 420k]
  ------------------
 9854|      0|        (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut))
  ------------------
  |  Branch (9854:10): [True: 0, False: 0]
  |  Branch (9854:57): [True: 0, False: 0]
  ------------------
 9855|      0|        error(loc, "qualifier", "bfloat16 types not allowed as input/output", "");
 9856|       |
 9857|   420k|    if ((type.getBasicType() == EbtFloatE5M2 || type.getBasicType() == EbtFloatE4M3) &&
  ------------------
  |  Branch (9857:10): [True: 0, False: 420k]
  |  Branch (9857:49): [True: 0, False: 420k]
  ------------------
 9858|      0|        (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut))
  ------------------
  |  Branch (9858:10): [True: 0, False: 0]
  |  Branch (9858:57): [True: 0, False: 0]
  ------------------
 9859|      0|        error(loc, "qualifier", "fp8 types not allowed as input/output", "");
 9860|       |
 9861|   420k|    if (type.containsOcpMicroscalingFloat() &&
  ------------------
  |  Branch (9861:9): [True: 0, False: 420k]
  ------------------
 9862|      0|        (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut))
  ------------------
  |  Branch (9862:10): [True: 0, False: 0]
  |  Branch (9862:57): [True: 0, False: 0]
  ------------------
 9863|      0|        error(loc, "qualifier", "microscaling types not allowed as input/output", "");
 9864|       |
 9865|   420k|    if (type.containsOcpMicroscalingNonByteFloat() &&
  ------------------
  |  Branch (9865:9): [True: 0, False: 420k]
  ------------------
 9866|      0|        (type.getQualifier().storage == EvqUniform || type.getQualifier().storage == EvqBuffer || type.getQualifier().storage == EvqShared))
  ------------------
  |  Branch (9866:10): [True: 0, False: 0]
  |  Branch (9866:55): [True: 0, False: 0]
  |  Branch (9866:99): [True: 0, False: 0]
  ------------------
 9867|      0|        error(loc, "qualifier", "sub-byte sized types not allowed in storage class", "");
 9868|       |
 9869|   420k|    if (type.getQualifier().storage == EvqtaskPayloadSharedEXT)
  ------------------
  |  Branch (9869:9): [True: 0, False: 420k]
  ------------------
 9870|      0|        intermediate.addTaskPayloadEXTCount();
 9871|   420k|    if (type.getQualifier().storage == EvqShared && type.containsCoopMat())
  ------------------
  |  Branch (9871:9): [True: 0, False: 420k]
  |  Branch (9871:53): [True: 0, False: 0]
  ------------------
 9872|      0|        error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", "");
 9873|       |
 9874|   420k|    if (profile == EEsProfile) {
  ------------------
  |  Branch (9874:9): [True: 136k, False: 284k]
  ------------------
 9875|   136k|        if (type.getQualifier().isPipeInput() && type.getBasicType() == EbtStruct) {
  ------------------
  |  Branch (9875:13): [True: 70.3k, False: 66.0k]
  |  Branch (9875:50): [True: 0, False: 70.3k]
  ------------------
 9876|      0|            if (type.getQualifier().isArrayedIo(language)) {
  ------------------
  |  Branch (9876:17): [True: 0, False: 0]
  ------------------
 9877|      0|                TType perVertexType(type, 0);
 9878|      0|                if (perVertexType.containsArray() && perVertexType.containsBuiltIn() == false) {
  ------------------
  |  Branch (9878:21): [True: 0, False: 0]
  |  Branch (9878:54): [True: 0, False: 0]
  ------------------
 9879|      0|                    error(loc, "A per vertex structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), "");
 9880|      0|                }
 9881|      0|            }
 9882|      0|            else if (type.containsArray() && type.containsBuiltIn() == false) {
  ------------------
  |  Branch (9882:22): [True: 0, False: 0]
  |  Branch (9882:46): [True: 0, False: 0]
  ------------------
 9883|      0|                error(loc, "A structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), "");
 9884|      0|            }
 9885|      0|            if (type.containsStructure())
  ------------------
  |  Branch (9885:17): [True: 0, False: 0]
  ------------------
 9886|      0|                error(loc, "A structure containing an struct is not allowed as input in ES", type.getTypeName().c_str(), "");
 9887|      0|        }
 9888|   136k|    }
 9889|       |
 9890|   420k|    if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger))
  ------------------
  |  Branch (9890:9): [True: 420k, False: 920]
  |  Branch (9890:42): [True: 0, False: 420k]
  |  Branch (9890:89): [True: 0, False: 420k]
  ------------------
 9891|      0|        error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", "");
 9892|   420k|    if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone)
  ------------------
  |  Branch (9892:9): [True: 420k, False: 900]
  |  Branch (9892:41): [True: 0, False: 420k]
  ------------------
 9893|      0|        error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", "");
 9894|   420k|    if (identifier != "gl_FragStencilRefARB" && publicType.shaderQualifiers.getStencil() != ElsNone)
  ------------------
  |  Branch (9894:9): [True: 420k, False: 406]
  |  Branch (9894:49): [True: 0, False: 420k]
  ------------------
 9895|      0|        error(loc, "can only apply depth layout to gl_FragStencilRefARB", "layout qualifier", "");
 9896|       |
 9897|       |    // Check for redeclaration of built-ins and/or attempting to declare a reserved name
 9898|   420k|    TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers);
 9899|   420k|    if (symbol == nullptr)
  ------------------
  |  Branch (9899:9): [True: 420k, False: 0]
  ------------------
 9900|   420k|        reservedErrorCheck(loc, identifier);
 9901|       |
 9902|   420k|    if (symbol == nullptr && spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (9902:9): [True: 420k, False: 0]
  |  Branch (9902:30): [True: 27.3k, False: 393k]
  |  Branch (9902:55): [True: 0, False: 27.3k]
  ------------------
 9903|      0|        bool remapped = vkRelaxedRemapUniformVariable(loc, identifier, publicType, arraySizes, initializer, type);
 9904|       |
 9905|      0|        if (remapped) {
  ------------------
  |  Branch (9905:13): [True: 0, False: 0]
  ------------------
 9906|      0|            return nullptr;
 9907|      0|        }
 9908|      0|    }
 9909|       |
 9910|   420k|    inheritGlobalDefaults(type.getQualifier());
 9911|       |
 9912|       |    // Declare the variable
 9913|   420k|    if (type.isArray()) {
  ------------------
  |  Branch (9913:9): [True: 15.4k, False: 405k]
  ------------------
 9914|       |        // Check that implicit sizing is only where allowed.
 9915|  15.4k|        arraySizesCheck(loc, type.getQualifier(), type.getArraySizes(), initializer, false);
 9916|       |
 9917|  15.4k|        if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type))
  ------------------
  |  Branch (9917:13): [True: 15.4k, False: 0]
  |  Branch (9917:64): [True: 15.4k, False: 0]
  ------------------
 9918|  15.4k|            declareArray(loc, identifier, type, symbol);
 9919|       |
 9920|  15.4k|        if (initializer) {
  ------------------
  |  Branch (9920:13): [True: 0, False: 15.4k]
  ------------------
 9921|      0|            profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "initializer");
 9922|      0|            profileRequires(loc, EEsProfile, 300, nullptr, "initializer");
 9923|      0|        }
 9924|   405k|    } else {
 9925|       |        // non-array case
 9926|   405k|        if (symbol == nullptr)
  ------------------
  |  Branch (9926:13): [True: 405k, False: 0]
  ------------------
 9927|   405k|            symbol = declareNonArray(loc, identifier, type);
 9928|      0|        else if (type != symbol->getType())
  ------------------
  |  Branch (9928:18): [True: 0, False: 0]
  ------------------
 9929|      0|            error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
 9930|   405k|    }
 9931|       |
 9932|   420k|    if (symbol == nullptr)
  ------------------
  |  Branch (9932:9): [True: 0, False: 420k]
  ------------------
 9933|      0|        return nullptr;
 9934|       |
 9935|       |    // Deal with initializer
 9936|   420k|    TIntermNode* initNode = nullptr;
 9937|   420k|    if (symbol != nullptr && initializer) {
  ------------------
  |  Branch (9937:9): [True: 420k, False: 0]
  |  Branch (9937:30): [True: 142k, False: 278k]
  ------------------
 9938|   142k|        TVariable* variable = symbol->getAsVariable();
 9939|   142k|        if (! variable) {
  ------------------
  |  Branch (9939:13): [True: 0, False: 142k]
  ------------------
 9940|      0|            error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
 9941|      0|            return nullptr;
 9942|      0|        }
 9943|   142k|        initNode = executeInitializer(loc, initializer, variable);
 9944|       |
 9945|       |        // GL_EXT_opacity_micromap_ray_query_mode: capture the value of a
 9946|       |        // 'const bool gl_EnableOpacityMicromapEXT = <true|false>;' redeclaration so the back end can emit
 9947|       |        // the OpacityMicromapIdKHR execution mode operand as OpConstantTrue/OpConstantFalse. The
 9948|       |        // specialization-constant form goes through addQualifierToExisting instead.
 9949|   142k|        if (identifier == "gl_EnableOpacityMicromapEXT" && !variable->getType().getQualifier().hasSpecConstantId()) {
  ------------------
  |  Branch (9949:13): [True: 1, False: 142k]
  |  Branch (9949:60): [True: 1, False: 0]
  ------------------
 9950|      1|            const TConstUnionArray& constArray = variable->getConstArray();
 9951|      1|            if (constArray.size() > 0)
  ------------------
  |  Branch (9951:17): [True: 1, False: 0]
  ------------------
 9952|      1|                intermediate.setEnableOpacityMicromapDefault(constArray[0].getBConst());
 9953|      1|        }
 9954|   142k|    }
 9955|       |
 9956|       |    // EXT_descriptor_heap
 9957|   420k|    if (!untypedHeapCheck(symbol, type, loc, identifier.c_str())) {
  ------------------
  |  Branch (9957:9): [True: 0, False: 420k]
  ------------------
 9958|      0|        return nullptr;
 9959|      0|    }
 9960|       |
 9961|       |    // look for errors in layout qualifier use
 9962|   420k|    layoutObjectCheck(loc, *symbol);
 9963|       |
 9964|       |    // fix up
 9965|   420k|    fixOffset(loc, *symbol);
 9966|       |
 9967|       |    // TODO: The decl AST is turned on based on debug info right now. We should expose it as an explicit option.
 9968|   420k|    if (intermediate.getDebugInfo()) {
  ------------------
  |  Branch (9968:9): [True: 0, False: 420k]
  ------------------
 9969|      0|        TVariable* variable = symbol->getAsVariable();
 9970|      0|        if (variable) {
  ------------------
  |  Branch (9970:13): [True: 0, False: 0]
  ------------------
 9971|      0|            auto decl = new TIntermVariableDecl(intermediate.addSymbol(*variable, loc), initNode);
 9972|      0|            decl->setLoc(loc);
 9973|      0|            return decl;
 9974|      0|        }
 9975|      0|        else {
 9976|       |            // We ignore builtins redeclarations
 9977|      0|            return nullptr;
 9978|      0|        }
 9979|      0|    }
 9980|   420k|    else {
 9981|   420k|        return initNode;
 9982|   420k|    }
 9983|   420k|}
_ZNK7glslang13TParseContext21inheritGlobalDefaultsERNS_10TQualifierE:
 9987|   420k|{
 9988|   420k|    if (dst.storage == EvqVaryingOut) {
  ------------------
  |  Branch (9988:9): [True: 20.4k, False: 400k]
  ------------------
 9989|  20.4k|        if (! dst.hasStream() && language == EShLangGeometry)
  ------------------
  |  Branch (9989:13): [True: 20.4k, False: 0]
  |  Branch (9989:34): [True: 5.50k, False: 14.9k]
  ------------------
 9990|  5.50k|            dst.layoutStream = globalOutputDefaults.layoutStream;
 9991|  20.4k|        if (! dst.hasXfbBuffer())
  ------------------
  |  Branch (9991:13): [True: 20.4k, False: 0]
  ------------------
 9992|  20.4k|            dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
 9993|  20.4k|    }
 9994|   420k|}
_ZN7glslang13TParseContext15declareNonArrayERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_5TTypeE:
10018|   405k|{
10019|       |    // make a new variable
10020|   405k|    TVariable* variable = new TVariable(&identifier, type);
10021|       |
10022|   405k|    ioArrayCheck(loc, type, identifier);
10023|       |
10024|       |    // add variable to symbol table
10025|   405k|    if (symbolTable.insert(*variable)) {
  ------------------
  |  Branch (10025:9): [True: 405k, False: 0]
  ------------------
10026|   405k|        if (symbolTable.atGlobalLevel())
  ------------------
  |  Branch (10026:13): [True: 405k, False: 1]
  ------------------
10027|   405k|            trackLinkage(*variable);
10028|   405k|        return variable;
10029|   405k|    }
10030|       |
10031|      0|    error(loc, "redefinition", variable->getName().c_str(), "");
10032|      0|    return nullptr;
10033|   405k|}
_ZN7glslang13TParseContext18executeInitializerERKNS_10TSourceLocEPNS_12TIntermTypedEPNS_9TVariableE:
10042|   142k|{
10043|       |    // A null initializer is an aggregate that hasn't had an op assigned yet
10044|       |    // (still EOpNull, no relation to nullInit), and has no children.
10045|   142k|    bool nullInit = initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull &&
  ------------------
  |  Branch (10045:21): [True: 0, False: 142k]
  |  Branch (10045:54): [True: 0, False: 0]
  ------------------
10046|      0|        initializer->getAsAggregate()->getSequence().size() == 0;
  ------------------
  |  Branch (10046:9): [True: 0, False: 0]
  ------------------
10047|       |
10048|       |    //
10049|       |    // Identifier must be of type constant, a global, or a temporary, and
10050|       |    // starting at version 120, desktop allows uniforms to have initializers.
10051|       |    //
10052|   142k|    TStorageQualifier qualifier = variable->getType().getQualifier().storage;
10053|   142k|    if (! (qualifier == EvqTemporary || qualifier == EvqGlobal || qualifier == EvqConst ||
  ------------------
  |  Branch (10053:12): [True: 1, False: 142k]
  |  Branch (10053:41): [True: 0, False: 142k]
  |  Branch (10053:67): [True: 142k, False: 0]
  ------------------
10054|      0|           (qualifier == EvqUniform && !isEsProfile() && version >= 120))) {
  ------------------
  |  Branch (10054:13): [True: 0, False: 0]
  |  Branch (10054:40): [True: 0, False: 0]
  |  Branch (10054:58): [True: 0, False: 0]
  ------------------
10055|      0|        if (qualifier == EvqShared) {
  ------------------
  |  Branch (10055:13): [True: 0, False: 0]
  ------------------
10056|       |            // GL_EXT_null_initializer allows this for shared, if it's a null initializer
10057|      0|            if (nullInit) {
  ------------------
  |  Branch (10057:17): [True: 0, False: 0]
  ------------------
10058|      0|                const char* feature = "initialization with shared qualifier";
10059|      0|                profileRequires(loc, EEsProfile, 0, E_GL_EXT_null_initializer, feature);
10060|      0|                profileRequires(loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, feature);
10061|      0|            } else {
10062|      0|                error(loc, "initializer can only be a null initializer ('{}')", "shared", "");
10063|      0|            }
10064|      0|        } else {
10065|      0|            error(loc, " cannot initialize this type of qualifier ",
10066|      0|                  variable->getType().getStorageQualifierString(), "");
10067|      0|            return nullptr;
10068|      0|        }
10069|      0|    }
10070|       |
10071|   142k|    if (nullInit) {
  ------------------
  |  Branch (10071:9): [True: 0, False: 142k]
  ------------------
10072|       |        // only some types can be null initialized
10073|      0|        if (variable->getType().containsUnsizedArray()) {
  ------------------
  |  Branch (10073:13): [True: 0, False: 0]
  ------------------
10074|      0|            error(loc, "null initializers can't size unsized arrays", "{}", "");
10075|      0|            return nullptr;
10076|      0|        }
10077|      0|        if (variable->getType().containsOpaque()) {
  ------------------
  |  Branch (10077:13): [True: 0, False: 0]
  ------------------
10078|      0|            error(loc, "null initializers can't be used on opaque values", "{}", "");
10079|      0|            return nullptr;
10080|      0|        }
10081|      0|        variable->getWritableType().getQualifier().setNullInit();
10082|      0|        return nullptr;
10083|      0|    }
10084|       |
10085|   142k|    arrayObjectCheck(loc, variable->getType(), "array initializer");
10086|       |
10087|       |    //
10088|       |    // If the initializer was from braces { ... }, we convert the whole subtree to a
10089|       |    // constructor-style subtree, allowing the rest of the code to operate
10090|       |    // identically for both kinds of initializers.
10091|       |    //
10092|       |    // Type can't be deduced from the initializer list, so a skeletal type to
10093|       |    // follow has to be passed in.  Constness and specialization-constness
10094|       |    // should be deduced bottom up, not dictated by the skeletal type.
10095|       |    //
10096|   142k|    TType skeletalType;
10097|   142k|    skeletalType.shallowCopy(variable->getType());
10098|   142k|    skeletalType.getQualifier().makeTemporary();
10099|   142k|    initializer = convertInitializerList(loc, skeletalType, initializer);
10100|   142k|    if (! initializer) {
  ------------------
  |  Branch (10100:9): [True: 0, False: 142k]
  ------------------
10101|       |        // error recovery; don't leave const without constant values
10102|      0|        if (qualifier == EvqConst)
  ------------------
  |  Branch (10102:13): [True: 0, False: 0]
  ------------------
10103|      0|            variable->getWritableType().getQualifier().makeTemporary();
10104|      0|        return nullptr;
10105|      0|    }
10106|       |
10107|       |    // Fix outer arrayness if variable is unsized, getting size from the initializer
10108|   142k|    if (initializer->getType().isSizedArray() && variable->getType().isUnsizedArray())
  ------------------
  |  Branch (10108:9): [True: 0, False: 142k]
  |  Branch (10108:50): [True: 0, False: 0]
  ------------------
10109|      0|        variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize());
10110|       |
10111|       |    // Inner arrayness can also get set by an initializer
10112|   142k|    if (initializer->getType().isArrayOfArrays() && variable->getType().isArrayOfArrays() &&
  ------------------
  |  Branch (10112:9): [True: 0, False: 142k]
  |  Branch (10112:53): [True: 0, False: 0]
  ------------------
10113|      0|        initializer->getType().getArraySizes()->getNumDims() ==
  ------------------
  |  Branch (10113:9): [True: 0, False: 0]
  ------------------
10114|      0|           variable->getType().getArraySizes()->getNumDims()) {
10115|       |        // adopt unsized sizes from the initializer's sizes
10116|      0|        for (int d = 1; d < variable->getType().getArraySizes()->getNumDims(); ++d) {
  ------------------
  |  Branch (10116:25): [True: 0, False: 0]
  ------------------
10117|      0|            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize) {
  ------------------
  |  Branch (10117:17): [True: 0, False: 0]
  ------------------
10118|      0|                variable->getWritableType().getArraySizes()->setDimSize(d,
10119|      0|                    initializer->getType().getArraySizes()->getDimSize(d));
10120|      0|            }
10121|      0|        }
10122|      0|    }
10123|       |
10124|       |    // Uniforms require a compile-time constant initializer
10125|   142k|    if (qualifier == EvqUniform && ! initializer->getType().getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (10125:9): [True: 0, False: 142k]
  |  Branch (10125:36): [True: 0, False: 0]
  ------------------
10126|      0|        error(loc, "uniform initializers must be constant", "=", "'%s'",
10127|      0|              variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
10128|      0|        variable->getWritableType().getQualifier().makeTemporary();
10129|      0|        return nullptr;
10130|      0|    }
10131|       |    // Global consts require a constant initializer (specialization constant is okay)
10132|   142k|    if (qualifier == EvqConst && symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) {
  ------------------
  |  Branch (10132:9): [True: 142k, False: 1]
  |  Branch (10132:34): [True: 142k, False: 0]
  |  Branch (10132:65): [True: 0, False: 142k]
  ------------------
10133|      0|        error(loc, "global const initializers must be constant", "=", "'%s'",
10134|      0|              variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
10135|      0|        variable->getWritableType().getQualifier().makeTemporary();
10136|      0|        return nullptr;
10137|      0|    }
10138|       |
10139|       |    // Const variables require a constant initializer, depending on version
10140|   142k|    if (qualifier == EvqConst) {
  ------------------
  |  Branch (10140:9): [True: 142k, False: 1]
  ------------------
10141|   142k|        if (! initializer->getType().getQualifier().isConstant()) {
  ------------------
  |  Branch (10141:13): [True: 0, False: 142k]
  ------------------
10142|      0|            const char* initFeature = "non-constant initializer";
10143|      0|            requireProfile(loc, ~EEsProfile, initFeature);
10144|      0|            profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
10145|      0|            variable->getWritableType().getQualifier().storage = EvqConstReadOnly;
10146|      0|            qualifier = EvqConstReadOnly;
10147|      0|        }
10148|   142k|    } else {
10149|       |        // Non-const global variables in ES need a const initializer.
10150|       |        //
10151|       |        // "In declarations of global variables with no storage qualifier or with a const
10152|       |        // qualifier any initializer must be a constant expression."
10153|      1|        if (symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) {
  ------------------
  |  Branch (10153:13): [True: 0, False: 1]
  |  Branch (10153:44): [True: 0, False: 0]
  ------------------
10154|      0|            const char* initFeature =
10155|      0|                "non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)";
10156|      0|            if (isEsProfile()) {
  ------------------
  |  Branch (10156:17): [True: 0, False: 0]
  ------------------
10157|      0|                if (relaxedErrors() && ! extensionTurnedOn(E_GL_EXT_shader_non_constant_global_initializers))
  ------------------
  |  Branch (10157:21): [True: 0, False: 0]
  |  Branch (10157:40): [True: 0, False: 0]
  ------------------
10158|      0|                    warn(loc, "not allowed in this version", initFeature, "");
10159|      0|                else
10160|      0|                    profileRequires(loc, EEsProfile, 0, E_GL_EXT_shader_non_constant_global_initializers, initFeature);
10161|      0|            }
10162|      0|        }
10163|      1|    }
10164|       |
10165|   142k|    if (qualifier == EvqConst || qualifier == EvqUniform) {
  ------------------
  |  Branch (10165:9): [True: 142k, False: 1]
  |  Branch (10165:34): [True: 0, False: 1]
  ------------------
10166|       |        // Compile-time tagging of the variable with its constant value...
10167|       |
10168|   142k|        initializer = intermediate.addConversion(EOpAssign, variable->getType(), initializer);
10169|   142k|        if (! initializer || ! initializer->getType().getQualifier().isConstant() ||
  ------------------
  |  Branch (10169:13): [True: 0, False: 142k]
  |  Branch (10169:30): [True: 0, False: 142k]
  ------------------
10170|   142k|            variable->getType() != initializer->getType()) {
  ------------------
  |  Branch (10170:13): [True: 0, False: 142k]
  ------------------
10171|      0|            error(loc, "non-matching or non-convertible constant type for const initializer",
10172|      0|                  variable->getType().getStorageQualifierString(), "");
10173|      0|            variable->getWritableType().getQualifier().makeTemporary();
10174|      0|            return nullptr;
10175|      0|        }
10176|       |
10177|       |        // We either have a folded constant in getAsConstantUnion, or we have to use
10178|       |        // the initializer's subtree in the AST to represent the computation of a
10179|       |        // specialization constant.
10180|   142k|        assert(initializer->getAsConstantUnion() || initializer->getType().getQualifier().isSpecConstant());
10181|   142k|        if (initializer->getAsConstantUnion())
  ------------------
  |  Branch (10181:13): [True: 142k, False: 0]
  ------------------
10182|   142k|            variable->setConstArray(initializer->getAsConstantUnion()->getConstArray());
10183|      0|        else {
10184|       |            // It's a specialization constant.
10185|      0|            variable->getWritableType().getQualifier().makeSpecConstant();
10186|       |
10187|       |            // Keep the subtree that computes the specialization constant with the variable.
10188|       |            // Later, a symbol node will adopt the subtree from the variable.
10189|      0|            variable->setConstSubtree(initializer);
10190|      0|        }
10191|   142k|    } else {
10192|       |        // normal assigning of a value to a variable...
10193|      1|        specializationCheck(loc, initializer->getType(), "initializer");
10194|      1|        TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc);
10195|      1|        TIntermTyped* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc);
10196|      1|        if (! initNode)
  ------------------
  |  Branch (10196:13): [True: 1, False: 0]
  ------------------
10197|      1|            assignError(loc, "=", intermSymbol->getCompleteString(intermediate.getEnhancedMsgs()), initializer->getCompleteString(intermediate.getEnhancedMsgs()));
10198|       |
10199|      1|        return initNode;
10200|      1|    }
10201|       |
10202|   142k|    return nullptr;
10203|   142k|}
_ZN7glslang13TParseContext22convertInitializerListERKNS_10TSourceLocERKNS_5TTypeEPNS_12TIntermTypedE:
10216|   142k|{
10217|       |    // Will operate recursively.  Once a subtree is found that is constructor style,
10218|       |    // everything below it is already good: Only the "top part" of the initializer
10219|       |    // can be an initializer list, where "top part" can extend for several (or all) levels.
10220|       |
10221|       |    // see if we have bottomed out in the tree within the initializer-list part
10222|   142k|    TIntermAggregate* initList = initializer->getAsAggregate();
10223|   142k|    if (! initList || initList->getOp() != EOpNull)
  ------------------
  |  Branch (10223:9): [True: 142k, False: 0]
  |  Branch (10223:23): [True: 0, False: 0]
  ------------------
10224|   142k|        return initializer;
10225|       |
10226|       |    // Of the initializer-list set of nodes, need to process bottom up,
10227|       |    // so recurse deep, then process on the way up.
10228|       |
10229|       |    // Go down the tree here...
10230|      0|    if (type.isArray()) {
  ------------------
  |  Branch (10230:9): [True: 0, False: 0]
  ------------------
10231|       |        // The type's array might be unsized, which could be okay, so base sizes on the size of the aggregate.
10232|       |        // Later on, initializer execution code will deal with array size logic.
10233|      0|        TType arrayType;
10234|      0|        arrayType.shallowCopy(type);                     // sharing struct stuff is fine
10235|      0|        arrayType.copyArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
10236|       |
10237|       |        // a nested empty initializer list ({}) has no elements to size the array or
10238|       |        // derive its element type from, so reject it before the getSequence()[0] read below
10239|      0|        if (initList->getSequence().empty()) {
  ------------------
  |  Branch (10239:13): [True: 0, False: 0]
  ------------------
10240|      0|            error(loc, "array initializer must be non-empty", "initializer list", "");
10241|      0|            return nullptr;
10242|      0|        }
10243|       |
10244|       |        // edit array sizes to fill in unsized dimensions
10245|      0|        arrayType.changeOuterArraySize((int)initList->getSequence().size());
10246|      0|        TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
10247|      0|        if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() &&
  ------------------
  |  Branch (10247:13): [True: 0, False: 0]
  |  Branch (10247:44): [True: 0, False: 0]
  ------------------
10248|      0|            arrayType.getArraySizes()->getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
  ------------------
  |  Branch (10248:13): [True: 0, False: 0]
  ------------------
10249|      0|            for (int d = 1; d < arrayType.getArraySizes()->getNumDims(); ++d) {
  ------------------
  |  Branch (10249:29): [True: 0, False: 0]
  ------------------
10250|      0|                if (arrayType.getArraySizes()->getDimSize(d) == UnsizedArraySize)
  ------------------
  |  Branch (10250:21): [True: 0, False: 0]
  ------------------
10251|      0|                    arrayType.getArraySizes()->setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
10252|      0|            }
10253|      0|        }
10254|       |
10255|      0|        TType elementType(arrayType, 0); // dereferenced type
10256|      0|        for (size_t i = 0; i < initList->getSequence().size(); ++i) {
  ------------------
  |  Branch (10256:28): [True: 0, False: 0]
  ------------------
10257|      0|            initList->getSequence()[i] = convertInitializerList(loc, elementType, initList->getSequence()[i]->getAsTyped());
10258|      0|            if (initList->getSequence()[i] == nullptr)
  ------------------
  |  Branch (10258:17): [True: 0, False: 0]
  ------------------
10259|      0|                return nullptr;
10260|      0|        }
10261|       |
10262|      0|        return addConstructor(loc, initList, arrayType);
10263|      0|    } else if (type.isStruct()) {
  ------------------
  |  Branch (10263:16): [True: 0, False: 0]
  ------------------
10264|      0|        if (type.getStruct()->size() != initList->getSequence().size()) {
  ------------------
  |  Branch (10264:13): [True: 0, False: 0]
  ------------------
10265|      0|            error(loc, "wrong number of structure members", "initializer list", "");
10266|      0|            return nullptr;
10267|      0|        }
10268|      0|        for (size_t i = 0; i < type.getStruct()->size(); ++i) {
  ------------------
  |  Branch (10268:28): [True: 0, False: 0]
  ------------------
10269|      0|            initList->getSequence()[i] = convertInitializerList(loc, *(*type.getStruct())[i].type, initList->getSequence()[i]->getAsTyped());
10270|      0|            if (initList->getSequence()[i] == nullptr)
  ------------------
  |  Branch (10270:17): [True: 0, False: 0]
  ------------------
10271|      0|                return nullptr;
10272|      0|        }
10273|      0|    } else if (type.isMatrix()) {
  ------------------
  |  Branch (10273:16): [True: 0, False: 0]
  ------------------
10274|      0|        if (type.getMatrixCols() != (int)initList->getSequence().size()) {
  ------------------
  |  Branch (10274:13): [True: 0, False: 0]
  ------------------
10275|      0|            error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
10276|      0|            return nullptr;
10277|      0|        }
10278|      0|        TType vectorType(type, 0); // dereferenced type
10279|      0|        for (int i = 0; i < type.getMatrixCols(); ++i) {
  ------------------
  |  Branch (10279:25): [True: 0, False: 0]
  ------------------
10280|      0|            initList->getSequence()[i] = convertInitializerList(loc, vectorType, initList->getSequence()[i]->getAsTyped());
10281|      0|            if (initList->getSequence()[i] == nullptr)
  ------------------
  |  Branch (10281:17): [True: 0, False: 0]
  ------------------
10282|      0|                return nullptr;
10283|      0|        }
10284|      0|    } else if (type.isVector()) {
  ------------------
  |  Branch (10284:16): [True: 0, False: 0]
  ------------------
10285|      0|        if (type.getVectorSize() != (int)initList->getSequence().size()) {
  ------------------
  |  Branch (10285:13): [True: 0, False: 0]
  ------------------
10286|      0|            error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
10287|      0|            return nullptr;
10288|      0|        }
10289|      0|        TBasicType destType = type.getBasicType();
10290|      0|        for (int i = 0; i < type.getVectorSize(); ++i) {
  ------------------
  |  Branch (10290:25): [True: 0, False: 0]
  ------------------
10291|      0|            TBasicType initType = initList->getSequence()[i]->getAsTyped()->getBasicType();
10292|      0|            if (destType != initType && !intermediate.canImplicitlyPromote(initType, destType)) {
  ------------------
  |  Branch (10292:17): [True: 0, False: 0]
  |  Branch (10292:41): [True: 0, False: 0]
  ------------------
10293|      0|                error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
10294|      0|                return nullptr;
10295|      0|            }
10296|       |
10297|      0|        }
10298|      0|    } else {
10299|      0|        error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
10300|      0|        return nullptr;
10301|      0|    }
10302|       |
10303|       |    // Now that the subtree is processed, process this node as if the
10304|       |    // initializer list is a set of arguments to a constructor.
10305|      0|    TIntermNode* emulatedConstructorArguments;
10306|      0|    if (initList->getSequence().size() == 1)
  ------------------
  |  Branch (10306:9): [True: 0, False: 0]
  ------------------
10307|      0|        emulatedConstructorArguments = initList->getSequence()[0];
10308|      0|    else
10309|      0|        emulatedConstructorArguments = initList;
10310|      0|    return addConstructor(loc, emulatedConstructorArguments, type);
10311|      0|}
_ZN7glslang13TParseContext14addConstructorERKNS_10TSourceLocEP11TIntermNodeRKNS_5TTypeE:
10323|  4.40k|{
10324|  4.40k|    if (node == nullptr || node->getAsTyped() == nullptr)
  ------------------
  |  Branch (10324:9): [True: 0, False: 4.40k]
  |  Branch (10324:28): [True: 0, False: 4.40k]
  ------------------
10325|      0|        return nullptr;
10326|  4.40k|    rValueErrorCheck(loc, "constructor", node->getAsTyped());
10327|       |
10328|  4.40k|    TIntermAggregate* aggrNode = node->getAsAggregate();
10329|  4.40k|    TOperator op = intermediate.mapTypeToConstructorOp(type);
10330|       |
10331|       |    // Combined texture-sampler constructors are completely semantic checked
10332|       |    // in constructorTextureSamplerError()
10333|  4.40k|    if (op == EOpConstructTextureSampler) {
  ------------------
  |  Branch (10333:9): [True: 0, False: 4.40k]
  ------------------
10334|      0|        if (aggrNode != nullptr) {
  ------------------
  |  Branch (10334:13): [True: 0, False: 0]
  ------------------
10335|      0|            if (aggrNode->getSequence()[1]->getAsTyped()->getType().getSampler().shadow) {
  ------------------
  |  Branch (10335:17): [True: 0, False: 0]
  ------------------
10336|       |                // Transfer depth into the texture (SPIR-V image) type, as a hint
10337|       |                // for tools to know this texture/image is a depth image.
10338|      0|                aggrNode->getSequence()[0]->getAsTyped()->getWritableType().getSampler().shadow = true;
10339|      0|            }
10340|      0|            return intermediate.setAggregateOperator(aggrNode, op, type, loc);
10341|      0|        }
10342|      0|    }
10343|       |
10344|  4.40k|    TTypeList::const_iterator memberTypes;
10345|  4.40k|    if (op == EOpConstructStruct)
  ------------------
  |  Branch (10345:9): [True: 0, False: 4.40k]
  ------------------
10346|      0|        memberTypes = type.getStruct()->begin();
10347|       |
10348|  4.40k|    TType elementType;
10349|  4.40k|    if (type.isArray()) {
  ------------------
  |  Branch (10349:9): [True: 0, False: 4.40k]
  ------------------
10350|      0|        TType dereferenced(type, 0);
10351|      0|        elementType.shallowCopy(dereferenced);
10352|      0|    } else
10353|  4.40k|        elementType.shallowCopy(type);
10354|       |
10355|  4.40k|    bool singleArg;
10356|  4.40k|    if (aggrNode) {
  ------------------
  |  Branch (10356:9): [True: 4.40k, False: 0]
  ------------------
10357|  4.40k|        if (aggrNode->getOp() != EOpNull)
  ------------------
  |  Branch (10357:13): [True: 0, False: 4.40k]
  ------------------
10358|      0|            singleArg = true;
10359|  4.40k|        else
10360|  4.40k|            singleArg = false;
10361|  4.40k|    } else
10362|      0|        singleArg = true;
10363|       |
10364|  4.40k|    TIntermTyped *newNode;
10365|  4.40k|    if (singleArg) {
  ------------------
  |  Branch (10365:9): [True: 0, False: 4.40k]
  ------------------
10366|       |        // If structure constructor or array constructor is being called
10367|       |        // for only one parameter inside the structure, we need to call constructAggregate function once.
10368|      0|        if (type.isArray())
  ------------------
  |  Branch (10368:13): [True: 0, False: 0]
  ------------------
10369|      0|            newNode = constructAggregate(node, elementType, 1, node->getLoc());
10370|      0|        else if (op == EOpConstructStruct)
  ------------------
  |  Branch (10370:18): [True: 0, False: 0]
  ------------------
10371|      0|            newNode = constructAggregate(node, *(*memberTypes).type, 1, node->getLoc());
10372|      0|        else
10373|      0|            newNode = constructBuiltIn(type, op, node->getAsTyped(), node->getLoc(), false);
10374|       |
10375|      0|        if (newNode && (type.isArray() || op == EOpConstructStruct))
  ------------------
  |  Branch (10375:13): [True: 0, False: 0]
  |  Branch (10375:25): [True: 0, False: 0]
  |  Branch (10375:43): [True: 0, False: 0]
  ------------------
10376|      0|            newNode = intermediate.setAggregateOperator(newNode, EOpConstructStruct, type, loc);
10377|       |
10378|      0|        return newNode;
10379|      0|    }
10380|       |
10381|       |    //
10382|       |    // Handle list of arguments.
10383|       |    //
10384|  4.40k|    TIntermSequence &sequenceVector = aggrNode->getSequence();    // Stores the information about the parameter to the constructor
10385|       |    // if the structure constructor contains more than one parameter, then construct
10386|       |    // each parameter
10387|       |
10388|  4.40k|    int paramCount = 0;  // keeps track of the constructor parameter number being checked
10389|       |
10390|       |    // We don't know "top down" whether type is a specialization constant,
10391|       |    // but a const becomes a specialization constant if any of its children are.
10392|  4.40k|    bool hasSpecConst = false;
10393|  4.40k|    bool isConstConstructor = true;
10394|       |
10395|       |    // for each parameter to the constructor call, check to see if the right type is passed or convert them
10396|       |    // to the right type if possible (and allowed).
10397|       |    // for structure constructors, just check if the right type is passed, no conversion is allowed.
10398|  4.40k|    for (TIntermSequence::iterator p = sequenceVector.begin();
10399|  17.6k|                                   p != sequenceVector.end(); p++, paramCount++) {
  ------------------
  |  Branch (10399:36): [True: 13.2k, False: 4.40k]
  ------------------
10400|  13.2k|        if (type.isArray())
  ------------------
  |  Branch (10400:13): [True: 0, False: 13.2k]
  ------------------
10401|      0|            newNode = constructAggregate(*p, elementType, paramCount+1, node->getLoc());
10402|  13.2k|        else if (op == EOpConstructStruct)
  ------------------
  |  Branch (10402:18): [True: 0, False: 13.2k]
  ------------------
10403|      0|            newNode = constructAggregate(*p, *(memberTypes[paramCount]).type, paramCount+1, node->getLoc());
10404|  13.2k|        else
10405|  13.2k|            newNode = constructBuiltIn(type, op, (*p)->getAsTyped(), node->getLoc(), true);
10406|       |
10407|  13.2k|        if (newNode) {
  ------------------
  |  Branch (10407:13): [True: 13.2k, False: 0]
  ------------------
10408|  13.2k|            *p = newNode;
10409|  13.2k|            if (!newNode->getType().getQualifier().isConstant())
  ------------------
  |  Branch (10409:17): [True: 0, False: 13.2k]
  ------------------
10410|      0|                isConstConstructor = false;
10411|  13.2k|            if (newNode->getType().getQualifier().isSpecConstant())
  ------------------
  |  Branch (10411:17): [True: 0, False: 13.2k]
  ------------------
10412|      0|                hasSpecConst = true;
10413|  13.2k|        } else
10414|      0|            return nullptr;
10415|  13.2k|    }
10416|       |
10417|  4.40k|    TIntermTyped* ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc);
10418|       |
10419|  4.40k|    const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites };
10420|  4.40k|    if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) {
  ------------------
  |  Branch (10420:9): [True: 0, False: 4.40k]
  ------------------
10421|      0|        if (isConstConstructor && hasSpecConst) {
  ------------------
  |  Branch (10421:13): [True: 0, False: 0]
  |  Branch (10421:35): [True: 0, False: 0]
  ------------------
10422|      0|            ret_node->getWritableType().getQualifier().makeSpecConstant();
10423|      0|        }
10424|      0|    }
10425|       |
10426|  4.40k|    TIntermAggregate *agg_node = ret_node->getAsAggregate();
10427|  4.40k|    if (agg_node && (agg_node->isVector() || agg_node->isArray() || agg_node->isMatrix()))
  ------------------
  |  Branch (10427:9): [True: 0, False: 4.40k]
  |  Branch (10427:22): [True: 0, False: 0]
  |  Branch (10427:46): [True: 0, False: 0]
  |  Branch (10427:69): [True: 0, False: 0]
  ------------------
10428|      0|        agg_node->updatePrecision();
10429|       |
10430|  4.40k|    return ret_node;
10431|  4.40k|}
_ZN7glslang13TParseContext16constructBuiltInERKNS_5TTypeENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocEb:
10442|  13.2k|{
10443|       |    // If we are changing a matrix in both domain of basic type and to a non matrix,
10444|       |    // do the shape change first (by default, below, basic type is changed before shape).
10445|       |    // This avoids requesting a matrix of a new type that is going to be discarded anyway.
10446|       |    // TODO: This could be generalized to more type combinations, but that would require
10447|       |    // more extensive testing and full algorithm rework. For now, the need to do two changes makes
10448|       |    // the recursive call work, and avoids the most egregious case of creating integer matrices.
10449|  13.2k|    if (node->getType().isMatrix() && (type.isScalar() || type.isVector()) &&
  ------------------
  |  Branch (10449:9): [True: 0, False: 13.2k]
  |  Branch (10449:40): [True: 0, False: 0]
  |  Branch (10449:59): [True: 0, False: 0]
  ------------------
10450|      0|            type.isFloatingDomain() != node->getType().isFloatingDomain()) {
  ------------------
  |  Branch (10450:13): [True: 0, False: 0]
  ------------------
10451|      0|        TType transitionType(node->getBasicType(), glslang::EvqTemporary, type.getVectorSize(), 0, 0, node->isVector());
10452|      0|        TOperator transitionOp = intermediate.mapTypeToConstructorOp(transitionType);
10453|      0|        node = constructBuiltIn(transitionType, transitionOp, node, loc, false);
10454|      0|    }
10455|       |
10456|  13.2k|    TIntermTyped* newNode;
10457|  13.2k|    TOperator basicOp;
10458|       |
10459|       |    //
10460|       |    // First, convert types as needed.
10461|       |    //
10462|  13.2k|    switch (op) {
10463|      0|    case EOpConstructVec2:
  ------------------
  |  Branch (10463:5): [True: 0, False: 13.2k]
  ------------------
10464|      0|    case EOpConstructVec3:
  ------------------
  |  Branch (10464:5): [True: 0, False: 13.2k]
  ------------------
10465|      0|    case EOpConstructVec4:
  ------------------
  |  Branch (10465:5): [True: 0, False: 13.2k]
  ------------------
10466|      0|    case EOpConstructMat2x2:
  ------------------
  |  Branch (10466:5): [True: 0, False: 13.2k]
  ------------------
10467|      0|    case EOpConstructMat2x3:
  ------------------
  |  Branch (10467:5): [True: 0, False: 13.2k]
  ------------------
10468|      0|    case EOpConstructMat2x4:
  ------------------
  |  Branch (10468:5): [True: 0, False: 13.2k]
  ------------------
10469|      0|    case EOpConstructMat3x2:
  ------------------
  |  Branch (10469:5): [True: 0, False: 13.2k]
  ------------------
10470|      0|    case EOpConstructMat3x3:
  ------------------
  |  Branch (10470:5): [True: 0, False: 13.2k]
  ------------------
10471|      0|    case EOpConstructMat3x4:
  ------------------
  |  Branch (10471:5): [True: 0, False: 13.2k]
  ------------------
10472|      0|    case EOpConstructMat4x2:
  ------------------
  |  Branch (10472:5): [True: 0, False: 13.2k]
  ------------------
10473|      0|    case EOpConstructMat4x3:
  ------------------
  |  Branch (10473:5): [True: 0, False: 13.2k]
  ------------------
10474|      0|    case EOpConstructMat4x4:
  ------------------
  |  Branch (10474:5): [True: 0, False: 13.2k]
  ------------------
10475|      0|    case EOpConstructFloat:
  ------------------
  |  Branch (10475:5): [True: 0, False: 13.2k]
  ------------------
10476|      0|        basicOp = EOpConstructFloat;
10477|      0|        break;
10478|       |
10479|      0|    case EOpConstructIVec2:
  ------------------
  |  Branch (10479:5): [True: 0, False: 13.2k]
  ------------------
10480|  7.69k|    case EOpConstructIVec3:
  ------------------
  |  Branch (10480:5): [True: 7.69k, False: 5.50k]
  ------------------
10481|  7.69k|    case EOpConstructIVec4:
  ------------------
  |  Branch (10481:5): [True: 0, False: 13.2k]
  ------------------
10482|  7.69k|    case EOpConstructInt:
  ------------------
  |  Branch (10482:5): [True: 0, False: 13.2k]
  ------------------
10483|  7.69k|        basicOp = EOpConstructInt;
10484|  7.69k|        break;
10485|       |
10486|      0|    case EOpConstructUVec2:
  ------------------
  |  Branch (10486:5): [True: 0, False: 13.2k]
  ------------------
10487|      0|        if (node->getType().getBasicType() == EbtReference) {
  ------------------
  |  Branch (10487:13): [True: 0, False: 0]
  ------------------
10488|      0|            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "reference conversion to uvec2");
10489|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUvec2, true, node,
10490|      0|                type);
10491|      0|            return newNode;
10492|      0|        } else if (node->getType().getBasicType() == EbtSampler) {
  ------------------
  |  Branch (10492:20): [True: 0, False: 0]
  ------------------
10493|      0|            requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "sampler conversion to uvec2");
10494|       |            // force the basic type of the constructor param to uvec2, otherwise spv builder will
10495|       |            // report some errors
10496|      0|            TIntermTyped* newSrcNode = intermediate.createConversion(EbtUint, node);
10497|      0|            newSrcNode->getAsTyped()->getWritableType().setVectorSize(2);
10498|       |
10499|      0|            TIntermTyped* newNode =
10500|      0|                intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructUVec2, false, newSrcNode, type);
10501|      0|            return newNode;
10502|      0|        }
10503|      0|        [[fallthrough]];
10504|  5.50k|    case EOpConstructUVec3:
  ------------------
  |  Branch (10504:5): [True: 5.50k, False: 7.69k]
  ------------------
10505|  5.50k|    case EOpConstructUVec4:
  ------------------
  |  Branch (10505:5): [True: 0, False: 13.2k]
  ------------------
10506|  5.50k|    case EOpConstructUint:
  ------------------
  |  Branch (10506:5): [True: 0, False: 13.2k]
  ------------------
10507|  5.50k|        basicOp = EOpConstructUint;
10508|  5.50k|        break;
10509|       |
10510|      0|    case EOpConstructBVec2:
  ------------------
  |  Branch (10510:5): [True: 0, False: 13.2k]
  ------------------
10511|      0|    case EOpConstructBVec3:
  ------------------
  |  Branch (10511:5): [True: 0, False: 13.2k]
  ------------------
10512|      0|    case EOpConstructBVec4:
  ------------------
  |  Branch (10512:5): [True: 0, False: 13.2k]
  ------------------
10513|      0|    case EOpConstructBool:
  ------------------
  |  Branch (10513:5): [True: 0, False: 13.2k]
  ------------------
10514|      0|        basicOp = EOpConstructBool;
10515|      0|        break;
10516|      0|    case EOpConstructTextureSampler:
  ------------------
  |  Branch (10516:5): [True: 0, False: 13.2k]
  ------------------
10517|      0|        if ((node->getType().getBasicType() == EbtUint || node->getType().getBasicType() == EbtInt) &&
  ------------------
  |  Branch (10517:14): [True: 0, False: 0]
  |  Branch (10517:59): [True: 0, False: 0]
  ------------------
10518|      0|            node->getType().getVectorSize() == 2) {
  ------------------
  |  Branch (10518:13): [True: 0, False: 0]
  ------------------
10519|      0|            requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "ivec2/uvec2 convert to texture handle");
10520|       |            // No matter ivec2 or uvec2, Set EOpPackUint2x32 just to generate an opBitcast op code
10521|      0|            TIntermTyped* newNode =
10522|      0|                intermediate.addBuiltInFunctionCall(node->getLoc(), EOpPackUint2x32, true, node, type);
10523|      0|            return newNode;
10524|      0|        }
10525|      0|        [[fallthrough]];
10526|      0|    case EOpConstructDVec2:
  ------------------
  |  Branch (10526:5): [True: 0, False: 13.2k]
  ------------------
10527|      0|    case EOpConstructDVec3:
  ------------------
  |  Branch (10527:5): [True: 0, False: 13.2k]
  ------------------
10528|      0|    case EOpConstructDVec4:
  ------------------
  |  Branch (10528:5): [True: 0, False: 13.2k]
  ------------------
10529|      0|    case EOpConstructDMat2x2:
  ------------------
  |  Branch (10529:5): [True: 0, False: 13.2k]
  ------------------
10530|      0|    case EOpConstructDMat2x3:
  ------------------
  |  Branch (10530:5): [True: 0, False: 13.2k]
  ------------------
10531|      0|    case EOpConstructDMat2x4:
  ------------------
  |  Branch (10531:5): [True: 0, False: 13.2k]
  ------------------
10532|      0|    case EOpConstructDMat3x2:
  ------------------
  |  Branch (10532:5): [True: 0, False: 13.2k]
  ------------------
10533|      0|    case EOpConstructDMat3x3:
  ------------------
  |  Branch (10533:5): [True: 0, False: 13.2k]
  ------------------
10534|      0|    case EOpConstructDMat3x4:
  ------------------
  |  Branch (10534:5): [True: 0, False: 13.2k]
  ------------------
10535|      0|    case EOpConstructDMat4x2:
  ------------------
  |  Branch (10535:5): [True: 0, False: 13.2k]
  ------------------
10536|      0|    case EOpConstructDMat4x3:
  ------------------
  |  Branch (10536:5): [True: 0, False: 13.2k]
  ------------------
10537|      0|    case EOpConstructDMat4x4:
  ------------------
  |  Branch (10537:5): [True: 0, False: 13.2k]
  ------------------
10538|      0|    case EOpConstructDouble:
  ------------------
  |  Branch (10538:5): [True: 0, False: 13.2k]
  ------------------
10539|      0|        basicOp = EOpConstructDouble;
10540|      0|        break;
10541|       |
10542|      0|    case EOpConstructF16Vec2:
  ------------------
  |  Branch (10542:5): [True: 0, False: 13.2k]
  ------------------
10543|      0|    case EOpConstructF16Vec3:
  ------------------
  |  Branch (10543:5): [True: 0, False: 13.2k]
  ------------------
10544|      0|    case EOpConstructF16Vec4:
  ------------------
  |  Branch (10544:5): [True: 0, False: 13.2k]
  ------------------
10545|      0|    case EOpConstructF16Mat2x2:
  ------------------
  |  Branch (10545:5): [True: 0, False: 13.2k]
  ------------------
10546|      0|    case EOpConstructF16Mat2x3:
  ------------------
  |  Branch (10546:5): [True: 0, False: 13.2k]
  ------------------
10547|      0|    case EOpConstructF16Mat2x4:
  ------------------
  |  Branch (10547:5): [True: 0, False: 13.2k]
  ------------------
10548|      0|    case EOpConstructF16Mat3x2:
  ------------------
  |  Branch (10548:5): [True: 0, False: 13.2k]
  ------------------
10549|      0|    case EOpConstructF16Mat3x3:
  ------------------
  |  Branch (10549:5): [True: 0, False: 13.2k]
  ------------------
10550|      0|    case EOpConstructF16Mat3x4:
  ------------------
  |  Branch (10550:5): [True: 0, False: 13.2k]
  ------------------
10551|      0|    case EOpConstructF16Mat4x2:
  ------------------
  |  Branch (10551:5): [True: 0, False: 13.2k]
  ------------------
10552|      0|    case EOpConstructF16Mat4x3:
  ------------------
  |  Branch (10552:5): [True: 0, False: 13.2k]
  ------------------
10553|      0|    case EOpConstructF16Mat4x4:
  ------------------
  |  Branch (10553:5): [True: 0, False: 13.2k]
  ------------------
10554|      0|    case EOpConstructFloat16:
  ------------------
  |  Branch (10554:5): [True: 0, False: 13.2k]
  ------------------
10555|      0|        basicOp = EOpConstructFloat16;
10556|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10557|       |        // so construct a 32-bit type and convert
10558|       |        // and do not generate any conversion if it is an identity conversion, i.e. float16_t(<float16_t> var)
10559|      0|        if (!intermediate.getArithemeticFloat16Enabled() && (node->getBasicType() != EbtFloat16)) {
  ------------------
  |  Branch (10559:13): [True: 0, False: 0]
  |  Branch (10559:61): [True: 0, False: 0]
  ------------------
10560|      0|            TType tempType(EbtFloat, EvqTemporary, type.getVectorSize());
10561|      0|            newNode = node;
10562|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10562:17): [True: 0, False: 0]
  ------------------
10563|      0|                TOperator aggregateOp;
10564|      0|                if (op == EOpConstructFloat16)
  ------------------
  |  Branch (10564:21): [True: 0, False: 0]
  ------------------
10565|      0|                    aggregateOp = EOpConstructFloat;
10566|      0|                else
10567|      0|                    aggregateOp = (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2);
10568|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10569|      0|            }
10570|      0|            newNode = intermediate.addConversion(EbtFloat16, newNode);
10571|      0|            return newNode;
10572|      0|        }
10573|      0|        break;
10574|       |
10575|      0|    case EOpConstructBF16Vec2:
  ------------------
  |  Branch (10575:5): [True: 0, False: 13.2k]
  ------------------
10576|      0|    case EOpConstructBF16Vec3:
  ------------------
  |  Branch (10576:5): [True: 0, False: 13.2k]
  ------------------
10577|      0|    case EOpConstructBF16Vec4:
  ------------------
  |  Branch (10577:5): [True: 0, False: 13.2k]
  ------------------
10578|      0|    case EOpConstructBFloat16:
  ------------------
  |  Branch (10578:5): [True: 0, False: 13.2k]
  ------------------
10579|      0|        basicOp = EOpConstructBFloat16;
10580|      0|        break;
10581|       |
10582|      0|    case EOpConstructFloatE5M2Vec2:
  ------------------
  |  Branch (10582:5): [True: 0, False: 13.2k]
  ------------------
10583|      0|    case EOpConstructFloatE5M2Vec3:
  ------------------
  |  Branch (10583:5): [True: 0, False: 13.2k]
  ------------------
10584|      0|    case EOpConstructFloatE5M2Vec4:
  ------------------
  |  Branch (10584:5): [True: 0, False: 13.2k]
  ------------------
10585|      0|    case EOpConstructFloatE5M2:
  ------------------
  |  Branch (10585:5): [True: 0, False: 13.2k]
  ------------------
10586|      0|        basicOp = EOpConstructFloatE5M2;
10587|      0|        break;
10588|       |
10589|      0|    case EOpConstructFloatE4M3Vec2:
  ------------------
  |  Branch (10589:5): [True: 0, False: 13.2k]
  ------------------
10590|      0|    case EOpConstructFloatE4M3Vec3:
  ------------------
  |  Branch (10590:5): [True: 0, False: 13.2k]
  ------------------
10591|      0|    case EOpConstructFloatE4M3Vec4:
  ------------------
  |  Branch (10591:5): [True: 0, False: 13.2k]
  ------------------
10592|      0|    case EOpConstructFloatE4M3:
  ------------------
  |  Branch (10592:5): [True: 0, False: 13.2k]
  ------------------
10593|      0|        basicOp = EOpConstructFloatE4M3;
10594|      0|        break;
10595|       |
10596|      0|    case EOpConstructFloatE2M1Vec2:
  ------------------
  |  Branch (10596:5): [True: 0, False: 13.2k]
  ------------------
10597|      0|    case EOpConstructFloatE2M1Vec3:
  ------------------
  |  Branch (10597:5): [True: 0, False: 13.2k]
  ------------------
10598|      0|    case EOpConstructFloatE2M1Vec4:
  ------------------
  |  Branch (10598:5): [True: 0, False: 13.2k]
  ------------------
10599|      0|    case EOpConstructFloatE2M1:
  ------------------
  |  Branch (10599:5): [True: 0, False: 13.2k]
  ------------------
10600|      0|        basicOp = EOpConstructFloatE2M1;
10601|      0|        break;
10602|       |
10603|      0|    case EOpConstructFloatE3M2Vec2:
  ------------------
  |  Branch (10603:5): [True: 0, False: 13.2k]
  ------------------
10604|      0|    case EOpConstructFloatE3M2Vec3:
  ------------------
  |  Branch (10604:5): [True: 0, False: 13.2k]
  ------------------
10605|      0|    case EOpConstructFloatE3M2Vec4:
  ------------------
  |  Branch (10605:5): [True: 0, False: 13.2k]
  ------------------
10606|      0|    case EOpConstructFloatE3M2:
  ------------------
  |  Branch (10606:5): [True: 0, False: 13.2k]
  ------------------
10607|      0|        basicOp = EOpConstructFloatE3M2;
10608|      0|        break;
10609|       |
10610|      0|    case EOpConstructFloatE2M3Vec2:
  ------------------
  |  Branch (10610:5): [True: 0, False: 13.2k]
  ------------------
10611|      0|    case EOpConstructFloatE2M3Vec3:
  ------------------
  |  Branch (10611:5): [True: 0, False: 13.2k]
  ------------------
10612|      0|    case EOpConstructFloatE2M3Vec4:
  ------------------
  |  Branch (10612:5): [True: 0, False: 13.2k]
  ------------------
10613|      0|    case EOpConstructFloatE2M3:
  ------------------
  |  Branch (10613:5): [True: 0, False: 13.2k]
  ------------------
10614|      0|        basicOp = EOpConstructFloatE2M3;
10615|      0|        break;
10616|       |
10617|      0|    case EOpConstructFloatUE8M0Vec2:
  ------------------
  |  Branch (10617:5): [True: 0, False: 13.2k]
  ------------------
10618|      0|    case EOpConstructFloatUE8M0Vec3:
  ------------------
  |  Branch (10618:5): [True: 0, False: 13.2k]
  ------------------
10619|      0|    case EOpConstructFloatUE8M0Vec4:
  ------------------
  |  Branch (10619:5): [True: 0, False: 13.2k]
  ------------------
10620|      0|    case EOpConstructFloatUE8M0:
  ------------------
  |  Branch (10620:5): [True: 0, False: 13.2k]
  ------------------
10621|      0|        basicOp = EOpConstructFloatUE8M0;
10622|      0|        break;
10623|       |
10624|      0|    case EOpConstructFloatMXINT8Vec2:
  ------------------
  |  Branch (10624:5): [True: 0, False: 13.2k]
  ------------------
10625|      0|    case EOpConstructFloatMXINT8Vec3:
  ------------------
  |  Branch (10625:5): [True: 0, False: 13.2k]
  ------------------
10626|      0|    case EOpConstructFloatMXINT8Vec4:
  ------------------
  |  Branch (10626:5): [True: 0, False: 13.2k]
  ------------------
10627|      0|    case EOpConstructFloatMXINT8:
  ------------------
  |  Branch (10627:5): [True: 0, False: 13.2k]
  ------------------
10628|      0|        basicOp = EOpConstructFloatMXINT8;
10629|      0|        break;
10630|       |
10631|      0|    case EOpConstructI8Vec2:
  ------------------
  |  Branch (10631:5): [True: 0, False: 13.2k]
  ------------------
10632|      0|    case EOpConstructI8Vec3:
  ------------------
  |  Branch (10632:5): [True: 0, False: 13.2k]
  ------------------
10633|      0|    case EOpConstructI8Vec4:
  ------------------
  |  Branch (10633:5): [True: 0, False: 13.2k]
  ------------------
10634|      0|    case EOpConstructInt8:
  ------------------
  |  Branch (10634:5): [True: 0, False: 13.2k]
  ------------------
10635|      0|        basicOp = EOpConstructInt8;
10636|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10637|       |        // so construct a 32-bit type and convert
10638|       |        // and do not generate any conversion if it is an identity conversion, i.e. int8_t(<int8_t> var)
10639|      0|        if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtInt8)) {
  ------------------
  |  Branch (10639:13): [True: 0, False: 0]
  |  Branch (10639:58): [True: 0, False: 0]
  ------------------
10640|      0|            TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
10641|      0|            newNode = node;
10642|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10642:17): [True: 0, False: 0]
  ------------------
10643|      0|                TOperator aggregateOp;
10644|      0|                if (op == EOpConstructInt8)
  ------------------
  |  Branch (10644:21): [True: 0, False: 0]
  ------------------
10645|      0|                    aggregateOp = EOpConstructInt;
10646|      0|                else
10647|      0|                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2);
10648|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10649|      0|            }
10650|      0|            newNode = intermediate.addConversion(EbtInt8, newNode);
10651|      0|            return newNode;
10652|      0|        }
10653|      0|        break;
10654|       |
10655|      0|    case EOpConstructU8Vec2:
  ------------------
  |  Branch (10655:5): [True: 0, False: 13.2k]
  ------------------
10656|      0|    case EOpConstructU8Vec3:
  ------------------
  |  Branch (10656:5): [True: 0, False: 13.2k]
  ------------------
10657|      0|    case EOpConstructU8Vec4:
  ------------------
  |  Branch (10657:5): [True: 0, False: 13.2k]
  ------------------
10658|      0|    case EOpConstructUint8:
  ------------------
  |  Branch (10658:5): [True: 0, False: 13.2k]
  ------------------
10659|      0|        basicOp = EOpConstructUint8;
10660|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10661|       |        // so construct a 32-bit type and convert
10662|       |        // and do not generate any conversion if it is an identity conversion, i.e. uint8_t(<uint8_t> var)
10663|      0|        if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtUint8)) {
  ------------------
  |  Branch (10663:13): [True: 0, False: 0]
  |  Branch (10663:58): [True: 0, False: 0]
  ------------------
10664|      0|            TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
10665|      0|            newNode = node;
10666|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10666:17): [True: 0, False: 0]
  ------------------
10667|      0|                TOperator aggregateOp;
10668|      0|                if (op == EOpConstructUint8)
  ------------------
  |  Branch (10668:21): [True: 0, False: 0]
  ------------------
10669|      0|                    aggregateOp = EOpConstructUint;
10670|      0|                else
10671|      0|                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2);
10672|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10673|      0|            }
10674|      0|            newNode = intermediate.addConversion(EbtUint8, newNode);
10675|      0|            return newNode;
10676|      0|        }
10677|      0|        break;
10678|       |
10679|      0|    case EOpConstructI16Vec2:
  ------------------
  |  Branch (10679:5): [True: 0, False: 13.2k]
  ------------------
10680|      0|    case EOpConstructI16Vec3:
  ------------------
  |  Branch (10680:5): [True: 0, False: 13.2k]
  ------------------
10681|      0|    case EOpConstructI16Vec4:
  ------------------
  |  Branch (10681:5): [True: 0, False: 13.2k]
  ------------------
10682|      0|    case EOpConstructInt16:
  ------------------
  |  Branch (10682:5): [True: 0, False: 13.2k]
  ------------------
10683|      0|        basicOp = EOpConstructInt16;
10684|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10685|       |        // so construct a 32-bit type and convert
10686|       |        // and do not generate any conversion if it is an identity conversion, i.e. int16_t(<int16_t> var)
10687|      0|        if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtInt16)) {
  ------------------
  |  Branch (10687:13): [True: 0, False: 0]
  |  Branch (10687:59): [True: 0, False: 0]
  ------------------
10688|      0|            TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
10689|      0|            newNode = node;
10690|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10690:17): [True: 0, False: 0]
  ------------------
10691|      0|                TOperator aggregateOp;
10692|      0|                if (op == EOpConstructInt16)
  ------------------
  |  Branch (10692:21): [True: 0, False: 0]
  ------------------
10693|      0|                    aggregateOp = EOpConstructInt;
10694|      0|                else
10695|      0|                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2);
10696|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10697|      0|            }
10698|      0|            newNode = intermediate.addConversion(EbtInt16, newNode);
10699|      0|            return newNode;
10700|      0|        }
10701|      0|        break;
10702|       |
10703|      0|    case EOpConstructU16Vec2:
  ------------------
  |  Branch (10703:5): [True: 0, False: 13.2k]
  ------------------
10704|      0|    case EOpConstructU16Vec3:
  ------------------
  |  Branch (10704:5): [True: 0, False: 13.2k]
  ------------------
10705|      0|    case EOpConstructU16Vec4:
  ------------------
  |  Branch (10705:5): [True: 0, False: 13.2k]
  ------------------
10706|      0|    case EOpConstructUint16:
  ------------------
  |  Branch (10706:5): [True: 0, False: 13.2k]
  ------------------
10707|      0|        basicOp = EOpConstructUint16;
10708|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10709|       |        // so construct a 32-bit type and convert
10710|       |        // and do not generate any conversion if it is an identity conversion, i.e. uint16_t(<uint16_t> var)
10711|      0|        if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtUint16)) {
  ------------------
  |  Branch (10711:13): [True: 0, False: 0]
  |  Branch (10711:59): [True: 0, False: 0]
  ------------------
10712|      0|            TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
10713|      0|            newNode = node;
10714|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10714:17): [True: 0, False: 0]
  ------------------
10715|      0|                TOperator aggregateOp;
10716|      0|                if (op == EOpConstructUint16)
  ------------------
  |  Branch (10716:21): [True: 0, False: 0]
  ------------------
10717|      0|                    aggregateOp = EOpConstructUint;
10718|      0|                else
10719|      0|                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2);
10720|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10721|      0|            }
10722|      0|            newNode = intermediate.addConversion(EbtUint16, newNode);
10723|      0|            return newNode;
10724|      0|        }
10725|      0|        break;
10726|       |
10727|      0|    case EOpConstructI64Vec2:
  ------------------
  |  Branch (10727:5): [True: 0, False: 13.2k]
  ------------------
10728|      0|    case EOpConstructI64Vec3:
  ------------------
  |  Branch (10728:5): [True: 0, False: 13.2k]
  ------------------
10729|      0|    case EOpConstructI64Vec4:
  ------------------
  |  Branch (10729:5): [True: 0, False: 13.2k]
  ------------------
10730|      0|    case EOpConstructInt64:
  ------------------
  |  Branch (10730:5): [True: 0, False: 13.2k]
  ------------------
10731|      0|        basicOp = EOpConstructInt64;
10732|      0|        break;
10733|       |
10734|      0|    case EOpConstructUint64:
  ------------------
  |  Branch (10734:5): [True: 0, False: 13.2k]
  ------------------
10735|      0|        if (type.isScalar() && node->getType().isReference()) {
  ------------------
  |  Branch (10735:13): [True: 0, False: 0]
  |  Branch (10735:32): [True: 0, False: 0]
  ------------------
10736|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUint64, true, node, type);
10737|      0|            return newNode;
10738|      0|        }
10739|      0|        [[fallthrough]];
10740|      0|    case EOpConstructU64Vec2:
  ------------------
  |  Branch (10740:5): [True: 0, False: 13.2k]
  ------------------
10741|      0|    case EOpConstructU64Vec3:
  ------------------
  |  Branch (10741:5): [True: 0, False: 13.2k]
  ------------------
10742|      0|    case EOpConstructU64Vec4:
  ------------------
  |  Branch (10742:5): [True: 0, False: 13.2k]
  ------------------
10743|      0|        basicOp = EOpConstructUint64;
10744|      0|        break;
10745|       |
10746|      0|    case EOpConstructNonuniform:
  ------------------
  |  Branch (10746:5): [True: 0, False: 13.2k]
  ------------------
10747|       |        // Make a nonuniform copy of node
10748|      0|        newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpCopyObject, true, node, type);
10749|      0|        return newNode;
10750|       |
10751|      0|    case EOpConstructReference:
  ------------------
  |  Branch (10751:5): [True: 0, False: 13.2k]
  ------------------
10752|       |        // construct reference from reference
10753|      0|        if (node->getType().isReference()) {
  ------------------
  |  Branch (10753:13): [True: 0, False: 0]
  ------------------
10754|      0|            newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructReference, true, node, type);
10755|      0|            return newNode;
10756|       |        // construct reference from uint64
10757|      0|        } else if (node->getType().isScalar() && node->getType().getBasicType() == EbtUint64) {
  ------------------
  |  Branch (10757:20): [True: 0, False: 0]
  |  Branch (10757:50): [True: 0, False: 0]
  ------------------
10758|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToPtr, true, node,
10759|      0|                type);
10760|      0|            return newNode;
10761|       |        // construct reference from uvec2
10762|      0|        } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint &&
  ------------------
  |  Branch (10762:20): [True: 0, False: 0]
  |  Branch (10762:50): [True: 0, False: 0]
  ------------------
10763|      0|                   node->getVectorSize() == 2) {
  ------------------
  |  Branch (10763:20): [True: 0, False: 0]
  ------------------
10764|      0|            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "uvec2 conversion to reference");
10765|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToPtr, true, node,
10766|      0|                type);
10767|      0|            return newNode;
10768|      0|        } else {
10769|      0|            return nullptr;
10770|      0|        }
10771|       |
10772|      0|    case EOpConstructCooperativeVectorNV:
  ------------------
  |  Branch (10772:5): [True: 0, False: 13.2k]
  ------------------
10773|      0|        if (!node->getType().isCoopVecNV()) {
  ------------------
  |  Branch (10773:13): [True: 0, False: 0]
  ------------------
10774|      0|            if (type.getBasicType() != node->getType().getBasicType()) {
  ------------------
  |  Branch (10774:17): [True: 0, False: 0]
  ------------------
10775|      0|                node = intermediate.addConversion(type.getBasicType(), node);
10776|      0|                if (node == nullptr)
  ------------------
  |  Branch (10776:21): [True: 0, False: 0]
  ------------------
10777|      0|                    return nullptr;
10778|      0|            }
10779|      0|        }
10780|      0|        if (type.getBasicType() != node->getType().getBasicType()) {
  ------------------
  |  Branch (10780:13): [True: 0, False: 0]
  ------------------
10781|      0|            intermediate.buildConvertOp(type.getBasicType(), node->getType().getBasicType(), op);
10782|      0|            node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
10783|      0|            return node;
10784|      0|        }
10785|      0|        if (subset) {
  ------------------
  |  Branch (10785:13): [True: 0, False: 0]
  ------------------
10786|      0|            return node;
10787|      0|        }
10788|       |
10789|      0|        node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
10790|       |
10791|      0|        return node;
10792|       |
10793|      0|    case EOpConstructCooperativeMatrixNV:
  ------------------
  |  Branch (10793:5): [True: 0, False: 13.2k]
  ------------------
10794|      0|    case EOpConstructCooperativeMatrixKHR:
  ------------------
  |  Branch (10794:5): [True: 0, False: 13.2k]
  ------------------
10795|      0|        if (node->getType() == type) {
  ------------------
  |  Branch (10795:13): [True: 0, False: 0]
  ------------------
10796|      0|            return node;
10797|      0|        }
10798|      0|        if (!node->getType().isCoopMat()) {
  ------------------
  |  Branch (10798:13): [True: 0, False: 0]
  ------------------
10799|      0|            if (type.getBasicType() != node->getType().getBasicType()) {
  ------------------
  |  Branch (10799:17): [True: 0, False: 0]
  ------------------
10800|      0|                node = intermediate.addConversion(type.getBasicType(), node);
10801|      0|                if (node == nullptr)
  ------------------
  |  Branch (10801:21): [True: 0, False: 0]
  ------------------
10802|      0|                    return nullptr;
10803|      0|            }
10804|      0|            node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
10805|      0|        } else if (type.sameCoopMatShape(node->getType()) && !type.sameCoopMatUse(node->getType()) &&
  ------------------
  |  Branch (10805:20): [True: 0, False: 0]
  |  Branch (10805:62): [True: 0, False: 0]
  ------------------
10806|      0|                   type.getBasicType() == node->getType().getBasicType()) {
  ------------------
  |  Branch (10806:20): [True: 0, False: 0]
  ------------------
10807|      0|            node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
10808|      0|        } else {
10809|      0|            TOperator op = EOpConvNumeric;
10810|       |
10811|      0|            node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
10812|       |            // If it's a (non-specialization) constant, it must be folded.
10813|      0|            if (node->getAsUnaryNode()->getOperand()->getAsConstantUnion())
  ------------------
  |  Branch (10813:17): [True: 0, False: 0]
  ------------------
10814|      0|                return node->getAsUnaryNode()->getOperand()->getAsConstantUnion()->fold(op, node->getType());
10815|      0|        }
10816|       |
10817|      0|        return node;
10818|       |
10819|      0|    case EOpConstructAccStruct:
  ------------------
  |  Branch (10819:5): [True: 0, False: 13.2k]
  ------------------
10820|      0|        if ((node->getType().isScalar() && node->getType().getBasicType() == EbtUint64)) {
  ------------------
  |  Branch (10820:14): [True: 0, False: 0]
  |  Branch (10820:44): [True: 0, False: 0]
  ------------------
10821|       |            // construct acceleration structure from uint64
10822|      0|            requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uint64_t conversion to acclerationStructureEXT");
10823|      0|            return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToAccStruct, true, node,
10824|      0|                type);
10825|      0|        } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint && node->getVectorSize() == 2) {
  ------------------
  |  Branch (10825:20): [True: 0, False: 0]
  |  Branch (10825:50): [True: 0, False: 0]
  |  Branch (10825:95): [True: 0, False: 0]
  ------------------
10826|       |            // construct acceleration structure from uint64
10827|      0|            requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uvec2 conversion to accelerationStructureEXT");
10828|      0|            return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToAccStruct, true, node,
10829|      0|                type);
10830|      0|        } else
10831|      0|            return nullptr;
10832|       |
10833|      0|    default:
  ------------------
  |  Branch (10833:5): [True: 0, False: 13.2k]
  ------------------
10834|      0|        error(loc, "unsupported construction", "", "");
10835|       |
10836|      0|        return nullptr;
10837|  13.2k|    }
10838|  13.2k|    newNode = intermediate.addUnaryMath(basicOp, node, node->getLoc());
10839|  13.2k|    if (newNode == nullptr) {
  ------------------
  |  Branch (10839:9): [True: 0, False: 13.2k]
  ------------------
10840|      0|        error(loc, "can't convert", "constructor", "");
10841|      0|        return nullptr;
10842|      0|    }
10843|       |
10844|       |    //
10845|       |    // Now, if there still isn't an operation to do the construction, and we need one, add one.
10846|       |    //
10847|       |
10848|       |    // Otherwise, skip out early.
10849|  13.2k|    if (subset || (newNode != node && newNode->getType() == type))
  ------------------
  |  Branch (10849:9): [True: 13.2k, False: 0]
  |  Branch (10849:20): [True: 0, False: 0]
  |  Branch (10849:39): [True: 0, False: 0]
  ------------------
10850|  13.2k|        return newNode;
10851|       |
10852|       |    // setAggregateOperator will insert a new node for the constructor, as needed.
10853|      0|    return intermediate.setAggregateOperator(newNode, op, type, loc);
10854|  13.2k|}
_ZN7glslang13TParseContext12makeVariadicEPNS_9TFunctionERKNS_10TSourceLocE:
10856|  26.6k|void TParseContext::makeVariadic(TFunction *F, const TSourceLoc &loc) {
10857|  26.6k|    if (parsingBuiltins) {
  ------------------
  |  Branch (10857:9): [True: 26.6k, False: 0]
  ------------------
10858|  26.6k|        F->setVariadic();
10859|  26.6k|    } else {
10860|      0|        error(loc, "variadic argument specifier is only available for builtins", "...", "");
10861|      0|    }
10862|  26.6k|}
_ZN7glslang13TParseContext19getParamWithDefaultERKNS_11TPublicTypeEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_12TIntermTypedERKNS_10TSourceLocE:
10866|  26.6k|{
10867|  26.6k|    if (!parsingBuiltins) {
  ------------------
  |  Branch (10867:9): [True: 0, False: 26.6k]
  ------------------
10868|      0|        error(loc, "default argument values are only available for builtins", "=", "");
10869|      0|        initializer = nullptr;
10870|      0|    }
10871|  26.6k|    if (ty.arraySizes) {
  ------------------
  |  Branch (10871:9): [True: 0, False: 26.6k]
  ------------------
10872|      0|        error(loc, "array arguments cannot be default-initialized", identifier->c_str(), "");
10873|      0|        initializer = nullptr;
10874|      0|    }
10875|  26.6k|    if (ty.basicType == EbtVoid) {
  ------------------
  |  Branch (10875:9): [True: 0, False: 26.6k]
  ------------------
10876|      0|        error(loc, "illegal use of type 'void'", identifier->c_str(), "");
10877|      0|        initializer = nullptr;
10878|      0|    }
10879|  26.6k|    reservedErrorCheck(loc, *identifier);
10880|  26.6k|    TParameter param = {identifier, new TType(ty), initializer};
10881|  26.6k|    return param;
10882|  26.6k|}
_ZN7glslang13TParseContext23inheritMemoryQualifiersERKNS_10TQualifierERS1_:
10905|  26.9k|{
10906|  26.9k|    if (from.isReadOnly())
  ------------------
  |  Branch (10906:9): [True: 0, False: 26.9k]
  ------------------
10907|      0|        to.readonly = from.readonly;
10908|  26.9k|    if (from.isWriteOnly())
  ------------------
  |  Branch (10908:9): [True: 0, False: 26.9k]
  ------------------
10909|      0|        to.writeonly = from.writeonly;
10910|  26.9k|    if (from.coherent)
  ------------------
  |  Branch (10910:9): [True: 0, False: 26.9k]
  ------------------
10911|      0|        to.coherent = from.coherent;
10912|  26.9k|    if (from.volatil)
  ------------------
  |  Branch (10912:9): [True: 0, False: 26.9k]
  ------------------
10913|      0|        to.volatil = from.volatil;
10914|  26.9k|    if (from.nontemporal)
  ------------------
  |  Branch (10914:9): [True: 0, False: 26.9k]
  ------------------
10915|      0|        to.nontemporal = from.nontemporal;
10916|  26.9k|    if (from.restrict)
  ------------------
  |  Branch (10916:9): [True: 0, False: 26.9k]
  ------------------
10917|      0|        to.restrict = from.restrict;
10918|  26.9k|}
_ZN7glslang13TParseContext16untypedHeapCheckEPNS_7TSymbolERKNS_5TTypeERKNS_10TSourceLocEPKc:
10993|   427k|{
10994|       |    // EXT_descriptor_heap
10995|   427k|    bool isHeapStruct =
10996|   427k|        (type.getQualifier().storage == EvqSamplerHeap || type.getQualifier().storage == EvqResourceHeap);
  ------------------
  |  Branch (10996:10): [True: 0, False: 427k]
  |  Branch (10996:59): [True: 0, False: 427k]
  ------------------
10997|       |
10998|   427k|    if (intermediate.IsRequestedExtension(E_GL_EXT_descriptor_heap) && spvVersion.vulkan > 0 &&
  ------------------
  |  Branch (10998:9): [True: 0, False: 427k]
  |  Branch (10998:72): [True: 0, False: 0]
  ------------------
10999|      0|        !type.getQualifier().hasSet() && !type.getQualifier().hasBinding()) {
  ------------------
  |  Branch (10999:9): [True: 0, False: 0]
  |  Branch (10999:42): [True: 0, False: 0]
  ------------------
11000|      0|        if (type.getQualifier().layoutDescriptorHeap || isHeapStruct) {
  ------------------
  |  Branch (11000:13): [True: 0, False: 0]
  |  Branch (11000:57): [True: 0, False: 0]
  ------------------
11001|      0|            if ((intermediate.isEsProfile() && intermediate.getVersion() < 310) ||
  ------------------
  |  Branch (11001:18): [True: 0, False: 0]
  |  Branch (11001:48): [True: 0, False: 0]
  ------------------
11002|      0|                (!intermediate.isEsProfile() && intermediate.getVersion() < 420)) {
  ------------------
  |  Branch (11002:18): [True: 0, False: 0]
  |  Branch (11002:49): [True: 0, False: 0]
  ------------------
11003|      0|                TString warnMsg = "layout(descriptor_heap) is turned on beyond version/profile limits.";
11004|      0|                infoSink.info.message(EPrefixWarning, warnMsg.c_str());
11005|      0|            }
11006|      0|            if (IsAnonymous(symbol->getName()) &&
  ------------------
  |  Branch (11006:17): [True: 0, False: 0]
  ------------------
11007|      0|                (type.getQualifier().isUniformOrBuffer() || type.getBasicType() == EbtBlock)) {
  ------------------
  |  Branch (11007:18): [True: 0, False: 0]
  |  Branch (11007:61): [True: 0, False: 0]
  ------------------
11008|      0|                error(loc, "layout(descriptor_heap) decorated block should be explicitly "
11009|      0|                    "declared with a run-time sized array type.", name, "");
11010|      0|                return false;
11011|      0|            }
11012|      0|            if (type.getBasicType() == EbtSampler && type.getSampler().isCombined()) {
  ------------------
  |  Branch (11012:17): [True: 0, False: 0]
  |  Branch (11012:54): [True: 0, False: 0]
  ------------------
11013|      0|                error(loc, "layout(descriptor_heap) cannot be used with combined image samplers.",
11014|      0|                      name, "");
11015|      0|                return false;
11016|      0|            }
11017|      0|            if (!type.containsHeapArray() && !isHeapStruct) {
  ------------------
  |  Branch (11017:17): [True: 0, False: 0]
  |  Branch (11017:46): [True: 0, False: 0]
  ------------------
11018|      0|                error(loc, "layout(descriptor_heap) decorated variable could only be declared as an array.",
11019|      0|                      name, "");
11020|      0|                return false;
11021|      0|            }
11022|       |
11023|      0|            if (isHeapStruct && type.isArray()) {
  ------------------
  |  Branch (11023:17): [True: 0, False: 0]
  |  Branch (11023:33): [True: 0, False: 0]
  ------------------
11024|      0|                error(loc, "resourceheap / samplerheap block cannot itself be an array.", name, "");
11025|      0|                return false;
11026|      0|            }
11027|       |
11028|      0|            descHeapBuiltinRemap(&symbol->getWritableType(), true);
11029|      0|        }
11030|      0|    }
11031|   427k|    return true;
11032|   427k|}
_ZN7glslang13TParseContext12declareBlockERKNS_10TSourceLocERNS_7TVectorINS_8TTypeLocEEEPKNSt3__112basic_stringIcNS8_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_11TArraySizesE:
11044|  6.53k|{
11045|  6.53k|    if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (11045:9): [True: 477, False: 6.06k]
  |  Branch (11045:34): [True: 0, False: 477]
  ------------------
11046|      0|        blockStorageRemap(loc, blockName, currentBlockQualifier);
11047|  6.53k|    blockStageIoCheck(loc, currentBlockQualifier);
11048|  6.53k|    blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr);
11049|  6.53k|    if (arraySizes != nullptr) {
  ------------------
  |  Branch (11049:9): [True: 3.68k, False: 2.85k]
  ------------------
11050|  3.68k|        arraySizesCheck(loc, currentBlockQualifier, arraySizes, nullptr, false);
11051|  3.68k|        arrayOfArrayVersionCheck(loc, arraySizes);
11052|  3.68k|        if (arraySizes->getNumDims() > 1)
  ------------------
  |  Branch (11052:13): [True: 0, False: 3.68k]
  ------------------
11053|      0|            requireProfile(loc, ~EEsProfile, "array-of-array of block");
11054|  3.68k|    }
11055|       |
11056|       |    // Inherit and check member storage qualifiers WRT to the block-level qualifier.
11057|  33.4k|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11057:35): [True: 26.9k, False: 6.53k]
  ------------------
11058|  26.9k|        TType& memberType = *typeList[member].type;
11059|  26.9k|        TQualifier& memberQualifier = memberType.getQualifier();
11060|  26.9k|        const TSourceLoc& memberLoc = typeList[member].loc;
11061|  26.9k|        const bool heapBufferTypeMember =
11062|  26.9k|            isResourceHeapBufferTypeMember(currentBlockQualifier, memberQualifier);
11063|  26.9k|        const bool heapBlockMember =
11064|  26.9k|            currentBlockQualifier.storage == EvqResourceHeap || currentBlockQualifier.storage == EvqSamplerHeap;
  ------------------
  |  Branch (11064:13): [True: 0, False: 26.9k]
  |  Branch (11064:65): [True: 0, False: 26.9k]
  ------------------
11065|  26.9k|        if (memberQualifier.layoutDescriptorHeap && !heapBlockMember)
  ------------------
  |  Branch (11065:13): [True: 0, False: 26.9k]
  |  Branch (11065:53): [True: 0, False: 0]
  ------------------
11066|      0|            error(memberLoc, "can only be used on resourceheap or samplerheap block members", "descriptor heap member", "");
11067|  26.9k|        if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal &&
  ------------------
  |  Branch (11067:13): [True: 24.7k, False: 2.23k]
  |  Branch (11067:56): [True: 0, False: 24.7k]
  ------------------
11068|      0|            memberQualifier.storage != currentBlockQualifier.storage && !heapBufferTypeMember)
  ------------------
  |  Branch (11068:13): [True: 0, False: 0]
  |  Branch (11068:73): [True: 0, False: 0]
  ------------------
11069|      0|            error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), "");
11070|  26.9k|        if (!heapBufferTypeMember)
  ------------------
  |  Branch (11070:13): [True: 26.9k, False: 0]
  ------------------
11071|  26.9k|            memberQualifier.storage = currentBlockQualifier.storage;
11072|  26.9k|        globalQualifierFixCheck(memberLoc, memberQualifier);
11073|  26.9k|        inheritMemoryQualifiers(currentBlockQualifier, memberQualifier);
11074|  26.9k|        if (currentBlockQualifier.perPrimitiveNV)
  ------------------
  |  Branch (11074:13): [True: 4.91k, False: 22.0k]
  ------------------
11075|  4.91k|            memberQualifier.perPrimitiveNV = currentBlockQualifier.perPrimitiveNV;
11076|  26.9k|        if (currentBlockQualifier.perViewNV)
  ------------------
  |  Branch (11076:13): [True: 0, False: 26.9k]
  ------------------
11077|      0|            memberQualifier.perViewNV = currentBlockQualifier.perViewNV;
11078|  26.9k|        if (currentBlockQualifier.perTaskNV)
  ------------------
  |  Branch (11078:13): [True: 0, False: 26.9k]
  ------------------
11079|      0|            memberQualifier.perTaskNV = currentBlockQualifier.perTaskNV;
11080|  26.9k|        if (currentBlockQualifier.storage == EvqtaskPayloadSharedEXT)
  ------------------
  |  Branch (11080:13): [True: 0, False: 26.9k]
  ------------------
11081|      0|            memberQualifier.storage = EvqtaskPayloadSharedEXT;
11082|  26.9k|        if (memberQualifier.storage == EvqSpirvStorageClass)
  ------------------
  |  Branch (11082:13): [True: 0, False: 26.9k]
  ------------------
11083|      0|            error(memberLoc, "member cannot have a spirv_storage_class qualifier", memberType.getFieldName().c_str(), "");
11084|  26.9k|        if (memberQualifier.hasSpirvDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty())
  ------------------
  |  Branch (11084:13): [True: 0, False: 26.9k]
  |  Branch (11084:51): [True: 0, False: 0]
  ------------------
11085|      0|            error(memberLoc, "member cannot have a spirv_decorate_id qualifier", memberType.getFieldName().c_str(), "");
11086|  26.9k|        if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary()))
  ------------------
  |  Branch (11086:14): [True: 0, False: 26.9k]
  |  Branch (11086:61): [True: 0, False: 26.9k]
  |  Branch (11086:109): [True: 0, False: 0]
  |  Branch (11086:146): [True: 0, False: 0]
  ------------------
11087|      0|            error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), "");
11088|  26.9k|        if (memberType.isArray())
  ------------------
  |  Branch (11088:13): [True: 11.1k, False: 15.7k]
  ------------------
11089|  11.1k|            arraySizesCheck(memberLoc, currentBlockQualifier, memberType.getArraySizes(), nullptr, member == typeList.size() - 1);
11090|  26.9k|        if (memberQualifier.hasOffset()) {
  ------------------
  |  Branch (11090:13): [True: 0, False: 26.9k]
  ------------------
11091|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (11091:17): [True: 0, False: 0]
  ------------------
11092|      0|                profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "\"offset\" on block member");
11093|      0|                profileRequires(memberLoc, EEsProfile, 300, E_GL_ARB_enhanced_layouts, "\"offset\" on block member");
11094|      0|            }
11095|      0|        }
11096|       |
11097|  26.9k|        if (memberQualifier.layoutDescriptorSize != TQualifier::layoutDescriptorSizeEnd && !heapBlockMember)
  ------------------
  |  Branch (11097:13): [True: 0, False: 26.9k]
  |  Branch (11097:92): [True: 0, False: 0]
  ------------------
11098|      0|            error(memberLoc, "can only be used on resourceheap or samplerheap block members", "descriptor_size", "");
11099|       |
11100|       |        // For bindless texture, sampler can be declared as uniform/storage block member,
11101|  26.9k|        if (memberType.containsOpaque() && !extensionTurnedOn(E_GL_EXT_structured_descriptor_heap)) {
  ------------------
  |  Branch (11101:13): [True: 0, False: 26.9k]
  |  Branch (11101:44): [True: 0, False: 0]
  ------------------
11102|      0|            if (memberType.containsSampler() && extensionTurnedOn(E_GL_ARB_bindless_texture))
  ------------------
  |  Branch (11102:17): [True: 0, False: 0]
  |  Branch (11102:49): [True: 0, False: 0]
  ------------------
11103|      0|                updateBindlessQualifier(memberType);
11104|      0|            else
11105|      0|                error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), "");
11106|      0|        }
11107|       |
11108|  26.9k|        if (memberType.containsCoopMat())
  ------------------
  |  Branch (11108:13): [True: 0, False: 26.9k]
  ------------------
11109|      0|            error(memberLoc, "member of block cannot be or contain a cooperative matrix type", typeList[member].type->getFieldName().c_str(), "");
11110|       |
11111|  26.9k|        if (memberType.containsCoopVec())
  ------------------
  |  Branch (11111:13): [True: 0, False: 26.9k]
  ------------------
11112|      0|            error(memberLoc, "member of block cannot be or contain a cooperative vector type", typeList[member].type->getFieldName().c_str(), "");
11113|       |
11114|  26.9k|        if (memberType.containsOcpMicroscalingNonByteFloat())
  ------------------
  |  Branch (11114:13): [True: 0, False: 26.9k]
  ------------------
11115|      0|            error(memberLoc, "member of block cannot be or contain a sub-byte type", typeList[member].type->getFieldName().c_str(), "");
11116|  26.9k|    }
11117|       |
11118|       |    // This might be a redeclaration of a built-in block.  If so, redeclareBuiltinBlock() will
11119|       |    // do all the rest.
11120|  6.53k|    if (! symbolTable.atBuiltInLevel() && builtInName(*blockName)) {
  ------------------
  |  Branch (11120:9): [True: 0, False: 6.53k]
  |  Branch (11120:43): [True: 0, False: 0]
  ------------------
11121|      0|        redeclareBuiltinBlock(loc, typeList, *blockName, instanceName, arraySizes);
11122|      0|        return nullptr;
11123|      0|    }
11124|       |
11125|       |    // Not a redeclaration of a built-in; check that all names are user names.
11126|  6.53k|    reservedErrorCheck(loc, *blockName);
11127|  6.53k|    if (instanceName)
  ------------------
  |  Branch (11127:9): [True: 3.68k, False: 2.85k]
  ------------------
11128|  3.68k|        reservedErrorCheck(loc, *instanceName);
11129|  33.4k|    for (unsigned int member = 0; member < typeList.size(); ++member)
  ------------------
  |  Branch (11129:35): [True: 26.9k, False: 6.53k]
  ------------------
11130|  26.9k|        reservedErrorCheck(typeList[member].loc, typeList[member].type->getFieldName());
11131|       |
11132|       |    // Make default block qualification, and adjust the member qualifications
11133|       |
11134|  6.53k|    TQualifier defaultQualification;
11135|  6.53k|    switch (currentBlockQualifier.storage) {
11136|      0|    case EvqUniform:    defaultQualification = globalUniformDefaults;    break;
  ------------------
  |  Branch (11136:5): [True: 0, False: 6.53k]
  ------------------
11137|      0|    case EvqBuffer:     defaultQualification = globalBufferDefaults;     break;
  ------------------
  |  Branch (11137:5): [True: 0, False: 6.53k]
  ------------------
11138|    946|    case EvqVaryingIn:  defaultQualification = globalInputDefaults;      break;
  ------------------
  |  Branch (11138:5): [True: 946, False: 5.59k]
  ------------------
11139|  5.59k|    case EvqVaryingOut: defaultQualification = globalOutputDefaults;     break;
  ------------------
  |  Branch (11139:5): [True: 5.59k, False: 946]
  ------------------
11140|      0|    case EvqShared:     defaultQualification = globalSharedDefaults;     break;
  ------------------
  |  Branch (11140:5): [True: 0, False: 6.53k]
  ------------------
11141|      0|    default:            defaultQualification.clear();                    break;
  ------------------
  |  Branch (11141:5): [True: 0, False: 6.53k]
  ------------------
11142|  6.53k|    }
11143|       |
11144|       |    // Special case for "push_constant uniform", which has a default of std430,
11145|       |    // contrary to normal uniform defaults, and can't have a default tracked for it.
11146|  6.53k|    if ((currentBlockQualifier.isPushConstant() && !currentBlockQualifier.hasPacking()) ||
  ------------------
  |  Branch (11146:10): [True: 0, False: 6.53k]
  |  Branch (11146:52): [True: 0, False: 0]
  ------------------
11147|  6.53k|        (currentBlockQualifier.isShaderRecord() && !currentBlockQualifier.hasPacking()))
  ------------------
  |  Branch (11147:10): [True: 0, False: 6.53k]
  |  Branch (11147:52): [True: 0, False: 0]
  ------------------
11148|      0|        currentBlockQualifier.layoutPacking = ElpStd430;
11149|       |
11150|       |    // Special case for "taskNV in/out", which has a default of std430,
11151|  6.53k|    if (currentBlockQualifier.isTaskMemory() && !currentBlockQualifier.hasPacking())
  ------------------
  |  Branch (11151:9): [True: 0, False: 6.53k]
  |  Branch (11151:49): [True: 0, False: 0]
  ------------------
11152|      0|        currentBlockQualifier.layoutPacking = ElpStd430;
11153|       |
11154|       |    // fix and check for member layout qualifiers
11155|       |
11156|  6.53k|    mergeObjectLayoutQualifiers(defaultQualification, currentBlockQualifier, true);
11157|       |
11158|       |    // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts."
11159|  6.53k|    if (currentBlockQualifier.hasAlign()) {
  ------------------
  |  Branch (11159:9): [True: 0, False: 6.53k]
  ------------------
11160|      0|        if (defaultQualification.layoutPacking != ElpStd140 &&
  ------------------
  |  Branch (11160:13): [True: 0, False: 0]
  ------------------
11161|      0|            defaultQualification.layoutPacking != ElpStd430 &&
  ------------------
  |  Branch (11161:13): [True: 0, False: 0]
  ------------------
11162|      0|            defaultQualification.layoutPacking != ElpScalar) {
  ------------------
  |  Branch (11162:13): [True: 0, False: 0]
  ------------------
11163|      0|            error(loc, "can only be used with std140, std430, or scalar layout packing", "align", "");
11164|      0|            defaultQualification.layoutAlign = -1;
11165|      0|        }
11166|      0|    }
11167|       |
11168|  6.53k|    bool memberWithLocation = false;
11169|  6.53k|    bool memberWithoutLocation = false;
11170|  6.53k|    bool memberWithPerViewQualifier = false;
11171|  33.4k|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11171:35): [True: 26.9k, False: 6.53k]
  ------------------
11172|  26.9k|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
11173|  26.9k|        const TSourceLoc& memberLoc = typeList[member].loc;
11174|  26.9k|        const bool heapBufferTypeMember =
11175|  26.9k|            isResourceHeapBufferTypeMember(currentBlockQualifier, memberQualifier);
11176|  26.9k|        if (memberQualifier.hasStream()) {
  ------------------
  |  Branch (11176:13): [True: 0, False: 26.9k]
  ------------------
11177|      0|            if (defaultQualification.layoutStream != memberQualifier.layoutStream)
  ------------------
  |  Branch (11177:17): [True: 0, False: 0]
  ------------------
11178|      0|                error(memberLoc, "member cannot contradict block", "stream", "");
11179|      0|        }
11180|       |
11181|       |        // "This includes a block's inheritance of the
11182|       |        // current global default buffer, a block member's inheritance of the block's
11183|       |        // buffer, and the requirement that any *xfb_buffer* declared on a block
11184|       |        // member must match the buffer inherited from the block."
11185|  26.9k|        if (memberQualifier.hasXfbBuffer()) {
  ------------------
  |  Branch (11185:13): [True: 0, False: 26.9k]
  ------------------
11186|      0|            if (defaultQualification.layoutXfbBuffer != memberQualifier.layoutXfbBuffer)
  ------------------
  |  Branch (11186:17): [True: 0, False: 0]
  ------------------
11187|      0|                error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", "");
11188|      0|        }
11189|       |
11190|  26.9k|        if (memberQualifier.hasPacking() && !heapBufferTypeMember)
  ------------------
  |  Branch (11190:13): [True: 0, False: 26.9k]
  |  Branch (11190:45): [True: 0, False: 0]
  ------------------
11191|      0|            error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), "");
11192|  26.9k|        if (memberQualifier.hasLocation()) {
  ------------------
  |  Branch (11192:13): [True: 0, False: 26.9k]
  ------------------
11193|      0|            const char* feature = "location on block member";
11194|      0|            switch (currentBlockQualifier.storage) {
11195|      0|            case EvqVaryingIn:
  ------------------
  |  Branch (11195:13): [True: 0, False: 0]
  ------------------
11196|      0|            case EvqVaryingOut:
  ------------------
  |  Branch (11196:13): [True: 0, False: 0]
  ------------------
11197|      0|                requireProfile(memberLoc, ECoreProfile | ECompatibilityProfile | EEsProfile, feature);
11198|      0|                profileRequires(memberLoc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature);
11199|      0|                profileRequires(memberLoc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
11200|      0|                memberWithLocation = true;
11201|      0|                break;
11202|      0|            default:
  ------------------
  |  Branch (11202:13): [True: 0, False: 0]
  ------------------
11203|      0|                error(memberLoc, "can only use in an in/out block", feature, "");
11204|      0|                break;
11205|      0|            }
11206|      0|        } else
11207|  26.9k|            memberWithoutLocation = true;
11208|       |
11209|       |        // "The offset qualifier can only be used on block members of blocks declared with std140 or std430 layouts."
11210|       |        // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts."
11211|  26.9k|        if (memberQualifier.hasAlign() || memberQualifier.hasOffset()) {
  ------------------
  |  Branch (11211:13): [True: 0, False: 26.9k]
  |  Branch (11211:43): [True: 0, False: 26.9k]
  ------------------
11212|      0|            if (defaultQualification.layoutPacking != ElpStd140 &&
  ------------------
  |  Branch (11212:17): [True: 0, False: 0]
  ------------------
11213|      0|                defaultQualification.layoutPacking != ElpStd430 &&
  ------------------
  |  Branch (11213:17): [True: 0, False: 0]
  ------------------
11214|      0|                defaultQualification.layoutPacking != ElpScalar)
  ------------------
  |  Branch (11214:17): [True: 0, False: 0]
  ------------------
11215|      0|                error(memberLoc, "can only be used with std140, std430, or scalar layout packing", "offset/align", "");
11216|      0|        }
11217|       |
11218|  26.9k|        if (memberQualifier.isPerView()) {
  ------------------
  |  Branch (11218:13): [True: 2.23k, False: 24.7k]
  ------------------
11219|  2.23k|            memberWithPerViewQualifier = true;
11220|  2.23k|        }
11221|       |
11222|  26.9k|        TQualifier newMemberQualification = defaultQualification;
11223|  26.9k|        mergeQualifiers(memberLoc, newMemberQualification, memberQualifier, false);
11224|  26.9k|        memberQualifier = newMemberQualification;
11225|  26.9k|    }
11226|       |
11227|  6.53k|    layoutMemberLocationArrayCheck(loc, memberWithLocation, arraySizes);
11228|       |
11229|       |    // Ensure that the block has an XfbBuffer assigned. This is needed
11230|       |    // because if the block has a XfbOffset assigned, then it is
11231|       |    // assumed that it has implicitly assigned the current global
11232|       |    // XfbBuffer, and because it's members need to be assigned a
11233|       |    // XfbOffset if they lack it.
11234|  6.53k|    if (currentBlockQualifier.storage == EvqVaryingOut && globalOutputDefaults.hasXfbBuffer()) {
  ------------------
  |  Branch (11234:9): [True: 5.59k, False: 946]
  |  Branch (11234:59): [True: 3.80k, False: 1.78k]
  ------------------
11235|  3.80k|       if (!currentBlockQualifier.hasXfbBuffer() && currentBlockQualifier.hasXfbOffset())
  ------------------
  |  Branch (11235:12): [True: 3.80k, False: 0]
  |  Branch (11235:53): [True: 0, False: 3.80k]
  ------------------
11236|      0|          currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
11237|  3.80k|    }
11238|       |
11239|       |    // Process the members
11240|  6.53k|    fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation);
11241|  6.53k|    fixXfbOffsets(currentBlockQualifier, typeList);
11242|  6.53k|    fixBlockUniformOffsets(currentBlockQualifier, typeList);
11243|  6.53k|    fixBlockUniformLayoutMatrix(currentBlockQualifier, &typeList, nullptr);
11244|  6.53k|    fixBlockUniformLayoutPacking(currentBlockQualifier, &typeList, nullptr);
11245|  33.4k|    for (unsigned int member = 0; member < typeList.size(); ++member)
  ------------------
  |  Branch (11245:35): [True: 26.9k, False: 6.53k]
  ------------------
11246|  26.9k|        layoutTypeCheck(typeList[member].loc, *typeList[member].type);
11247|       |
11248|  6.53k|    if (memberWithPerViewQualifier) {
  ------------------
  |  Branch (11248:9): [True: 894, False: 5.64k]
  ------------------
11249|  6.70k|        for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11249:39): [True: 5.81k, False: 894]
  ------------------
11250|  5.81k|            checkAndResizeMeshViewDim(typeList[member].loc, *typeList[member].type, /*isBlockMember*/ true);
11251|  5.81k|        }
11252|    894|    }
11253|       |
11254|       |    // reverse merge, so that currentBlockQualifier now has all layout information
11255|       |    // (can't use defaultQualification directly, it's missing other non-layout-default-class qualifiers)
11256|  6.53k|    mergeObjectLayoutQualifiers(currentBlockQualifier, defaultQualification, true);
11257|       |
11258|       |    //
11259|       |    // Build and add the interface block as a new type named 'blockName'
11260|       |    //
11261|       |
11262|  6.53k|    TType blockType(&typeList, *blockName, currentBlockQualifier);
11263|  6.53k|    if (arraySizes != nullptr)
  ------------------
  |  Branch (11263:9): [True: 3.68k, False: 2.85k]
  ------------------
11264|  3.68k|        blockType.transferArraySizes(arraySizes);
11265|       |
11266|  6.53k|    if (arraySizes == nullptr)
  ------------------
  |  Branch (11266:9): [True: 2.85k, False: 3.68k]
  ------------------
11267|  2.85k|        ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName);
  ------------------
  |  Branch (11267:38): [True: 0, False: 2.85k]
  ------------------
11268|  6.53k|    if (currentBlockQualifier.hasBufferReference()) {
  ------------------
  |  Branch (11268:9): [True: 0, False: 6.53k]
  ------------------
11269|       |
11270|      0|        if (currentBlockQualifier.storage != EvqBuffer)
  ------------------
  |  Branch (11270:13): [True: 0, False: 0]
  ------------------
11271|      0|            error(loc, "can only be used with buffer", "buffer_reference", "");
11272|       |
11273|       |        // Create the block reference type. If it was forward-declared, detect that
11274|       |        // as a referent struct type with no members. Replace the referent type with
11275|       |        // blockType.
11276|      0|        TType blockNameType(EbtReference, blockType, *blockName);
11277|      0|        TVariable* blockNameVar = new TVariable(blockName, blockNameType, true);
11278|      0|        if (! symbolTable.insert(*blockNameVar)) {
  ------------------
  |  Branch (11278:13): [True: 0, False: 0]
  ------------------
11279|      0|            TSymbol* existingName = symbolTable.find(*blockName);
11280|      0|            if (existingName->getType().isReference() &&
  ------------------
  |  Branch (11280:17): [True: 0, False: 0]
  ------------------
11281|      0|                existingName->getType().getReferentType()->getStruct() &&
  ------------------
  |  Branch (11281:17): [True: 0, False: 0]
  ------------------
11282|      0|                existingName->getType().getReferentType()->getStruct()->size() == 0 &&
  ------------------
  |  Branch (11282:17): [True: 0, False: 0]
  ------------------
11283|      0|                existingName->getType().getQualifier().storage == blockType.getQualifier().storage) {
  ------------------
  |  Branch (11283:17): [True: 0, False: 0]
  ------------------
11284|      0|                existingName->getType().getReferentType()->deepCopy(blockType);
11285|      0|            } else {
11286|      0|                error(loc, "block name cannot be redefined", blockName->c_str(), "");
11287|      0|            }
11288|      0|        }
11289|      0|        if (!instanceName) {
  ------------------
  |  Branch (11289:13): [True: 0, False: 0]
  ------------------
11290|      0|            return nullptr;
11291|      0|        }
11292|  6.53k|    } else if (currentBlockQualifier.isBufferType()) {
  ------------------
  |  Branch (11292:16): [True: 0, False: 6.53k]
  ------------------
11293|       |        // buffer_type creates an opaque type named by the block, not a global block instance.
11294|      0|        TVariable* blockNameVar = new TVariable(blockName, blockType, true);
11295|      0|        if (! symbolTable.insert(*blockNameVar)) {
  ------------------
  |  Branch (11295:13): [True: 0, False: 0]
  ------------------
11296|      0|            error(loc, "block name cannot be redefined", blockName->c_str(), "");
11297|      0|            return nullptr;
11298|      0|        }
11299|      0|        if (!instanceName)
  ------------------
  |  Branch (11299:13): [True: 0, False: 0]
  ------------------
11300|      0|            return nullptr;
11301|  6.53k|    } else {
11302|       |        //
11303|       |        // Don't make a user-defined type out of block name; that will cause an error
11304|       |        // if the same block name gets reused in a different interface.
11305|       |        //
11306|       |        // "Block names have no other use within a shader
11307|       |        // beyond interface matching; it is a compile-time error to use a block name at global scope for anything
11308|       |        // other than as a block name (e.g., use of a block name for a global variable name or function name is
11309|       |        // currently reserved)."
11310|       |        //
11311|       |        // Use the symbol table to prevent normal reuse of the block's name, as a variable entry,
11312|       |        // whose type is EbtBlock, but without all the structure; that will come from the type
11313|       |        // the instances point to.
11314|       |        //
11315|  6.53k|        TType blockNameType(EbtBlock, blockType.getQualifier().storage);
11316|  6.53k|        TVariable* blockNameVar = new TVariable(blockName, blockNameType);
11317|  6.53k|        if (! symbolTable.insert(*blockNameVar)) {
  ------------------
  |  Branch (11317:13): [True: 946, False: 5.59k]
  ------------------
11318|    946|            TSymbol* existingName = symbolTable.find(*blockName);
11319|    946|            if (existingName->getType().getBasicType() == EbtBlock) {
  ------------------
  |  Branch (11319:17): [True: 946, False: 0]
  ------------------
11320|    946|                if (existingName->getType().getQualifier().storage == blockType.getQualifier().storage) {
  ------------------
  |  Branch (11320:21): [True: 0, False: 946]
  ------------------
11321|      0|                    error(loc, "Cannot reuse block name within the same interface:", blockName->c_str(), blockType.getStorageQualifierString());
11322|      0|                    return nullptr;
11323|      0|                }
11324|    946|            } else {
11325|      0|                error(loc, "block name cannot redefine a non-block name", blockName->c_str(), "");
11326|      0|                return nullptr;
11327|      0|            }
11328|    946|        }
11329|  6.53k|    }
11330|       |
11331|       |    // Add the variable, as anonymous or named instanceName.
11332|       |    // Make an anonymous variable if no name was provided.
11333|  6.53k|    if (! instanceName)
  ------------------
  |  Branch (11333:9): [True: 2.85k, False: 3.68k]
  ------------------
11334|  2.85k|        instanceName = NewPoolTString("");
11335|       |
11336|  6.53k|    TVariable& variable = *new TVariable(instanceName, blockType);
11337|  6.53k|    if (! symbolTable.insert(variable)) {
  ------------------
  |  Branch (11337:9): [True: 0, False: 6.53k]
  ------------------
11338|      0|        if (*instanceName == "")
  ------------------
  |  Branch (11338:13): [True: 0, False: 0]
  ------------------
11339|      0|            error(loc, "nameless block contains a member that already has a name at global scope", blockName->c_str(), "");
11340|      0|        else
11341|      0|            error(loc, "block instance name redefinition", variable.getName().c_str(), "");
11342|       |
11343|      0|        return nullptr;
11344|      0|    }
11345|       |
11346|       |    // EXT_descriptor_heap
11347|  6.53k|    if (!untypedHeapCheck(&variable, blockType, loc, blockName->c_str())) {
  ------------------
  |  Branch (11347:9): [True: 0, False: 6.53k]
  ------------------
11348|      0|        return nullptr;
11349|      0|    }
11350|       |
11351|       |    // Check for general layout qualifier errors
11352|  6.53k|    layoutObjectCheck(loc, variable);
11353|       |
11354|       |    // fix up
11355|  6.53k|    if (isIoResizeArray(blockType)) {
  ------------------
  |  Branch (11355:9): [True: 3.68k, False: 2.85k]
  ------------------
11356|  3.68k|        ioArraySymbolResizeList.push_back(&variable);
11357|  3.68k|        checkIoArraysConsistency(loc, true);
11358|  3.68k|    } else
11359|  2.85k|        fixIoArraySize(loc, variable.getWritableType());
11360|       |
11361|       |    // Save it in the AST for linker use.
11362|  6.53k|    trackLinkage(variable);
11363|       |
11364|  6.53k|    TIntermAggregate* declNode = nullptr;
11365|  6.53k|    if (intermediate.getDebugInfo()) {
  ------------------
  |  Branch (11365:9): [True: 0, False: 6.53k]
  ------------------
11366|      0|        auto blockDeclNode = new TIntermVariableDecl(intermediate.addSymbol(variable, loc), nullptr);
11367|      0|        blockDeclNode->setLoc(loc);
11368|       |
11369|       |        // We have to wrap the declaration with a sequence to fit the same processing logic with variables.
11370|      0|        declNode = new TIntermAggregate(EOpSequence);
11371|      0|        declNode->getSequence().push_back(blockDeclNode);
11372|      0|    }
11373|  6.53k|    return declNode;
11374|  6.53k|}
_ZN7glslang13TParseContext17blockStageIoCheckERKNS_10TSourceLocERKNS_10TQualifierE:
11390|  6.53k|{
11391|  6.53k|    const char *extsrt[2] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
11392|  6.53k|    switch (qualifier.storage) {
11393|      0|    case EvqUniform:
  ------------------
  |  Branch (11393:5): [True: 0, False: 6.53k]
  ------------------
11394|      0|        profileRequires(loc, EEsProfile, 300, nullptr, "uniform block");
11395|      0|        profileRequires(loc, ENoProfile, 140, E_GL_ARB_uniform_buffer_object, "uniform block");
11396|      0|        if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.isPushConstant())
  ------------------
  |  Branch (11396:13): [True: 0, False: 0]
  |  Branch (11396:65): [True: 0, False: 0]
  ------------------
11397|      0|            requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "std430 requires the buffer storage qualifier");
11398|      0|        break;
11399|      0|    case EvqBuffer:
  ------------------
  |  Branch (11399:5): [True: 0, False: 6.53k]
  ------------------
11400|      0|        requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "buffer block");
11401|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_shader_storage_buffer_object, "buffer block");
11402|      0|        profileRequires(loc, EEsProfile, 310, nullptr, "buffer block");
11403|      0|        break;
11404|    946|    case EvqVaryingIn:
  ------------------
  |  Branch (11404:5): [True: 946, False: 5.59k]
  ------------------
11405|    946|        profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "input block");
11406|       |        // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader
11407|       |        // "Compute shaders do not permit user-defined input variables..."
11408|    946|        requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|
11409|    946|            EShLangFragmentMask|EShLangMeshMask), "input block");
11410|    946|        if (language == EShLangFragment) {
  ------------------
  |  Branch (11410:13): [True: 0, False: 946]
  ------------------
11411|      0|            profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
11412|    946|        } else if (language == EShLangMesh && ! qualifier.isTaskMemory()) {
  ------------------
  |  Branch (11412:20): [True: 0, False: 946]
  |  Branch (11412:47): [True: 0, False: 0]
  ------------------
11413|      0|            error(loc, "input blocks cannot be used in a mesh shader", "out", "");
11414|      0|        }
11415|    946|        break;
11416|  5.59k|    case EvqVaryingOut:
  ------------------
  |  Branch (11416:5): [True: 5.59k, False: 946]
  ------------------
11417|  5.59k|        profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
11418|  5.59k|        requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|
11419|  5.59k|            EShLangGeometryMask|EShLangMeshMask|EShLangTaskMask), "output block");
11420|       |        // ES 310 can have a block before shader_io is turned on, so skip this test for built-ins
11421|  5.59k|        if (language == EShLangVertex && ! parsingBuiltins) {
  ------------------
  |  Branch (11421:13): [True: 953, False: 4.64k]
  |  Branch (11421:42): [True: 0, False: 953]
  ------------------
11422|      0|            profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
11423|  5.59k|        } else if (language == EShLangMesh && qualifier.isTaskMemory()) {
  ------------------
  |  Branch (11423:20): [True: 1.78k, False: 3.80k]
  |  Branch (11423:47): [True: 0, False: 1.78k]
  ------------------
11424|      0|            error(loc, "can only use on input blocks in mesh shader", "taskNV", "");
11425|  5.59k|        } else if (language == EShLangTask && ! qualifier.isTaskMemory()) {
  ------------------
  |  Branch (11425:20): [True: 0, False: 5.59k]
  |  Branch (11425:47): [True: 0, False: 0]
  ------------------
11426|      0|            error(loc, "output blocks cannot be used in a task shader", "out", "");
11427|      0|        }
11428|  5.59k|        break;
11429|      0|    case EvqShared:
  ------------------
  |  Branch (11429:5): [True: 0, False: 6.53k]
  ------------------
11430|      0|        if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4) {
  ------------------
  |  Branch (11430:13): [True: 0, False: 0]
  |  Branch (11430:35): [True: 0, False: 0]
  ------------------
11431|      0|            error(loc, "shared block requires at least SPIR-V 1.4", "shared block", "");
11432|      0|        }
11433|      0|        profileRequires(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shared_memory_block, "shared block");
11434|      0|        break;
11435|      0|    case EvqPayload:
  ------------------
  |  Branch (11435:5): [True: 0, False: 6.53k]
  ------------------
11436|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadNV block");
11437|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
11438|      0|            "rayPayloadNV block");
11439|      0|        break;
11440|      0|    case EvqPayloadIn:
  ------------------
  |  Branch (11440:5): [True: 0, False: 6.53k]
  ------------------
11441|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadInNV block");
11442|      0|        requireStage(loc, (EShLanguageMask)(EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
11443|      0|            "rayPayloadInNV block");
11444|      0|        break;
11445|      0|    case EvqHitAttr:
  ------------------
  |  Branch (11445:5): [True: 0, False: 6.53k]
  ------------------
11446|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "hitAttributeNV block");
11447|      0|        requireStage(loc, (EShLanguageMask)(EShLangIntersectMask | EShLangAnyHitMask | EShLangClosestHitMask), "hitAttributeNV block");
11448|      0|        break;
11449|      0|    case EvqCallableData:
  ------------------
  |  Branch (11449:5): [True: 0, False: 6.53k]
  ------------------
11450|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataNV block");
11451|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask),
11452|      0|            "callableDataNV block");
11453|      0|        break;
11454|      0|    case EvqCallableDataIn:
  ------------------
  |  Branch (11454:5): [True: 0, False: 6.53k]
  ------------------
11455|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataInNV block");
11456|      0|        requireStage(loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV block");
11457|      0|        break;
11458|      0|    case EvqHitObjectAttrNV:
  ------------------
  |  Branch (11458:5): [True: 0, False: 6.53k]
  ------------------
11459|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV block");
11460|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask), "hitObjectAttributeNV block");
11461|      0|        break;
11462|      0|    case EvqHitObjectAttrEXT:
  ------------------
  |  Branch (11462:5): [True: 0, False: 6.53k]
  ------------------
11463|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_shader_invocation_reorder, "hitObjectAttributeEXT block");
11464|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask), "hitObjectAttributeEXT block");
11465|      0|        break;
11466|      0|    case EvqResourceHeap:
  ------------------
  |  Branch (11466:5): [True: 0, False: 6.53k]
  ------------------
11467|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_structured_descriptor_heap, "resourceheap block");
11468|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_descriptor_heap, "resourceheap block");
11469|      0|        break;
11470|      0|    case EvqSamplerHeap:
  ------------------
  |  Branch (11470:5): [True: 0, False: 6.53k]
  ------------------
11471|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_structured_descriptor_heap, "samplerheap block");
11472|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_descriptor_heap, "samplerheap block");
11473|      0|        break;
11474|      0|    default:
  ------------------
  |  Branch (11474:5): [True: 0, False: 6.53k]
  ------------------
11475|      0|        error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), "");
11476|      0|        break;
11477|  6.53k|    }
11478|  6.53k|}
_ZN7glslang13TParseContext19blockQualifierCheckERKNS_10TSourceLocERKNS_10TQualifierEb:
11482|  6.53k|{
11483|       |    // The 4.5 specification says:
11484|       |    //
11485|       |    // interface-block :
11486|       |    //    layout-qualifieropt interface-qualifier  block-name { member-list } instance-nameopt ;
11487|       |    //
11488|       |    // interface-qualifier :
11489|       |    //    in
11490|       |    //    out
11491|       |    //    patch in
11492|       |    //    patch out
11493|       |    //    uniform
11494|       |    //    buffer
11495|       |    //
11496|       |    // Note however memory qualifiers aren't included, yet the specification also says
11497|       |    //
11498|       |    // "...memory qualifiers may also be used in the declaration of shader storage blocks..."
11499|       |
11500|  6.53k|    if (qualifier.isInterpolation())
  ------------------
  |  Branch (11500:9): [True: 0, False: 6.53k]
  ------------------
11501|      0|        error(loc, "cannot use interpolation qualifiers on an interface block", "flat/smooth/noperspective", "");
11502|  6.53k|    if (qualifier.centroid)
  ------------------
  |  Branch (11502:9): [True: 0, False: 6.53k]
  ------------------
11503|      0|        error(loc, "cannot use centroid qualifier on an interface block", "centroid", "");
11504|  6.53k|    if (qualifier.isSample())
  ------------------
  |  Branch (11504:9): [True: 0, False: 6.53k]
  ------------------
11505|      0|        error(loc, "cannot use sample qualifier on an interface block", "sample", "");
11506|  6.53k|    if (qualifier.invariant)
  ------------------
  |  Branch (11506:9): [True: 0, False: 6.53k]
  ------------------
11507|      0|        error(loc, "cannot use invariant qualifier on an interface block", "invariant", "");
11508|  6.53k|    if (qualifier.isPushConstant())
  ------------------
  |  Branch (11508:9): [True: 0, False: 6.53k]
  ------------------
11509|      0|        intermediate.addPushConstantCount();
11510|  6.53k|    if (qualifier.isShaderRecord())
  ------------------
  |  Branch (11510:9): [True: 0, False: 6.53k]
  ------------------
11511|      0|        intermediate.addShaderRecordCount();
11512|  6.53k|    if (qualifier.isTaskMemory())
  ------------------
  |  Branch (11512:9): [True: 0, False: 6.53k]
  ------------------
11513|      0|        intermediate.addTaskNVCount();
11514|  6.53k|    if (qualifier.isBufferType()) {
  ------------------
  |  Branch (11514:9): [True: 0, False: 6.53k]
  ------------------
11515|      0|        if (qualifier.storage != EvqUniform && qualifier.storage != EvqBuffer)
  ------------------
  |  Branch (11515:13): [True: 0, False: 0]
  |  Branch (11515:48): [True: 0, False: 0]
  ------------------
11516|      0|            error(loc, "can only be used with uniform or buffer", "buffer_type", "");
11517|      0|        if (instanceName)
  ------------------
  |  Branch (11517:13): [True: 0, False: 0]
  ------------------
11518|      0|            error(loc, "cannot have an instance name", "buffer_type", "");
11519|      0|        if (qualifier.hasSet())
  ------------------
  |  Branch (11519:13): [True: 0, False: 0]
  ------------------
11520|      0|            error(loc, "cannot be used with buffer_type", "set", "");
11521|      0|        if (qualifier.hasBinding())
  ------------------
  |  Branch (11521:13): [True: 0, False: 0]
  ------------------
11522|      0|            error(loc, "cannot be used with buffer_type", "binding", "");
11523|      0|    }
11524|  6.53k|}
_ZN7glslang13TParseContext17fixBlockLocationsERKNS_10TSourceLocERNS_10TQualifierERNS_7TVectorINS_8TTypeLocEEEbb:
11534|  6.53k|{
11535|       |    // "If a block has no block-level location layout qualifier, it is required that either all or none of its members
11536|       |    // have a location layout qualifier, or a compile-time error results."
11537|  6.53k|    if (! qualifier.hasLocation() && memberWithLocation && memberWithoutLocation)
  ------------------
  |  Branch (11537:9): [True: 6.53k, False: 0]
  |  Branch (11537:38): [True: 0, False: 6.53k]
  |  Branch (11537:60): [True: 0, False: 0]
  ------------------
11538|      0|        error(loc, "either the block needs a location, or all members need a location, or no members have a location", "location", "");
11539|  6.53k|    else {
11540|  6.53k|        if (memberWithLocation) {
  ------------------
  |  Branch (11540:13): [True: 0, False: 6.53k]
  ------------------
11541|       |            // remove any block-level location and make it per *every* member
11542|      0|            int nextLocation = 0;  // by the rule above, initial value is not relevant
11543|      0|            if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (11543:17): [True: 0, False: 0]
  ------------------
11544|      0|                nextLocation = qualifier.layoutLocation;
11545|      0|                qualifier.layoutLocation = TQualifier::layoutLocationEnd;
11546|      0|                if (qualifier.hasComponent()) {
  ------------------
  |  Branch (11546:21): [True: 0, False: 0]
  ------------------
11547|       |                    // "It is a compile-time error to apply the *component* qualifier to a ... block"
11548|      0|                    error(loc, "cannot apply to a block", "component", "");
11549|      0|                }
11550|      0|                if (qualifier.hasIndex()) {
  ------------------
  |  Branch (11550:21): [True: 0, False: 0]
  ------------------
11551|      0|                    error(loc, "cannot apply to a block", "index", "");
11552|      0|                }
11553|      0|            }
11554|      0|            for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11554:43): [True: 0, False: 0]
  ------------------
11555|      0|                TQualifier& memberQualifier = typeList[member].type->getQualifier();
11556|      0|                const TSourceLoc& memberLoc = typeList[member].loc;
11557|      0|                if (! memberQualifier.hasLocation()) {
  ------------------
  |  Branch (11557:21): [True: 0, False: 0]
  ------------------
11558|      0|                    if (nextLocation >= (int)TQualifier::layoutLocationEnd)
  ------------------
  |  Branch (11558:25): [True: 0, False: 0]
  ------------------
11559|      0|                        error(memberLoc, "location is too large", "location", "");
11560|      0|                    memberQualifier.layoutLocation = nextLocation;
11561|      0|                    memberQualifier.layoutComponent = TQualifier::layoutComponentEnd;
11562|      0|                }
11563|      0|                nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(
11564|      0|                                    *typeList[member].type, language);
11565|      0|            }
11566|      0|        }
11567|  6.53k|    }
11568|  6.53k|}
_ZN7glslang13TParseContext13fixXfbOffsetsERNS_10TQualifierERNS_7TVectorINS_8TTypeLocEEE:
11571|  6.53k|{
11572|       |    // "If a block is qualified with xfb_offset, all its
11573|       |    // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any
11574|       |    // members of that block not qualified with an xfb_offset will not be assigned transform feedback buffer
11575|       |    // offsets."
11576|       |
11577|  6.53k|    if (! qualifier.hasXfbBuffer() || ! qualifier.hasXfbOffset())
  ------------------
  |  Branch (11577:9): [True: 6.53k, False: 0]
  |  Branch (11577:39): [True: 0, False: 0]
  ------------------
11578|  6.53k|        return;
11579|       |
11580|      0|    int nextOffset = qualifier.layoutXfbOffset;
11581|      0|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11581:35): [True: 0, False: 0]
  ------------------
11582|      0|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
11583|      0|        bool contains64BitType = false;
11584|      0|        bool contains32BitType = false;
11585|      0|        bool contains16BitType = false;
11586|      0|        int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, contains64BitType, contains32BitType, contains16BitType);
11587|       |        // see if we need to auto-assign an offset to this member
11588|      0|        if (! memberQualifier.hasXfbOffset()) {
  ------------------
  |  Branch (11588:13): [True: 0, False: 0]
  ------------------
11589|       |            // "if applied to an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8"
11590|      0|            if (contains64BitType)
  ------------------
  |  Branch (11590:17): [True: 0, False: 0]
  ------------------
11591|      0|                RoundToPow2(nextOffset, 8);
11592|      0|            else if (contains32BitType)
  ------------------
  |  Branch (11592:22): [True: 0, False: 0]
  ------------------
11593|      0|                RoundToPow2(nextOffset, 4);
11594|      0|            else if (contains16BitType)
  ------------------
  |  Branch (11594:22): [True: 0, False: 0]
  ------------------
11595|      0|                RoundToPow2(nextOffset, 2);
11596|      0|            memberQualifier.layoutXfbOffset = nextOffset;
11597|      0|        } else
11598|      0|            nextOffset = memberQualifier.layoutXfbOffset;
11599|      0|        nextOffset += memberSize;
11600|      0|    }
11601|       |
11602|       |    // The above gave all block members an offset, so we can take it off the block now,
11603|       |    // which will avoid double counting the offset usage.
11604|      0|    qualifier.layoutXfbOffset = TQualifier::layoutXfbOffsetEnd;
11605|      0|}
_ZN7glslang13TParseContext22fixBlockUniformOffsetsERNS_10TQualifierERNS_7TVectorINS_8TTypeLocEEE:
11614|  6.53k|{
11615|  6.53k|    if (!storageCanHaveLayoutInBlock(qualifier.storage) && !qualifier.isTaskMemory())
  ------------------
  |  Branch (11615:9): [True: 6.53k, False: 0]
  |  Branch (11615:60): [True: 6.53k, False: 0]
  ------------------
11616|  6.53k|        return;
11617|      0|    if (qualifier.layoutPacking != ElpStd140 && qualifier.layoutPacking != ElpStd430 && qualifier.layoutPacking != ElpScalar)
  ------------------
  |  Branch (11617:9): [True: 0, False: 0]
  |  Branch (11617:49): [True: 0, False: 0]
  |  Branch (11617:89): [True: 0, False: 0]
  ------------------
11618|      0|        return;
11619|       |
11620|      0|    int offset = 0;
11621|      0|    int memberSize;
11622|      0|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11622:35): [True: 0, False: 0]
  ------------------
11623|      0|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
11624|      0|        const TSourceLoc& memberLoc = typeList[member].loc;
11625|       |
11626|       |        // "When align is applied to an array, it effects only the start of the array, not the array's internal stride."
11627|       |
11628|       |        // modify just the children's view of matrix layout, if there is one for this member
11629|      0|        TLayoutMatrix subMatrixLayout = typeList[member].type->getQualifier().layoutMatrix;
11630|      0|        int dummyStride;
11631|      0|        int memberAlignment = intermediate.getMemberAlignment(*typeList[member].type, memberSize, dummyStride, qualifier.layoutPacking,
11632|      0|                                                              subMatrixLayout != ElmNone ? subMatrixLayout == ElmRowMajor : qualifier.layoutMatrix == ElmRowMajor);
  ------------------
  |  Branch (11632:63): [True: 0, False: 0]
  ------------------
11633|      0|        if (memberQualifier.hasOffset()) {
  ------------------
  |  Branch (11633:13): [True: 0, False: 0]
  ------------------
11634|       |            // "The specified offset must be a multiple
11635|       |            // of the base alignment of the type of the block member it qualifies, or a compile-time error results."
11636|      0|            if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment))
  ------------------
  |  Branch (11636:17): [True: 0, False: 0]
  ------------------
11637|      0|                error(memberLoc, "must be a multiple of the member's alignment", "offset",
11638|      0|                    "(layout offset = %d | member alignment = %d)", memberQualifier.layoutOffset, memberAlignment);
11639|       |
11640|       |            // GLSL: "It is a compile-time error to specify an offset that is smaller than the offset of the previous
11641|       |            // member in the block or that lies within the previous member of the block"
11642|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (11642:17): [True: 0, False: 0]
  ------------------
11643|      0|                if (memberQualifier.layoutOffset < offset)
  ------------------
  |  Branch (11643:21): [True: 0, False: 0]
  ------------------
11644|      0|                    error(memberLoc, "cannot lie in previous members", "offset", "");
11645|       |
11646|       |                // "The offset qualifier forces the qualified member to start at or after the specified
11647|       |                // integral-constant expression, which will be its byte offset from the beginning of the buffer.
11648|       |                // "The actual offset of a member is computed as
11649|       |                // follows: If offset was declared, start with that offset, otherwise start with the next available offset."
11650|      0|                offset = std::max(offset, memberQualifier.layoutOffset);
11651|      0|            } else {
11652|       |                // TODO: Vulkan: "It is a compile-time error to have any offset, explicit or assigned,
11653|       |                // that lies within another member of the block."
11654|       |
11655|      0|                offset = memberQualifier.layoutOffset;
11656|      0|            }
11657|      0|        }
11658|       |
11659|       |        // "The actual alignment of a member will be the greater of the specified align alignment and the standard
11660|       |        // (e.g., std140) base alignment for the member's type."
11661|      0|        if (memberQualifier.hasAlign())
  ------------------
  |  Branch (11661:13): [True: 0, False: 0]
  ------------------
11662|      0|            memberAlignment = std::max(memberAlignment, memberQualifier.layoutAlign);
11663|       |
11664|       |        // "If the resulting offset is not a multiple of the actual alignment,
11665|       |        // increase it to the first offset that is a multiple of
11666|       |        // the actual alignment."
11667|      0|        RoundToPow2(offset, memberAlignment);
11668|      0|        typeList[member].type->getQualifier().layoutOffset = offset;
11669|      0|        offset += memberSize;
11670|      0|    }
11671|      0|}
_ZN7glslang13TParseContext27fixBlockUniformLayoutMatrixERNS_10TQualifierEPNS_7TVectorINS_8TTypeLocEEES6_:
11679|  6.53k|{
11680|  6.53k|    assert(tmpTypeList == nullptr || originTypeList->size() == tmpTypeList->size());
11681|  33.4k|    for (unsigned int member = 0; member < originTypeList->size(); ++member) {
  ------------------
  |  Branch (11681:35): [True: 26.9k, False: 6.53k]
  ------------------
11682|  26.9k|        if (qualifier.layoutPacking != ElpNone) {
  ------------------
  |  Branch (11682:13): [True: 0, False: 26.9k]
  ------------------
11683|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11683:17): [True: 0, False: 0]
  ------------------
11684|      0|                if (((*originTypeList)[member].type->isMatrix() ||
  ------------------
  |  Branch (11684:22): [True: 0, False: 0]
  ------------------
11685|      0|                     (*originTypeList)[member].type->getBasicType() == EbtStruct) &&
  ------------------
  |  Branch (11685:22): [True: 0, False: 0]
  ------------------
11686|      0|                    (*originTypeList)[member].type->getQualifier().layoutMatrix == ElmNone) {
  ------------------
  |  Branch (11686:21): [True: 0, False: 0]
  ------------------
11687|      0|                    (*originTypeList)[member].type->getQualifier().layoutMatrix = qualifier.layoutMatrix;
11688|      0|                }
11689|      0|            } else {
11690|      0|                if (((*tmpTypeList)[member].type->isMatrix() ||
  ------------------
  |  Branch (11690:22): [True: 0, False: 0]
  ------------------
11691|      0|                     (*tmpTypeList)[member].type->getBasicType() == EbtStruct) &&
  ------------------
  |  Branch (11691:22): [True: 0, False: 0]
  ------------------
11692|      0|                    (*tmpTypeList)[member].type->getQualifier().layoutMatrix == ElmNone) {
  ------------------
  |  Branch (11692:21): [True: 0, False: 0]
  ------------------
11693|      0|                    (*tmpTypeList)[member].type->getQualifier().layoutMatrix = qualifier.layoutMatrix;
11694|      0|                }
11695|      0|            }
11696|      0|        }
11697|       |
11698|  26.9k|        if ((*originTypeList)[member].type->getBasicType() == EbtStruct) {
  ------------------
  |  Branch (11698:13): [True: 0, False: 26.9k]
  ------------------
11699|      0|            TQualifier* memberQualifier = nullptr;
11700|       |            // block member can be declare a matrix style, so it should be update to the member's style
11701|      0|            if ((*originTypeList)[member].type->getQualifier().layoutMatrix == ElmNone) {
  ------------------
  |  Branch (11701:17): [True: 0, False: 0]
  ------------------
11702|      0|                memberQualifier = &qualifier;
11703|      0|            } else {
11704|      0|                memberQualifier = &((*originTypeList)[member].type->getQualifier());
11705|      0|            }
11706|       |
11707|      0|            const TType* tmpType = tmpTypeList == nullptr ?
  ------------------
  |  Branch (11707:36): [True: 0, False: 0]
  ------------------
11708|      0|                (*originTypeList)[member].type->clone() : (*tmpTypeList)[member].type;
11709|       |
11710|      0|            fixBlockUniformLayoutMatrix(*memberQualifier, (*originTypeList)[member].type->getWritableStruct(),
11711|      0|                                        tmpType->getWritableStruct());
11712|       |
11713|      0|            const TTypeList* structure = recordStructCopy(matrixFixRecord, (*originTypeList)[member].type, tmpType);
11714|       |
11715|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11715:17): [True: 0, False: 0]
  ------------------
11716|      0|                (*originTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11717|      0|            }
11718|      0|            if (tmpTypeList != nullptr) {
  ------------------
  |  Branch (11718:17): [True: 0, False: 0]
  ------------------
11719|      0|                (*tmpTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11720|      0|            }
11721|      0|        }
11722|  26.9k|    }
11723|  6.53k|}
_ZN7glslang13TParseContext28fixBlockUniformLayoutPackingERNS_10TQualifierEPNS_7TVectorINS_8TTypeLocEEES6_:
11731|  6.53k|{
11732|  6.53k|    assert(tmpTypeList == nullptr || originTypeList->size() == tmpTypeList->size());
11733|  33.4k|    for (unsigned int member = 0; member < originTypeList->size(); ++member) {
  ------------------
  |  Branch (11733:35): [True: 26.9k, False: 6.53k]
  ------------------
11734|  26.9k|        if (qualifier.layoutPacking != ElpNone) {
  ------------------
  |  Branch (11734:13): [True: 0, False: 26.9k]
  ------------------
11735|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11735:17): [True: 0, False: 0]
  ------------------
11736|      0|                if ((*originTypeList)[member].type->getQualifier().layoutPacking == ElpNone &&
  ------------------
  |  Branch (11736:21): [True: 0, False: 0]
  ------------------
11737|      0|                    !(*originTypeList)[member].type->isScalarOrVector()) {
  ------------------
  |  Branch (11737:21): [True: 0, False: 0]
  ------------------
11738|      0|                    (*originTypeList)[member].type->getQualifier().layoutPacking = qualifier.layoutPacking;
11739|      0|                }
11740|      0|            } else {
11741|      0|                if ((*tmpTypeList)[member].type->getQualifier().layoutPacking == ElpNone &&
  ------------------
  |  Branch (11741:21): [True: 0, False: 0]
  ------------------
11742|      0|                    !(*tmpTypeList)[member].type->isScalarOrVector()) {
  ------------------
  |  Branch (11742:21): [True: 0, False: 0]
  ------------------
11743|      0|                    (*tmpTypeList)[member].type->getQualifier().layoutPacking = qualifier.layoutPacking;
11744|      0|                }
11745|      0|            }
11746|      0|        }
11747|       |
11748|  26.9k|        if ((*originTypeList)[member].type->getBasicType() == EbtStruct) {
  ------------------
  |  Branch (11748:13): [True: 0, False: 26.9k]
  ------------------
11749|       |            // Deep copy the type in pool.
11750|       |            // Because, struct use in different block may have different layout qualifier.
11751|       |            // We have to new a object to distinguish between them.
11752|      0|            const TType* tmpType = tmpTypeList == nullptr ?
  ------------------
  |  Branch (11752:36): [True: 0, False: 0]
  ------------------
11753|      0|                (*originTypeList)[member].type->clone() : (*tmpTypeList)[member].type;
11754|       |
11755|      0|            fixBlockUniformLayoutPacking(qualifier, (*originTypeList)[member].type->getWritableStruct(),
11756|      0|                                         tmpType->getWritableStruct());
11757|       |
11758|      0|            const TTypeList* structure = recordStructCopy(packingFixRecord, (*originTypeList)[member].type, tmpType);
11759|       |
11760|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11760:17): [True: 0, False: 0]
  ------------------
11761|      0|                (*originTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11762|      0|            }
11763|      0|            if (tmpTypeList != nullptr) {
  ------------------
  |  Branch (11763:17): [True: 0, False: 0]
  ------------------
11764|      0|                (*tmpTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11765|      0|            }
11766|      0|        }
11767|  26.9k|    }
11768|  6.53k|}
_ZN7glslang13TParseContext14invariantCheckERKNS_10TSourceLocERKNS_10TQualifierE:
11857|  1.38M|{
11858|  1.38M|    if (! qualifier.invariant)
  ------------------
  |  Branch (11858:9): [True: 1.38M, False: 0]
  ------------------
11859|  1.38M|        return;
11860|       |
11861|      0|    bool pipeOut = qualifier.isPipeOutput();
11862|      0|    bool pipeIn = qualifier.isPipeInput();
11863|      0|    if ((version >= 300 && isEsProfile()) || (!isEsProfile() && version >= 420)) {
  ------------------
  |  Branch (11863:10): [True: 0, False: 0]
  |  Branch (11863:28): [True: 0, False: 0]
  |  Branch (11863:47): [True: 0, False: 0]
  |  Branch (11863:65): [True: 0, False: 0]
  ------------------
11864|      0|        if (! pipeOut)
  ------------------
  |  Branch (11864:13): [True: 0, False: 0]
  ------------------
11865|      0|            error(loc, "can only apply to an output", "invariant", "");
11866|      0|    } else {
11867|      0|        if ((language == EShLangVertex && pipeIn) || (! pipeOut && ! pipeIn))
  ------------------
  |  Branch (11867:14): [True: 0, False: 0]
  |  Branch (11867:43): [True: 0, False: 0]
  |  Branch (11867:55): [True: 0, False: 0]
  |  Branch (11867:68): [True: 0, False: 0]
  ------------------
11868|      0|            error(loc, "can only apply to an output, or to an input in a non-vertex stage\n", "invariant", "");
11869|      0|    }
11870|      0|}
ParseHelper.cpp:_ZN7glslangL27storageCanHaveLayoutInBlockENS_17TStorageQualifierE:
 8475|  6.53k|{
 8476|  6.53k|    switch (storage) {
 8477|      0|    case EvqUniform:
  ------------------
  |  Branch (8477:5): [True: 0, False: 6.53k]
  ------------------
 8478|      0|    case EvqBuffer:
  ------------------
  |  Branch (8478:5): [True: 0, False: 6.53k]
  ------------------
 8479|      0|    case EvqShared:
  ------------------
  |  Branch (8479:5): [True: 0, False: 6.53k]
  ------------------
 8480|      0|    case EvqSamplerHeap:
  ------------------
  |  Branch (8480:5): [True: 0, False: 6.53k]
  ------------------
 8481|      0|    case EvqResourceHeap:
  ------------------
  |  Branch (8481:5): [True: 0, False: 6.53k]
  ------------------
 8482|      0|        return true;
 8483|  6.53k|    default:
  ------------------
  |  Branch (8483:5): [True: 6.53k, False: 0]
  ------------------
 8484|  6.53k|        return false;
 8485|  6.53k|    }
 8486|  6.53k|}
ParseHelper.cpp:_ZN7glslangL30isResourceHeapBufferTypeMemberERKNS_10TQualifierES2_:
11035|  53.8k|{
11036|  53.8k|    return blockQualifier.storage == EvqResourceHeap && memberQualifier.isBufferType();
  ------------------
  |  Branch (11036:12): [True: 0, False: 53.8k]
  |  Branch (11036:57): [True: 0, False: 0]
  ------------------
11037|  53.8k|}

_ZN7glslang22GetThreadPoolAllocatorEv:
   59|   459M|{
   60|   459M|    return *(threadPoolAllocator ? threadPoolAllocator : GetDefaultThreadPoolAllocator());
  ------------------
  |  Branch (60:14): [True: 459M, False: 0]
  ------------------
   61|   459M|}
_ZN7glslang22SetThreadPoolAllocatorEPNS_14TPoolAllocatorE:
   65|  4.73k|{
   66|  4.73k|    threadPoolAllocator = poolAllocator;
   67|  4.73k|}
_ZN7glslang14TPoolAllocatorC2Eii:
   74|  4.93k|    pageSize(growthIncrement),
   75|  4.93k|    alignment(allocationAlignment),
   76|  4.93k|    freeList(nullptr),
   77|  4.93k|    inUseList(nullptr),
   78|  4.93k|    numCalls(0)
   79|  4.93k|{
   80|       |    //
   81|       |    // Don't allow page sizes we know are smaller than all common
   82|       |    // OS page sizes.
   83|       |    //
   84|  4.93k|    if (pageSize < 4*1024)
  ------------------
  |  Branch (84:9): [True: 0, False: 4.93k]
  ------------------
   85|      0|        pageSize = 4*1024;
   86|       |
   87|       |    //
   88|       |    // A large currentPageOffset indicates a new page needs to
   89|       |    // be obtained to allocate memory.
   90|       |    //
   91|  4.93k|    currentPageOffset = pageSize;
   92|       |
   93|       |    //
   94|       |    // Adjust alignment to be at least pointer aligned and
   95|       |    // power of 2.
   96|       |    //
   97|  4.93k|    size_t minAlign = sizeof(void*);
   98|  4.93k|    alignment &= ~(minAlign - 1);
   99|  4.93k|    if (alignment < minAlign)
  ------------------
  |  Branch (99:9): [True: 0, False: 4.93k]
  ------------------
  100|      0|        alignment = minAlign;
  101|  4.93k|    size_t a = 1;
  102|  24.6k|    while (a < alignment)
  ------------------
  |  Branch (102:12): [True: 19.7k, False: 4.93k]
  ------------------
  103|  19.7k|        a <<= 1;
  104|  4.93k|    alignment = a;
  105|  4.93k|    alignmentMask = a - 1;
  106|       |
  107|       |    //
  108|       |    // Align header skip
  109|       |    //
  110|  4.93k|    headerSkip = minAlign;
  111|  4.93k|    if (headerSkip < sizeof(tHeader)) {
  ------------------
  |  Branch (111:9): [True: 4.93k, False: 0]
  ------------------
  112|  4.93k|        headerSkip = (sizeof(tHeader) + alignmentMask) & ~alignmentMask;
  113|  4.93k|    }
  114|       |
  115|  4.93k|    push();
  116|  4.93k|}
_ZN7glslang14TPoolAllocatorD2Ev:
  119|  4.93k|{
  120|  3.79M|    while (inUseList) {
  ------------------
  |  Branch (120:12): [True: 3.79M, False: 4.93k]
  ------------------
  121|  3.79M|        tHeader* next = inUseList->nextPage;
  122|  3.79M|        inUseList->~tHeader();
  123|  3.79M|        delete [] reinterpret_cast<char*>(inUseList);
  124|  3.79M|        inUseList = next;
  125|  3.79M|    }
  126|       |
  127|       |    //
  128|       |    // Always delete the free list memory - it can't be being
  129|       |    // (correctly) referenced, whether the pool allocator was
  130|       |    // global or not.  We should not check the guard blocks
  131|       |    // here, because we did it already when the block was
  132|       |    // placed into the free list.
  133|       |    //
  134|  4.93k|    while (freeList) {
  ------------------
  |  Branch (134:12): [True: 0, False: 4.93k]
  ------------------
  135|      0|        tHeader* next = freeList->nextPage;
  136|      0|        delete [] reinterpret_cast<char*>(freeList);
  137|      0|        freeList = next;
  138|      0|    }
  139|  4.93k|}
_ZN7glslang14TPoolAllocator4pushEv:
  168|  6.16k|{
  169|  6.16k|    tAllocState state = { currentPageOffset, inUseList };
  170|       |
  171|  6.16k|    stack.push_back(state);
  172|       |
  173|       |    //
  174|       |    // Indicate there is no current page to allocate from.
  175|       |    //
  176|  6.16k|    currentPageOffset = pageSize;
  177|  6.16k|}
_ZN7glslang14TPoolAllocator8allocateEm:
  225|   286M|{
  226|       |    // If we are using guard blocks, all allocations are bracketed by
  227|       |    // them: [guardblock][allocation][guardblock].  numBytes is how
  228|       |    // much memory the caller asked for.  allocationSize is the total
  229|       |    // size including guard blocks.  In release build,
  230|       |    // guardBlockSize=0 and this all gets optimized away.
  231|   286M|    size_t allocationSize = TAllocation::allocationSize(numBytes);
  232|       |
  233|       |    //
  234|       |    // Just keep some interesting statistics.
  235|       |    //
  236|   286M|    ++numCalls;
  237|   286M|    totalBytes += numBytes;
  238|       |
  239|       |    //
  240|       |    // Do the allocation, most likely case first, for efficiency.
  241|       |    // This step could be moved to be inline sometime.
  242|       |    //
  243|   286M|    if (currentPageOffset + allocationSize <= pageSize) {
  ------------------
  |  Branch (243:9): [True: 283M, False: 3.79M]
  ------------------
  244|       |        //
  245|       |        // Safe to allocate from currentPageOffset.
  246|       |        //
  247|   283M|        unsigned char* memory = reinterpret_cast<unsigned char*>(inUseList) + currentPageOffset;
  248|   283M|        currentPageOffset += allocationSize;
  249|   283M|        currentPageOffset = (currentPageOffset + alignmentMask) & ~alignmentMask;
  250|       |
  251|   283M|        return initializeAllocation(inUseList, memory, numBytes);
  252|   283M|    }
  253|       |
  254|  3.79M|    if (allocationSize + headerSkip > pageSize) {
  ------------------
  |  Branch (254:9): [True: 11.4k, False: 3.78M]
  ------------------
  255|       |        //
  256|       |        // Do a multi-page allocation.  Don't mix these with the others.
  257|       |        // The OS is efficient and allocating and free-ing multiple pages.
  258|       |        //
  259|  11.4k|        size_t numBytesToAlloc = allocationSize + headerSkip;
  260|  11.4k|        tHeader* memory = reinterpret_cast<tHeader*>(::new char[numBytesToAlloc]);
  261|  11.4k|        if (memory == nullptr)
  ------------------
  |  Branch (261:13): [True: 0, False: 11.4k]
  ------------------
  262|      0|            return nullptr;
  263|       |
  264|       |        // Use placement-new to initialize header
  265|  11.4k|        new(memory) tHeader(inUseList, (numBytesToAlloc + pageSize - 1) / pageSize);
  266|  11.4k|        inUseList = memory;
  267|       |
  268|  11.4k|        currentPageOffset = pageSize;  // make next allocation come from a new page
  269|       |
  270|       |        // No guard blocks for multi-page allocations (yet)
  271|  11.4k|        return reinterpret_cast<void*>(reinterpret_cast<UINT_PTR>(memory) + headerSkip);
  272|  11.4k|    }
  273|       |
  274|       |    //
  275|       |    // Need a simple page to allocate from.
  276|       |    //
  277|  3.78M|    tHeader* memory;
  278|  3.78M|    if (freeList) {
  ------------------
  |  Branch (278:9): [True: 0, False: 3.78M]
  ------------------
  279|      0|        memory = freeList;
  280|      0|        freeList = freeList->nextPage;
  281|  3.78M|    } else {
  282|  3.78M|        memory = reinterpret_cast<tHeader*>(::new char[pageSize]);
  283|  3.78M|        if (memory == nullptr)
  ------------------
  |  Branch (283:13): [True: 0, False: 3.78M]
  ------------------
  284|      0|            return nullptr;
  285|  3.78M|    }
  286|       |
  287|       |    // Use placement-new to initialize header
  288|  3.78M|    new(memory) tHeader(inUseList, 1);
  289|  3.78M|    inUseList = memory;
  290|       |
  291|  3.78M|    unsigned char* ret = reinterpret_cast<unsigned char*>(inUseList) + headerSkip;
  292|  3.78M|    currentPageOffset = (headerSkip + allocationSize + alignmentMask) & ~alignmentMask;
  293|       |
  294|  3.78M|    return initializeAllocation(inUseList, ret, numBytes);
  295|  3.78M|}

_ZN7glslang13TInputScanner17consumeWhiteSpaceERb:
   68|   717k|{
   69|   717k|    int c = peek();  // don't accidentally consume anything other than whitespace
   70|   825k|    while (c == ' ' || c == '\t' || c == '\r' || c == '\n') {
  ------------------
  |  Branch (70:12): [True: 100k, False: 725k]
  |  Branch (70:24): [True: 3.99k, False: 721k]
  |  Branch (70:37): [True: 859, False: 720k]
  |  Branch (70:50): [True: 2.35k, False: 717k]
  ------------------
   71|   107k|        if (c == '\r' || c == '\n')
  ------------------
  |  Branch (71:13): [True: 859, False: 106k]
  |  Branch (71:26): [True: 2.35k, False: 104k]
  ------------------
   72|  3.20k|            foundNonSpaceTab = true;
   73|   107k|        get();
   74|   107k|        c = peek();
   75|   107k|    }
   76|   717k|}
_ZN7glslang13TInputScanner14consumeCommentEv:
   80|   523k|{
   81|   523k|    if (peek() != '/')
  ------------------
  |  Branch (81:9): [True: 0, False: 523k]
  ------------------
   82|      0|        return false;
   83|       |
   84|   523k|    get();  // consume the '/'
   85|   523k|    int c = peek();
   86|   523k|    if (c == '/') {
  ------------------
  |  Branch (86:9): [True: 36.2k, False: 486k]
  ------------------
   87|       |
   88|       |        // a '//' style comment
   89|  36.2k|        get();  // consume the second '/'
   90|  36.2k|        c = get();
   91|  55.7k|        do {
   92|   396k|            while (c != EndOfInput && c != '\\' && c != '\r' && c != '\n')
  ------------------
  |  Branch (92:20): [True: 396k, False: 76]
  |  Branch (92:39): [True: 377k, False: 19.5k]
  |  Branch (92:52): [True: 361k, False: 15.7k]
  |  Branch (92:65): [True: 340k, False: 20.4k]
  ------------------
   93|   340k|                c = get();
   94|       |
   95|  55.7k|            if (c == EndOfInput || c == '\r' || c == '\n') {
  ------------------
  |  Branch (95:17): [True: 76, False: 55.6k]
  |  Branch (95:36): [True: 15.7k, False: 39.9k]
  |  Branch (95:49): [True: 20.4k, False: 19.5k]
  ------------------
   96|  77.4k|                while (c == '\r' || c == '\n')
  ------------------
  |  Branch (96:24): [True: 16.3k, False: 61.1k]
  |  Branch (96:37): [True: 24.8k, False: 36.2k]
  ------------------
   97|  41.2k|                    c = get();
   98|       |
   99|       |                // we reached the end of the comment
  100|  36.2k|                break;
  101|  36.2k|            } else {
  102|       |                // it's a '\', so we need to keep going, after skipping what's escaped
  103|       |
  104|       |                // read the skipped character
  105|  19.5k|                c = get();
  106|       |
  107|       |                // if it's a two-character newline, skip both characters
  108|  19.5k|                if (c == '\r' && peek() == '\n')
  ------------------
  |  Branch (108:21): [True: 11.8k, False: 7.66k]
  |  Branch (108:34): [True: 407, False: 11.4k]
  ------------------
  109|    407|                    get();
  110|  19.5k|                c = get();
  111|  19.5k|            }
  112|  55.7k|        } while (true);
  ------------------
  |  Branch (112:18): [True: 19.5k, Folded]
  ------------------
  113|       |
  114|       |        // put back the last non-comment character
  115|  36.2k|        if (c != EndOfInput)
  ------------------
  |  Branch (115:13): [True: 36.1k, False: 92]
  ------------------
  116|  36.1k|            unget();
  117|       |
  118|  36.2k|        return true;
  119|   486k|    } else if (c == '*') {
  ------------------
  |  Branch (119:16): [True: 1.38k, False: 485k]
  ------------------
  120|       |
  121|       |        // a '/*' style comment
  122|  1.38k|        get();  // consume the '*'
  123|  1.38k|        c = get();
  124|  3.27k|        do {
  125|   305k|            while (c != EndOfInput && c != '*')
  ------------------
  |  Branch (125:20): [True: 305k, False: 68]
  |  Branch (125:39): [True: 302k, False: 3.20k]
  ------------------
  126|   302k|                c = get();
  127|  3.27k|            if (c == '*') {
  ------------------
  |  Branch (127:17): [True: 3.20k, False: 68]
  ------------------
  128|  3.20k|                c = get();
  129|  3.20k|                if (c == '/')
  ------------------
  |  Branch (129:21): [True: 1.31k, False: 1.88k]
  ------------------
  130|  1.31k|                    break;  // end of comment
  131|       |                // not end of comment
  132|  3.20k|            } else // end of input
  133|     68|                break;
  134|  3.27k|        } while (true);
  ------------------
  |  Branch (134:18): [True: 1.88k, Folded]
  ------------------
  135|       |
  136|  1.38k|        return true;
  137|   485k|    } else {
  138|       |        // it's not a comment, put the '/' back
  139|   485k|        unget();
  140|       |
  141|   485k|        return false;
  142|   485k|    }
  143|   523k|}
_ZN7glslang13TInputScanner24consumeWhitespaceCommentERb:
  147|   680k|{
  148|   717k|    do {
  149|   717k|        consumeWhiteSpace(foundNonSpaceTab);
  150|       |
  151|       |        // if not starting a comment now, then done
  152|   717k|        int c = peek();
  153|   717k|        if (c != '/' || c == EndOfInput)
  ------------------
  |  Branch (153:13): [True: 194k, False: 523k]
  |  Branch (153:25): [True: 0, False: 523k]
  ------------------
  154|   194k|            return;
  155|       |
  156|       |        // skip potential comment
  157|   523k|        foundNonSpaceTab = true;
  158|   523k|        if (! consumeComment())
  ------------------
  |  Branch (158:13): [True: 485k, False: 37.6k]
  ------------------
  159|   485k|            return;
  160|       |
  161|   523k|    } while (true);
  ------------------
  |  Branch (161:14): [True: 37.6k, Folded]
  ------------------
  162|   680k|}
_ZN7glslang13TInputScanner11scanVersionERiR8EProfileRb:
  176|  1.11k|{
  177|       |    // This function doesn't have to get all the semantics correct,
  178|       |    // just find the #version if there is a correct one present.
  179|       |    // The preprocessor will have the responsibility of getting all the semantics right.
  180|       |
  181|  1.11k|    bool versionNotFirst = false;  // means not first WRT comments and white space, nothing more
  182|  1.11k|    notFirstToken = false;         // means not first WRT to real tokens
  183|  1.11k|    version = 0;                   // means not found
  184|  1.11k|    profile = ENoProfile;
  185|       |
  186|  1.11k|    bool foundNonSpaceTab = false;
  187|  1.11k|    bool lookingInMiddle = false;
  188|  1.11k|    int c;
  189|   681k|    do {
  190|   681k|        if (lookingInMiddle) {
  ------------------
  |  Branch (190:13): [True: 679k, False: 1.11k]
  ------------------
  191|   679k|            notFirstToken = true;
  192|       |            // make forward progress by finishing off the current line plus extra new lines
  193|   679k|            if (peek() != '\n' && peek() != '\r') {
  ------------------
  |  Branch (193:17): [True: 640k, False: 39.2k]
  |  Branch (193:35): [True: 150k, False: 489k]
  ------------------
  194|  3.26M|                do {
  195|  3.26M|                    c = get();
  196|  3.26M|                } while (c != EndOfInput && c != '\n' && c != '\r');
  ------------------
  |  Branch (196:26): [True: 3.26M, False: 635]
  |  Branch (196:45): [True: 3.17M, False: 97.5k]
  |  Branch (196:58): [True: 3.11M, False: 52.6k]
  ------------------
  197|   150k|            }
  198|  1.25M|            while (peek() == '\n' || peek() == '\r')
  ------------------
  |  Branch (198:20): [True: 60.2k, False: 1.19M]
  |  Branch (198:38): [True: 516k, False: 679k]
  ------------------
  199|   576k|                get();
  200|   679k|            if (peek() == EndOfInput)
  ------------------
  |  Branch (200:17): [True: 714, False: 679k]
  ------------------
  201|    714|                return true;
  202|   679k|        }
  203|   680k|        lookingInMiddle = true;
  204|       |
  205|       |        // Nominal start, skipping the desktop allowed comments and white space, but tracking if
  206|       |        // something else was found for ES:
  207|   680k|        consumeWhitespaceComment(foundNonSpaceTab);
  208|   680k|        if (foundNonSpaceTab)
  ------------------
  |  Branch (208:13): [True: 676k, False: 3.92k]
  ------------------
  209|   676k|            versionNotFirst = true;
  210|       |
  211|       |        // "#"
  212|   680k|        if (get() != '#') {
  ------------------
  |  Branch (212:13): [True: 580k, False: 99.4k]
  ------------------
  213|   580k|            versionNotFirst = true;
  214|   580k|            continue;
  215|   580k|        }
  216|       |
  217|       |        // whitespace
  218|   101k|        do {
  219|   101k|            c = get();
  220|   101k|        } while (c == ' ' || c == '\t');
  ------------------
  |  Branch (220:18): [True: 1.48k, False: 100k]
  |  Branch (220:30): [True: 812, False: 99.4k]
  ------------------
  221|       |
  222|       |        // "version"
  223|  99.4k|        if (    c != 'v' ||
  ------------------
  |  Branch (223:17): [True: 27.6k, False: 71.7k]
  ------------------
  224|  71.7k|            get() != 'e' ||
  ------------------
  |  Branch (224:13): [True: 33.2k, False: 38.4k]
  ------------------
  225|  38.4k|            get() != 'r' ||
  ------------------
  |  Branch (225:13): [True: 3.10k, False: 35.3k]
  ------------------
  226|  35.3k|            get() != 's' ||
  ------------------
  |  Branch (226:13): [True: 6.22k, False: 29.1k]
  ------------------
  227|  29.1k|            get() != 'i' ||
  ------------------
  |  Branch (227:13): [True: 18.8k, False: 10.2k]
  ------------------
  228|  10.2k|            get() != 'o' ||
  ------------------
  |  Branch (228:13): [True: 1.70k, False: 8.54k]
  ------------------
  229|  92.8k|            get() != 'n') {
  ------------------
  |  Branch (229:13): [True: 1.94k, False: 6.59k]
  ------------------
  230|  92.8k|            versionNotFirst = true;
  231|  92.8k|            continue;
  232|  92.8k|        }
  233|       |
  234|       |        // whitespace
  235|  12.1k|        do {
  236|  12.1k|            c = get();
  237|  12.1k|        } while (c == ' ' || c == '\t');
  ------------------
  |  Branch (237:18): [True: 5.46k, False: 6.71k]
  |  Branch (237:30): [True: 123, False: 6.59k]
  ------------------
  238|       |
  239|       |        // version number
  240|  10.3k|        while (c >= '0' && c <= '9') {
  ------------------
  |  Branch (240:16): [True: 4.35k, False: 6.00k]
  |  Branch (240:28): [True: 3.76k, False: 592]
  ------------------
  241|  3.76k|            version = 10 * version + (c - '0');
  242|  3.76k|            c = get();
  243|  3.76k|        }
  244|  6.59k|        if (version == 0) {
  ------------------
  |  Branch (244:13): [True: 5.62k, False: 966]
  ------------------
  245|  5.62k|            versionNotFirst = true;
  246|  5.62k|            continue;
  247|  5.62k|        }
  248|       |
  249|       |        // whitespace
  250|  1.51k|        while (c == ' ' || c == '\t')
  ------------------
  |  Branch (250:16): [True: 270, False: 1.24k]
  |  Branch (250:28): [True: 283, False: 966]
  ------------------
  251|    553|            c = get();
  252|       |
  253|       |        // profile
  254|    966|        const int maxProfileLength = 13;  // not including any 0
  255|    966|        char profileString[maxProfileLength];
  256|    966|        int profileLength;
  257|  10.1k|        for (profileLength = 0; profileLength < maxProfileLength; ++profileLength) {
  ------------------
  |  Branch (257:33): [True: 9.54k, False: 593]
  ------------------
  258|  9.54k|            if (c == EndOfInput || c == ' ' || c == '\t' || c == '\n' || c == '\r')
  ------------------
  |  Branch (258:17): [True: 262, False: 9.28k]
  |  Branch (258:36): [True: 25, False: 9.25k]
  |  Branch (258:48): [True: 15, False: 9.24k]
  |  Branch (258:61): [True: 48, False: 9.19k]
  |  Branch (258:74): [True: 23, False: 9.17k]
  ------------------
  259|    373|                break;
  260|  9.17k|            profileString[profileLength] = (char)c;
  261|  9.17k|            c = get();
  262|  9.17k|        }
  263|    966|        if (c != EndOfInput && c != ' ' && c != '\t' && c != '\n' && c != '\r') {
  ------------------
  |  Branch (263:13): [True: 686, False: 280]
  |  Branch (263:32): [True: 660, False: 26]
  |  Branch (263:44): [True: 643, False: 17]
  |  Branch (263:57): [True: 591, False: 52]
  |  Branch (263:70): [True: 567, False: 24]
  ------------------
  264|    567|            versionNotFirst = true;
  265|    567|            continue;
  266|    567|        }
  267|       |
  268|    399|        if (profileLength == 2 && strncmp(profileString, "es", profileLength) == 0)
  ------------------
  |  Branch (268:13): [True: 101, False: 298]
  |  Branch (268:35): [True: 71, False: 30]
  ------------------
  269|     71|            profile = EEsProfile;
  270|    328|        else if (profileLength == 4 && strncmp(profileString, "core", profileLength) == 0)
  ------------------
  |  Branch (270:18): [True: 21, False: 307]
  |  Branch (270:40): [True: 0, False: 21]
  ------------------
  271|      0|            profile = ECoreProfile;
  272|    328|        else if (profileLength == 13 && strncmp(profileString, "compatibility", profileLength) == 0)
  ------------------
  |  Branch (272:18): [True: 26, False: 302]
  |  Branch (272:41): [True: 0, False: 26]
  ------------------
  273|      0|            profile = ECompatibilityProfile;
  274|       |
  275|    399|        return versionNotFirst;
  276|   679k|    } while (true);
  ------------------
  |  Branch (276:14): [True: 679k, Folded]
  ------------------
  277|  1.11k|}
_Z5yylexP7YYSTYPERN7glslang13TParseContextE:
  294|   117M|{
  295|   117M|    glslang::TParserToken token(*glslangTokenDesc);
  296|       |
  297|   117M|    return parseContext.getScanContext()->tokenize(parseContext.getPpContext(), token);
  298|   117M|}
_ZN7glslang12TScanContext8tokenizeEPNS_10TPpContextERNS_12TParserTokenE:
  859|   117M|{
  860|   117M|    do {
  861|   117M|        parserToken = &token;
  862|   117M|        TPpToken ppToken;
  863|   117M|        int token = pp->tokenize(ppToken);
  864|   117M|        if (token == EndOfInput)
  ------------------
  |  Branch (864:13): [True: 12.5k, False: 117M]
  ------------------
  865|  12.5k|            return 0;
  866|       |
  867|   117M|        tokenText = ppToken.name;
  868|   117M|        loc = ppToken.loc;
  869|   117M|        parserToken->sType.lex.loc = loc;
  870|   117M|        switch (token) {
  871|  11.4M|        case ';':  afterType = false; afterBuffer = false; inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return SEMICOLON;
  ------------------
  |  Branch (871:9): [True: 11.4M, False: 106M]
  ------------------
  872|  17.1M|        case ',':
  ------------------
  |  Branch (872:9): [True: 17.1M, False: 100M]
  ------------------
  873|       |            // If we just processed a declarator (identifier after a type), this comma
  874|       |            // indicates that we're in a declarator list. Note that 'afterDeclarator' is
  875|       |            // only set when we are not inside a template parameter list, array expression,
  876|       |            // or function parameter list.
  877|  17.1M|            if (afterDeclarator) {
  ------------------
  |  Branch (877:17): [True: 0, False: 17.1M]
  ------------------
  878|      0|                inDeclaratorList = true;
  879|      0|            }
  880|  17.1M|            afterType = false;
  881|  17.1M|            afterDeclarator = false;
  882|  17.1M|            return COMMA;
  883|      3|        case ':':                       return COLON;
  ------------------
  |  Branch (883:9): [True: 3, False: 117M]
  ------------------
  884|   169k|        case '=':  afterType = false; inDeclaratorList = false; afterDeclarator = false; return EQUAL;
  ------------------
  |  Branch (884:9): [True: 169k, False: 117M]
  ------------------
  885|  11.0M|        case '(':  afterType = false; inDeclaratorList = false; afterDeclarator = false; parenDepth++; return LEFT_PAREN;
  ------------------
  |  Branch (885:9): [True: 11.0M, False: 106M]
  ------------------
  886|  11.0M|        case ')':  afterType = false; inDeclaratorList = false; afterDeclarator = false; if (parenDepth > 0) parenDepth--; return RIGHT_PAREN;
  ------------------
  |  Branch (886:9): [True: 11.0M, False: 106M]
  |  Branch (886:94): [True: 11.0M, False: 1]
  ------------------
  887|  79.9k|        case '.':  field = true;        return DOT;
  ------------------
  |  Branch (887:9): [True: 79.9k, False: 117M]
  ------------------
  888|      6|        case '!':                       return BANG;
  ------------------
  |  Branch (888:9): [True: 6, False: 117M]
  ------------------
  889|    897|        case '-':                       return DASH;
  ------------------
  |  Branch (889:9): [True: 897, False: 117M]
  ------------------
  890|      2|        case '~':                       return TILDE;
  ------------------
  |  Branch (890:9): [True: 2, False: 117M]
  ------------------
  891|      3|        case '+':                       return PLUS;
  ------------------
  |  Branch (891:9): [True: 3, False: 117M]
  ------------------
  892|      4|        case '*':                       return STAR;
  ------------------
  |  Branch (892:9): [True: 4, False: 117M]
  ------------------
  893|     28|        case '/':                       return SLASH;
  ------------------
  |  Branch (893:9): [True: 28, False: 117M]
  ------------------
  894|      2|        case '%':                       return PERCENT;
  ------------------
  |  Branch (894:9): [True: 2, False: 117M]
  ------------------
  895|  17.1k|        case '<':                       angleBracketDepth++; return LEFT_ANGLE;
  ------------------
  |  Branch (895:9): [True: 17.1k, False: 117M]
  ------------------
  896|  17.1k|        case '>':                       if (angleBracketDepth > 0) angleBracketDepth--; return RIGHT_ANGLE;
  ------------------
  |  Branch (896:9): [True: 17.1k, False: 117M]
  |  Branch (896:45): [True: 17.1k, False: 0]
  ------------------
  897|      1|        case '|':                       return VERTICAL_BAR;
  ------------------
  |  Branch (897:9): [True: 1, False: 117M]
  ------------------
  898|      2|        case '^':                       return CARET;
  ------------------
  |  Branch (898:9): [True: 2, False: 117M]
  ------------------
  899|      2|        case '&':                       return AMPERSAND;
  ------------------
  |  Branch (899:9): [True: 2, False: 117M]
  ------------------
  900|      3|        case '?':                       return QUESTION;
  ------------------
  |  Branch (900:9): [True: 3, False: 117M]
  ------------------
  901|   662k|        case '[':                       squareBracketDepth++; return LEFT_BRACKET;
  ------------------
  |  Branch (901:9): [True: 662k, False: 116M]
  ------------------
  902|   662k|        case ']':                       if (squareBracketDepth > 0) squareBracketDepth--; return RIGHT_BRACKET;
  ------------------
  |  Branch (902:9): [True: 662k, False: 116M]
  |  Branch (902:45): [True: 662k, False: 10]
  ------------------
  903|  7.53k|        case '{':  afterStruct = false; afterBuffer = false; inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return LEFT_BRACE;
  ------------------
  |  Branch (903:9): [True: 7.53k, False: 117M]
  ------------------
  904|  7.53k|        case '}':  inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return RIGHT_BRACE;
  ------------------
  |  Branch (904:9): [True: 7.53k, False: 117M]
  ------------------
  905|      4|        case '\\':
  ------------------
  |  Branch (905:9): [True: 4, False: 117M]
  ------------------
  906|      4|            parseContext.error(loc, "illegal use of escape character", "\\", "");
  907|      4|            break;
  908|       |
  909|      0|        case PPAtomAddAssign:          return ADD_ASSIGN;
  ------------------
  |  Branch (909:9): [True: 0, False: 117M]
  ------------------
  910|      0|        case PPAtomSubAssign:          return SUB_ASSIGN;
  ------------------
  |  Branch (910:9): [True: 0, False: 117M]
  ------------------
  911|      0|        case PPAtomMulAssign:          return MUL_ASSIGN;
  ------------------
  |  Branch (911:9): [True: 0, False: 117M]
  ------------------
  912|      0|        case PPAtomDivAssign:          return DIV_ASSIGN;
  ------------------
  |  Branch (912:9): [True: 0, False: 117M]
  ------------------
  913|      0|        case PPAtomModAssign:          return MOD_ASSIGN;
  ------------------
  |  Branch (913:9): [True: 0, False: 117M]
  ------------------
  914|       |
  915|      0|        case PpAtomRight:              return RIGHT_OP;
  ------------------
  |  Branch (915:9): [True: 0, False: 117M]
  ------------------
  916|      0|        case PpAtomLeft:               return LEFT_OP;
  ------------------
  |  Branch (916:9): [True: 0, False: 117M]
  ------------------
  917|       |
  918|      0|        case PpAtomRightAssign:        return RIGHT_ASSIGN;
  ------------------
  |  Branch (918:9): [True: 0, False: 117M]
  ------------------
  919|      0|        case PpAtomLeftAssign:         return LEFT_ASSIGN;
  ------------------
  |  Branch (919:9): [True: 0, False: 117M]
  ------------------
  920|      1|        case PpAtomAndAssign:          return AND_ASSIGN;
  ------------------
  |  Branch (920:9): [True: 1, False: 117M]
  ------------------
  921|      0|        case PpAtomOrAssign:           return OR_ASSIGN;
  ------------------
  |  Branch (921:9): [True: 0, False: 117M]
  ------------------
  922|      0|        case PpAtomXorAssign:          return XOR_ASSIGN;
  ------------------
  |  Branch (922:9): [True: 0, False: 117M]
  ------------------
  923|       |
  924|      1|        case PpAtomAnd:                return AND_OP;
  ------------------
  |  Branch (924:9): [True: 1, False: 117M]
  ------------------
  925|      0|        case PpAtomOr:                 return OR_OP;
  ------------------
  |  Branch (925:9): [True: 0, False: 117M]
  ------------------
  926|      0|        case PpAtomXor:                return XOR_OP;
  ------------------
  |  Branch (926:9): [True: 0, False: 117M]
  ------------------
  927|       |
  928|      2|        case PpAtomEQ:                 return EQ_OP;
  ------------------
  |  Branch (928:9): [True: 2, False: 117M]
  ------------------
  929|      1|        case PpAtomGE:                 return GE_OP;
  ------------------
  |  Branch (929:9): [True: 1, False: 117M]
  ------------------
  930|      0|        case PpAtomNE:                 return NE_OP;
  ------------------
  |  Branch (930:9): [True: 0, False: 117M]
  ------------------
  931|      0|        case PpAtomLE:                 return LE_OP;
  ------------------
  |  Branch (931:9): [True: 0, False: 117M]
  ------------------
  932|       |
  933|      3|        case PpAtomDecrement:          return DEC_OP;
  ------------------
  |  Branch (933:9): [True: 3, False: 117M]
  ------------------
  934|      3|        case PpAtomIncrement:          return INC_OP;
  ------------------
  |  Branch (934:9): [True: 3, False: 117M]
  ------------------
  935|       |
  936|      0|        case PpAtomColonColon:
  ------------------
  |  Branch (936:9): [True: 0, False: 117M]
  ------------------
  937|      0|            parseContext.error(loc, "not supported", "::", "");
  938|      0|            break;
  939|       |
  940|      0|        case PpAtomConstString:        parserToken->sType.lex.string = NewPoolTString(tokenText);     return STRING_LITERAL;
  ------------------
  |  Branch (940:9): [True: 0, False: 117M]
  ------------------
  941|   273k|        case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
  ------------------
  |  Branch (941:9): [True: 273k, False: 117M]
  ------------------
  942|  28.4k|        case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
  ------------------
  |  Branch (942:9): [True: 28.4k, False: 117M]
  ------------------
  943|      4|        case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
  ------------------
  |  Branch (943:9): [True: 4, False: 117M]
  ------------------
  944|      0|        case PpAtomConstInt16:         parserToken->sType.lex.i    = ppToken.ival;       return INT16CONSTANT;
  ------------------
  |  Branch (944:9): [True: 0, False: 117M]
  ------------------
  945|      0|        case PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
  ------------------
  |  Branch (945:9): [True: 0, False: 117M]
  ------------------
  946|      2|        case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
  ------------------
  |  Branch (946:9): [True: 2, False: 117M]
  ------------------
  947|      0|        case PpAtomConstUint64:        parserToken->sType.lex.i64  = ppToken.i64val;     return UINT64CONSTANT;
  ------------------
  |  Branch (947:9): [True: 0, False: 117M]
  ------------------
  948|      0|        case PpAtomConstDouble:        parserToken->sType.lex.d    = ppToken.dval;       return DOUBLECONSTANT;
  ------------------
  |  Branch (948:9): [True: 0, False: 117M]
  ------------------
  949|      0|        case PpAtomConstFloat16:       parserToken->sType.lex.d    = ppToken.dval;       return FLOAT16CONSTANT;
  ------------------
  |  Branch (949:9): [True: 0, False: 117M]
  ------------------
  950|      0|        case PpAtomConstFloatE2M1:     parserToken->sType.lex.d    = ppToken.dval;       return FLOATE2M1CONSTANT;
  ------------------
  |  Branch (950:9): [True: 0, False: 117M]
  ------------------
  951|      0|        case PpAtomConstFloatE3M2:     parserToken->sType.lex.d    = ppToken.dval;       return FLOATE3M2CONSTANT;
  ------------------
  |  Branch (951:9): [True: 0, False: 117M]
  ------------------
  952|      0|        case PpAtomConstFloatE2M3:     parserToken->sType.lex.d    = ppToken.dval;       return FLOATE2M3CONSTANT;
  ------------------
  |  Branch (952:9): [True: 0, False: 117M]
  ------------------
  953|      0|        case PpAtomConstFloatUE8M0:    parserToken->sType.lex.d    = ppToken.dval;       return FLOATUE8M0CONSTANT;
  ------------------
  |  Branch (953:9): [True: 0, False: 117M]
  ------------------
  954|      0|        case PpAtomConstFloatMXINT8:   parserToken->sType.lex.d    = ppToken.dval;       return FLOATMXINT8CONSTANT;
  ------------------
  |  Branch (954:9): [True: 0, False: 117M]
  ------------------
  955|  64.8M|        case PpAtomIdentifier:
  ------------------
  |  Branch (955:9): [True: 64.8M, False: 52.6M]
  ------------------
  956|  64.8M|        {
  957|  64.8M|            int token = tokenizeIdentifier();
  958|  64.8M|            field = false;
  959|  64.8M|            return token;
  960|      0|        }
  961|       |
  962|      0|        case EndOfInput:               return 0;
  ------------------
  |  Branch (962:9): [True: 0, False: 117M]
  ------------------
  963|       |
  964|     81|        default:
  ------------------
  |  Branch (964:9): [True: 81, False: 117M]
  ------------------
  965|     81|            char buf[2];
  966|     81|            buf[0] = (char)token;
  967|     81|            buf[1] = 0;
  968|     81|            parseContext.error(loc, "unexpected token", buf, "");
  969|     81|            break;
  970|   117M|        }
  971|   117M|    } while (true);
  ------------------
  |  Branch (971:14): [True: 85, Folded]
  ------------------
  972|   117M|}
_ZN7glslang12TScanContext18tokenizeIdentifierEv:
  975|  64.8M|{
  976|  64.8M|    if (ReservedSet.find(tokenText) != ReservedSet.end())
  ------------------
  |  Branch (976:9): [True: 0, False: 64.8M]
  ------------------
  977|      0|        return reservedWord();
  978|       |
  979|  64.8M|    auto it = KeywordMap.find(tokenText);
  980|  64.8M|    if (it == KeywordMap.end()) {
  ------------------
  |  Branch (980:9): [True: 16.5M, False: 48.2M]
  ------------------
  981|       |        // Should have an identifier of some sort
  982|  16.5M|        return identifierOrType();
  983|  16.5M|    }
  984|  48.2M|    keyword = it->second;
  985|       |
  986|  48.2M|    switch (keyword) {
  987|   142k|    case CONST:
  ------------------
  |  Branch (987:5): [True: 142k, False: 48.1M]
  ------------------
  988|   149k|    case UNIFORM:
  ------------------
  |  Branch (988:5): [True: 6.26k, False: 48.2M]
  ------------------
  989|   149k|    case TILEIMAGEEXT:
  ------------------
  |  Branch (989:5): [True: 0, False: 48.2M]
  ------------------
  990|   405k|    case IN:
  ------------------
  |  Branch (990:5): [True: 256k, False: 48.0M]
  ------------------
  991|  1.24M|    case OUT:
  ------------------
  |  Branch (991:5): [True: 838k, False: 47.4M]
  ------------------
  992|  1.32M|    case INOUT:
  ------------------
  |  Branch (992:5): [True: 79.8k, False: 48.2M]
  ------------------
  993|  1.32M|    case BREAK:
  ------------------
  |  Branch (993:5): [True: 0, False: 48.2M]
  ------------------
  994|  1.32M|    case CONTINUE:
  ------------------
  |  Branch (994:5): [True: 0, False: 48.2M]
  ------------------
  995|  1.32M|    case DO:
  ------------------
  |  Branch (995:5): [True: 0, False: 48.2M]
  ------------------
  996|  1.32M|    case FOR:
  ------------------
  |  Branch (996:5): [True: 1, False: 48.2M]
  ------------------
  997|  1.32M|    case WHILE:
  ------------------
  |  Branch (997:5): [True: 0, False: 48.2M]
  ------------------
  998|  1.32M|    case IF:
  ------------------
  |  Branch (998:5): [True: 1, False: 48.2M]
  ------------------
  999|  1.32M|    case ELSE:
  ------------------
  |  Branch (999:5): [True: 0, False: 48.2M]
  ------------------
 1000|  1.32M|    case DISCARD:
  ------------------
  |  Branch (1000:5): [True: 0, False: 48.2M]
  ------------------
 1001|  1.32M|    case RETURN:
  ------------------
  |  Branch (1001:5): [True: 0, False: 48.2M]
  ------------------
 1002|  1.32M|    case CASE:
  ------------------
  |  Branch (1002:5): [True: 0, False: 48.2M]
  ------------------
 1003|  1.32M|        return keyword;
 1004|       |
 1005|      0|    case TERMINATE_INVOCATION:
  ------------------
  |  Branch (1005:5): [True: 0, False: 48.2M]
  ------------------
 1006|      0|        if (!parseContext.extensionTurnedOn(E_GL_EXT_terminate_invocation))
  ------------------
  |  Branch (1006:13): [True: 0, False: 0]
  ------------------
 1007|      0|            return identifierOrType();
 1008|      0|        return keyword;
 1009|       |
 1010|      0|    case TERMINATE_RAY:
  ------------------
  |  Branch (1010:5): [True: 0, False: 48.2M]
  ------------------
 1011|      0|    case IGNORE_INTERSECTION:
  ------------------
  |  Branch (1011:5): [True: 0, False: 48.2M]
  ------------------
 1012|      0|        if (!parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing))
  ------------------
  |  Branch (1012:13): [True: 0, False: 0]
  ------------------
 1013|      0|            return identifierOrType();
 1014|      0|        return keyword;
 1015|       |
 1016|      0|    case BUFFER:
  ------------------
  |  Branch (1016:5): [True: 0, False: 48.2M]
  ------------------
 1017|      0|        afterBuffer = true;
 1018|      0|        if ((parseContext.isEsProfile() && parseContext.version < 310) ||
  ------------------
  |  Branch (1018:14): [True: 0, False: 0]
  |  Branch (1018:44): [True: 0, False: 0]
  ------------------
 1019|      0|            (!parseContext.isEsProfile() && (parseContext.version < 430 &&
  ------------------
  |  Branch (1019:14): [True: 0, False: 0]
  |  Branch (1019:46): [True: 0, False: 0]
  ------------------
 1020|      0|            !parseContext.extensionTurnedOn(E_GL_ARB_shader_storage_buffer_object))))
  ------------------
  |  Branch (1020:13): [True: 0, False: 0]
  ------------------
 1021|      0|            return identifierOrType();
 1022|      0|        return keyword;
 1023|       |
 1024|    995|    case STRUCT:
  ------------------
  |  Branch (1024:5): [True: 995, False: 48.2M]
  ------------------
 1025|    995|        afterStruct = true;
 1026|    995|        return keyword;
 1027|       |
 1028|      0|    case SWITCH:
  ------------------
  |  Branch (1028:5): [True: 0, False: 48.2M]
  ------------------
 1029|      0|    case DEFAULT:
  ------------------
  |  Branch (1029:5): [True: 0, False: 48.2M]
  ------------------
 1030|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1030:14): [True: 0, False: 0]
  |  Branch (1030:44): [True: 0, False: 0]
  ------------------
 1031|      0|            (!parseContext.isEsProfile() && parseContext.version < 130))
  ------------------
  |  Branch (1031:14): [True: 0, False: 0]
  |  Branch (1031:45): [True: 0, False: 0]
  ------------------
 1032|      0|            reservedWord();
 1033|      0|        return keyword;
 1034|       |
 1035|   584k|    case VOID:
  ------------------
  |  Branch (1035:5): [True: 584k, False: 47.7M]
  ------------------
 1036|   983k|    case BOOL:
  ------------------
  |  Branch (1036:5): [True: 398k, False: 47.8M]
  ------------------
 1037|  2.89M|    case FLOAT:
  ------------------
  |  Branch (1037:5): [True: 1.90M, False: 46.3M]
  ------------------
 1038|  8.15M|    case INT:
  ------------------
  |  Branch (1038:5): [True: 5.26M, False: 43.0M]
  ------------------
 1039|  8.40M|    case BVEC2:
  ------------------
  |  Branch (1039:5): [True: 241k, False: 48.0M]
  ------------------
 1040|  8.64M|    case BVEC3:
  ------------------
  |  Branch (1040:5): [True: 241k, False: 48.0M]
  ------------------
 1041|  8.88M|    case BVEC4:
  ------------------
  |  Branch (1041:5): [True: 241k, False: 48.0M]
  ------------------
 1042|  10.2M|    case VEC2:
  ------------------
  |  Branch (1042:5): [True: 1.37M, False: 46.9M]
  ------------------
 1043|  11.5M|    case VEC3:
  ------------------
  |  Branch (1043:5): [True: 1.26M, False: 47.0M]
  ------------------
 1044|  12.7M|    case VEC4:
  ------------------
  |  Branch (1044:5): [True: 1.19M, False: 47.0M]
  ------------------
 1045|  14.1M|    case IVEC2:
  ------------------
  |  Branch (1045:5): [True: 1.41M, False: 46.8M]
  ------------------
 1046|  15.4M|    case IVEC3:
  ------------------
  |  Branch (1046:5): [True: 1.27M, False: 47.0M]
  ------------------
 1047|  16.1M|    case IVEC4:
  ------------------
  |  Branch (1047:5): [True: 748k, False: 47.5M]
  ------------------
 1048|  16.1M|    case MAT2:
  ------------------
  |  Branch (1048:5): [True: 13.9k, False: 48.2M]
  ------------------
 1049|  16.1M|    case MAT3:
  ------------------
  |  Branch (1049:5): [True: 13.9k, False: 48.2M]
  ------------------
 1050|  16.1M|    case MAT4:
  ------------------
  |  Branch (1050:5): [True: 13.9k, False: 48.2M]
  ------------------
 1051|  16.3M|    case SAMPLER2D:
  ------------------
  |  Branch (1051:5): [True: 146k, False: 48.1M]
  ------------------
 1052|  16.3M|    case SAMPLERCUBE:
  ------------------
  |  Branch (1052:5): [True: 27.2k, False: 48.2M]
  ------------------
 1053|  16.3M|        afterType = true;
 1054|  16.3M|        return keyword;
 1055|       |
 1056|      1|    case BOOLCONSTANT:
  ------------------
  |  Branch (1056:5): [True: 1, False: 48.2M]
  ------------------
 1057|      1|        if (strcmp("true", tokenText) == 0)
  ------------------
  |  Branch (1057:13): [True: 0, False: 1]
  ------------------
 1058|      0|            parserToken->sType.lex.b = true;
 1059|      1|        else
 1060|      1|            parserToken->sType.lex.b = false;
 1061|      1|        return keyword;
 1062|       |
 1063|      0|    case SMOOTH:
  ------------------
  |  Branch (1063:5): [True: 0, False: 48.2M]
  ------------------
 1064|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1064:14): [True: 0, False: 0]
  |  Branch (1064:44): [True: 0, False: 0]
  ------------------
 1065|      0|            (!parseContext.isEsProfile() && parseContext.version < 130))
  ------------------
  |  Branch (1065:14): [True: 0, False: 0]
  |  Branch (1065:45): [True: 0, False: 0]
  ------------------
 1066|      0|            return identifierOrType();
 1067|      0|        return keyword;
 1068|  28.3k|    case FLAT:
  ------------------
  |  Branch (1068:5): [True: 28.3k, False: 48.2M]
  ------------------
 1069|  28.3k|        if (parseContext.isEsProfile() && parseContext.version < 300)
  ------------------
  |  Branch (1069:13): [True: 14.3k, False: 14.0k]
  |  Branch (1069:43): [True: 0, False: 14.3k]
  ------------------
 1070|      0|            reservedWord();
 1071|  28.3k|        else if (!parseContext.isEsProfile() && parseContext.version < 130)
  ------------------
  |  Branch (1071:18): [True: 14.0k, False: 14.3k]
  |  Branch (1071:49): [True: 0, False: 14.0k]
  ------------------
 1072|      0|            return identifierOrType();
 1073|  28.3k|        return keyword;
 1074|      0|    case CENTROID:
  ------------------
  |  Branch (1074:5): [True: 0, False: 48.2M]
  ------------------
 1075|      0|        if (parseContext.version < 120)
  ------------------
  |  Branch (1075:13): [True: 0, False: 0]
  ------------------
 1076|      0|            return identifierOrType();
 1077|      0|        return keyword;
 1078|      0|    case INVARIANT:
  ------------------
  |  Branch (1078:5): [True: 0, False: 48.2M]
  ------------------
 1079|      0|        if (!parseContext.isEsProfile() && parseContext.version < 120)
  ------------------
  |  Branch (1079:13): [True: 0, False: 0]
  |  Branch (1079:44): [True: 0, False: 0]
  ------------------
 1080|      0|            return identifierOrType();
 1081|      0|        return keyword;
 1082|      0|    case PACKED:
  ------------------
  |  Branch (1082:5): [True: 0, False: 48.2M]
  ------------------
 1083|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1083:14): [True: 0, False: 0]
  |  Branch (1083:44): [True: 0, False: 0]
  ------------------
 1084|      0|            (!parseContext.isEsProfile() && parseContext.version < 140))
  ------------------
  |  Branch (1084:14): [True: 0, False: 0]
  |  Branch (1084:45): [True: 0, False: 0]
  ------------------
 1085|      0|            return reservedWord();
 1086|      0|        return identifierOrType();
 1087|       |
 1088|      0|    case RESOURCE:
  ------------------
  |  Branch (1088:5): [True: 0, False: 48.2M]
  ------------------
 1089|      0|    {
 1090|      0|        bool reserved = (parseContext.isEsProfile() && parseContext.version >= 300) ||
  ------------------
  |  Branch (1090:26): [True: 0, False: 0]
  |  Branch (1090:56): [True: 0, False: 0]
  ------------------
 1091|      0|                        (!parseContext.isEsProfile() && parseContext.version >= 420);
  ------------------
  |  Branch (1091:26): [True: 0, False: 0]
  |  Branch (1091:57): [True: 0, False: 0]
  ------------------
 1092|      0|        return identifierOrReserved(reserved);
 1093|      0|    }
 1094|      0|    case SUPERP:
  ------------------
  |  Branch (1094:5): [True: 0, False: 48.2M]
  ------------------
 1095|      0|    {
 1096|      0|        bool reserved = parseContext.isEsProfile() || parseContext.version >= 130;
  ------------------
  |  Branch (1096:25): [True: 0, False: 0]
  |  Branch (1096:55): [True: 0, False: 0]
  ------------------
 1097|      0|        return identifierOrReserved(reserved);
 1098|      0|    }
 1099|       |
 1100|      0|    case NOPERSPECTIVE:
  ------------------
  |  Branch (1100:5): [True: 0, False: 48.2M]
  ------------------
 1101|      0|        if (parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
  ------------------
  |  Branch (1101:13): [True: 0, False: 0]
  ------------------
 1102|      0|            return keyword;
 1103|      0|        return es30ReservedFromGLSL(130);
 1104|       |
 1105|      0|    case NONUNIFORM:
  ------------------
  |  Branch (1105:5): [True: 0, False: 48.2M]
  ------------------
 1106|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
  ------------------
  |  Branch (1106:13): [True: 0, False: 0]
  ------------------
 1107|      0|            return keyword;
 1108|      0|        else
 1109|      0|            return identifierOrType();
 1110|      0|    case ATTRIBUTE:
  ------------------
  |  Branch (1110:5): [True: 0, False: 48.2M]
  ------------------
 1111|      0|    case VARYING:
  ------------------
  |  Branch (1111:5): [True: 0, False: 48.2M]
  ------------------
 1112|      0|        if (parseContext.isEsProfile() && parseContext.version >= 300)
  ------------------
  |  Branch (1112:13): [True: 0, False: 0]
  |  Branch (1112:43): [True: 0, False: 0]
  ------------------
 1113|      0|            reservedWord();
 1114|      0|        return keyword;
 1115|      0|    case PAYLOADNV:
  ------------------
  |  Branch (1115:5): [True: 0, False: 48.2M]
  ------------------
 1116|      0|    case PAYLOADINNV:
  ------------------
  |  Branch (1116:5): [True: 0, False: 48.2M]
  ------------------
 1117|      0|    case HITATTRNV:
  ------------------
  |  Branch (1117:5): [True: 0, False: 48.2M]
  ------------------
 1118|      0|    case CALLDATANV:
  ------------------
  |  Branch (1118:5): [True: 0, False: 48.2M]
  ------------------
 1119|      0|    case CALLDATAINNV:
  ------------------
  |  Branch (1119:5): [True: 0, False: 48.2M]
  ------------------
 1120|      6|    case ACCSTRUCTNV:
  ------------------
  |  Branch (1120:5): [True: 6, False: 48.2M]
  ------------------
 1121|      6|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1121:13): [True: 6, False: 0]
  ------------------
 1122|      0|            parseContext.extensionTurnedOn(E_GL_NV_ray_tracing))
  ------------------
  |  Branch (1122:13): [True: 0, False: 0]
  ------------------
 1123|      6|            return keyword;
 1124|      0|        return identifierOrType();
 1125|     50|    case ACCSTRUCTEXT:
  ------------------
  |  Branch (1125:5): [True: 50, False: 48.2M]
  ------------------
 1126|     50|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1126:13): [True: 50, False: 0]
  ------------------
 1127|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) ||
  ------------------
  |  Branch (1127:13): [True: 0, False: 0]
  ------------------
 1128|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_query) ||
  ------------------
  |  Branch (1128:13): [True: 0, False: 0]
  ------------------
 1129|      0|            parseContext.extensionTurnedOn(E_GL_NV_displacement_micromap))
  ------------------
  |  Branch (1129:13): [True: 0, False: 0]
  ------------------
 1130|     50|            return keyword;
 1131|      0|        return identifierOrType();
 1132|      0|    case PAYLOADEXT:
  ------------------
  |  Branch (1132:5): [True: 0, False: 48.2M]
  ------------------
 1133|      0|    case PAYLOADINEXT:
  ------------------
  |  Branch (1133:5): [True: 0, False: 48.2M]
  ------------------
 1134|      0|    case HITATTREXT:
  ------------------
  |  Branch (1134:5): [True: 0, False: 48.2M]
  ------------------
 1135|      0|    case CALLDATAEXT:
  ------------------
  |  Branch (1135:5): [True: 0, False: 48.2M]
  ------------------
 1136|      0|    case CALLDATAINEXT:
  ------------------
  |  Branch (1136:5): [True: 0, False: 48.2M]
  ------------------
 1137|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1137:13): [True: 0, False: 0]
  ------------------
 1138|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) ||
  ------------------
  |  Branch (1138:13): [True: 0, False: 0]
  ------------------
 1139|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_query))
  ------------------
  |  Branch (1139:13): [True: 0, False: 0]
  ------------------
 1140|      0|            return keyword;
 1141|      0|        return identifierOrType();
 1142|     38|    case RAYQUERYEXT:
  ------------------
  |  Branch (1142:5): [True: 38, False: 48.2M]
  ------------------
 1143|     38|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1143:13): [True: 38, False: 0]
  ------------------
 1144|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (1144:14): [True: 0, False: 0]
  |  Branch (1144:45): [True: 0, False: 0]
  ------------------
 1145|      0|                 && parseContext.extensionTurnedOn(E_GL_EXT_ray_query)))
  ------------------
  |  Branch (1145:21): [True: 0, False: 0]
  ------------------
 1146|     38|            return keyword;
 1147|      0|        return identifierOrType();
 1148|  7.68k|    case ATOMIC_UINT:
  ------------------
  |  Branch (1148:5): [True: 7.68k, False: 48.2M]
  ------------------
 1149|  7.68k|        if ((parseContext.isEsProfile() && parseContext.version >= 310) ||
  ------------------
  |  Branch (1149:14): [True: 2.96k, False: 4.71k]
  |  Branch (1149:44): [True: 2.96k, False: 0]
  ------------------
 1150|  4.71k|            parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
  ------------------
  |  Branch (1150:13): [True: 0, False: 4.71k]
  ------------------
 1151|  2.96k|            return keyword;
 1152|  4.71k|        return es30ReservedFromGLSL(420);
 1153|       |
 1154|  1.57M|    case COHERENT:
  ------------------
  |  Branch (1154:5): [True: 1.57M, False: 46.7M]
  ------------------
 1155|  1.57M|    case DEVICECOHERENT:
  ------------------
  |  Branch (1155:5): [True: 0, False: 48.2M]
  ------------------
 1156|  1.57M|    case QUEUEFAMILYCOHERENT:
  ------------------
  |  Branch (1156:5): [True: 0, False: 48.2M]
  ------------------
 1157|  1.57M|    case WORKGROUPCOHERENT:
  ------------------
  |  Branch (1157:5): [True: 0, False: 48.2M]
  ------------------
 1158|  1.57M|    case SUBGROUPCOHERENT:
  ------------------
  |  Branch (1158:5): [True: 0, False: 48.2M]
  ------------------
 1159|  1.57M|    case SHADERCALLCOHERENT:
  ------------------
  |  Branch (1159:5): [True: 0, False: 48.2M]
  ------------------
 1160|  1.57M|    case NONPRIVATE:
  ------------------
  |  Branch (1160:5): [True: 0, False: 48.2M]
  ------------------
 1161|  1.57M|    case RESTRICT:
  ------------------
  |  Branch (1161:5): [True: 0, False: 48.2M]
  ------------------
 1162|  1.78M|    case READONLY:
  ------------------
  |  Branch (1162:5): [True: 208k, False: 48.0M]
  ------------------
 1163|  1.95M|    case WRITEONLY:
  ------------------
  |  Branch (1163:5): [True: 173k, False: 48.1M]
  ------------------
 1164|  1.95M|        if (parseContext.isEsProfile() && parseContext.version >= 310)
  ------------------
  |  Branch (1164:13): [True: 774k, False: 1.18M]
  |  Branch (1164:43): [True: 774k, False: 0]
  ------------------
 1165|   774k|            return keyword;
 1166|  1.18M|        return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420);
  ------------------
  |  Branch (1166:37): [True: 0, False: 1.18M]
  ------------------
 1167|  1.61M|    case VOLATILE:
  ------------------
  |  Branch (1167:5): [True: 1.61M, False: 46.6M]
  ------------------
 1168|  1.61M|        if (parseContext.isEsProfile() && parseContext.version >= 310)
  ------------------
  |  Branch (1168:13): [True: 640k, False: 971k]
  |  Branch (1168:43): [True: 640k, False: 0]
  ------------------
 1169|   640k|            return keyword;
 1170|   971k|        if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.isEsProfile() ||
  ------------------
  |  Branch (1170:13): [True: 0, False: 971k]
  |  Branch (1170:61): [True: 0, False: 0]
  ------------------
 1171|      0|            (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
  ------------------
  |  Branch (1171:14): [True: 0, False: 0]
  |  Branch (1171:44): [True: 0, False: 0]
  ------------------
 1172|      0|            reservedWord();
 1173|   971k|        return keyword;
 1174|  1.49M|    case NONTEMPORAL:
  ------------------
  |  Branch (1174:5): [True: 1.49M, False: 46.7M]
  ------------------
 1175|  1.49M|        if (parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (1175:13): [True: 1.49M, False: 0]
  ------------------
 1176|  1.49M|            return keyword;
 1177|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_nontemporal_keyword)) {
  ------------------
  |  Branch (1177:13): [True: 0, False: 0]
  ------------------
 1178|      0|            if (!parseContext.intermediate.usingVulkanMemoryModel())
  ------------------
  |  Branch (1178:17): [True: 0, False: 0]
  ------------------
 1179|      0|                parseContext.warn(loc, "Nontemporal without the Vulkan Memory Model is ignored", tokenText, "");
 1180|      0|            return keyword;
 1181|      0|        }
 1182|      0|        return identifierOrType();
 1183|  4.80k|    case PATCH:
  ------------------
  |  Branch (1183:5): [True: 4.80k, False: 48.2M]
  ------------------
 1184|  4.80k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1184:13): [True: 4.80k, False: 0]
  ------------------
 1185|      0|            (parseContext.isEsProfile() &&
  ------------------
  |  Branch (1185:14): [True: 0, False: 0]
  ------------------
 1186|      0|             (parseContext.version >= 320 ||
  ------------------
  |  Branch (1186:15): [True: 0, False: 0]
  ------------------
 1187|      0|              parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) ||
  ------------------
  |  Branch (1187:15): [True: 0, False: 0]
  ------------------
 1188|      0|            (!parseContext.isEsProfile() && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
  ------------------
  |  Branch (1188:14): [True: 0, False: 0]
  |  Branch (1188:45): [True: 0, False: 0]
  ------------------
 1189|  4.80k|            return keyword;
 1190|       |
 1191|      0|        return es30ReservedFromGLSL(400);
 1192|       |
 1193|      0|    case SAMPLE: 
  ------------------
  |  Branch (1193:5): [True: 0, False: 48.2M]
  ------------------
 1194|      0|    {
 1195|      0|        const int numLayoutExts = 3;
 1196|      0|        const char* layoutExts[numLayoutExts] = {E_GL_OES_shader_multisample_interpolation, E_GL_ARB_gpu_shader5,
 1197|      0|                                                 E_GL_NV_gpu_shader5};
 1198|      0|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1198:14): [True: 0, False: 0]
  |  Branch (1198:44): [True: 0, False: 0]
  ------------------
 1199|      0|            parseContext.extensionsTurnedOn(numLayoutExts, layoutExts))
  ------------------
  |  Branch (1199:13): [True: 0, False: 0]
  ------------------
 1200|      0|            return keyword;
 1201|      0|        return es30ReservedFromGLSL(400);
 1202|      0|    }
 1203|      0|    case SUBROUTINE:
  ------------------
  |  Branch (1203:5): [True: 0, False: 48.2M]
  ------------------
 1204|      0|        return es30ReservedFromGLSL(400);
 1205|       |
 1206|      0|    case SHARED:
  ------------------
  |  Branch (1206:5): [True: 0, False: 48.2M]
  ------------------
 1207|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1207:14): [True: 0, False: 0]
  |  Branch (1207:44): [True: 0, False: 0]
  ------------------
 1208|      0|            (!parseContext.isEsProfile() && parseContext.version < 140))
  ------------------
  |  Branch (1208:14): [True: 0, False: 0]
  |  Branch (1208:45): [True: 0, False: 0]
  ------------------
 1209|      0|            return identifierOrType();
 1210|      0|        return keyword;
 1211|      0|    case LAYOUT:
  ------------------
  |  Branch (1211:5): [True: 0, False: 48.2M]
  ------------------
 1212|      0|    {
 1213|      0|        const int numLayoutExts = 2;
 1214|      0|        const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
 1215|      0|                                                  E_GL_ARB_explicit_attrib_location };
 1216|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1216:14): [True: 0, False: 0]
  |  Branch (1216:44): [True: 0, False: 0]
  ------------------
 1217|      0|            (!parseContext.isEsProfile() && parseContext.version < 140 &&
  ------------------
  |  Branch (1217:14): [True: 0, False: 0]
  |  Branch (1217:45): [True: 0, False: 0]
  ------------------
 1218|      0|            ! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
  ------------------
  |  Branch (1218:13): [True: 0, False: 0]
  ------------------
 1219|      0|            return identifierOrType();
 1220|      0|        return keyword;
 1221|      0|    }
 1222|       |
 1223|  2.20M|    case HIGH_PRECISION:
  ------------------
  |  Branch (1223:5): [True: 2.20M, False: 46.0M]
  ------------------
 1224|  2.23M|    case MEDIUM_PRECISION:
  ------------------
  |  Branch (1224:5): [True: 29.5k, False: 48.2M]
  ------------------
 1225|  2.26M|    case LOW_PRECISION:
  ------------------
  |  Branch (1225:5): [True: 36.6k, False: 48.2M]
  ------------------
 1226|  2.26M|    case PRECISION:
  ------------------
  |  Branch (1226:5): [True: 0, False: 48.2M]
  ------------------
 1227|  2.26M|        return precisionKeyword();
 1228|       |
 1229|      0|    case MAT2X2:
  ------------------
  |  Branch (1229:5): [True: 0, False: 48.2M]
  ------------------
 1230|  8.64k|    case MAT2X3:
  ------------------
  |  Branch (1230:5): [True: 8.64k, False: 48.2M]
  ------------------
 1231|  17.2k|    case MAT2X4:
  ------------------
  |  Branch (1231:5): [True: 8.64k, False: 48.2M]
  ------------------
 1232|  25.9k|    case MAT3X2:
  ------------------
  |  Branch (1232:5): [True: 8.64k, False: 48.2M]
  ------------------
 1233|  25.9k|    case MAT3X3:
  ------------------
  |  Branch (1233:5): [True: 0, False: 48.2M]
  ------------------
 1234|  34.5k|    case MAT3X4:
  ------------------
  |  Branch (1234:5): [True: 8.64k, False: 48.2M]
  ------------------
 1235|  43.2k|    case MAT4X2:
  ------------------
  |  Branch (1235:5): [True: 8.64k, False: 48.2M]
  ------------------
 1236|  51.8k|    case MAT4X3:
  ------------------
  |  Branch (1236:5): [True: 8.66k, False: 48.2M]
  ------------------
 1237|  51.8k|    case MAT4X4:
  ------------------
  |  Branch (1237:5): [True: 0, False: 48.2M]
  ------------------
 1238|  51.8k|        return matNxM();
 1239|       |
 1240|  4.06k|    case DMAT2:
  ------------------
  |  Branch (1240:5): [True: 4.06k, False: 48.2M]
  ------------------
 1241|  8.13k|    case DMAT3:
  ------------------
  |  Branch (1241:5): [True: 4.06k, False: 48.2M]
  ------------------
 1242|  12.2k|    case DMAT4:
  ------------------
  |  Branch (1242:5): [True: 4.06k, False: 48.2M]
  ------------------
 1243|  12.2k|    case DMAT2X2:
  ------------------
  |  Branch (1243:5): [True: 0, False: 48.2M]
  ------------------
 1244|  14.9k|    case DMAT2X3:
  ------------------
  |  Branch (1244:5): [True: 2.71k, False: 48.2M]
  ------------------
 1245|  17.6k|    case DMAT2X4:
  ------------------
  |  Branch (1245:5): [True: 2.71k, False: 48.2M]
  ------------------
 1246|  20.3k|    case DMAT3X2:
  ------------------
  |  Branch (1246:5): [True: 2.71k, False: 48.2M]
  ------------------
 1247|  20.3k|    case DMAT3X3:
  ------------------
  |  Branch (1247:5): [True: 0, False: 48.2M]
  ------------------
 1248|  23.0k|    case DMAT3X4:
  ------------------
  |  Branch (1248:5): [True: 2.71k, False: 48.2M]
  ------------------
 1249|  25.7k|    case DMAT4X2:
  ------------------
  |  Branch (1249:5): [True: 2.71k, False: 48.2M]
  ------------------
 1250|  28.4k|    case DMAT4X3:
  ------------------
  |  Branch (1250:5): [True: 2.71k, False: 48.2M]
  ------------------
 1251|  28.4k|    case DMAT4X4:
  ------------------
  |  Branch (1251:5): [True: 0, False: 48.2M]
  ------------------
 1252|  28.4k|        return dMat();
 1253|       |
 1254|  10.2k|    case IMAGE1D:
  ------------------
  |  Branch (1254:5): [True: 10.2k, False: 48.2M]
  ------------------
 1255|  20.6k|    case IIMAGE1D:
  ------------------
  |  Branch (1255:5): [True: 10.3k, False: 48.2M]
  ------------------
 1256|  31.0k|    case UIMAGE1D:
  ------------------
  |  Branch (1256:5): [True: 10.3k, False: 48.2M]
  ------------------
 1257|  41.2k|    case IMAGE1DARRAY:
  ------------------
  |  Branch (1257:5): [True: 10.2k, False: 48.2M]
  ------------------
 1258|  51.6k|    case IIMAGE1DARRAY:
  ------------------
  |  Branch (1258:5): [True: 10.3k, False: 48.2M]
  ------------------
 1259|  62.0k|    case UIMAGE1DARRAY:
  ------------------
  |  Branch (1259:5): [True: 10.3k, False: 48.2M]
  ------------------
 1260|  71.8k|    case IMAGE2DRECT:
  ------------------
  |  Branch (1260:5): [True: 9.81k, False: 48.2M]
  ------------------
 1261|  81.7k|    case IIMAGE2DRECT:
  ------------------
  |  Branch (1261:5): [True: 9.93k, False: 48.2M]
  ------------------
 1262|  91.6k|    case UIMAGE2DRECT:
  ------------------
  |  Branch (1262:5): [True: 9.93k, False: 48.2M]
  ------------------
 1263|  91.6k|        afterType = true;
 1264|  91.6k|        return firstGenerationImage(false);
 1265|       |
 1266|  10.2k|    case I64IMAGE1D:
  ------------------
  |  Branch (1266:5): [True: 10.2k, False: 48.2M]
  ------------------
 1267|  20.5k|    case U64IMAGE1D:
  ------------------
  |  Branch (1267:5): [True: 10.2k, False: 48.2M]
  ------------------
 1268|  30.8k|    case I64IMAGE1DARRAY:
  ------------------
  |  Branch (1268:5): [True: 10.2k, False: 48.2M]
  ------------------
 1269|  41.1k|    case U64IMAGE1DARRAY:
  ------------------
  |  Branch (1269:5): [True: 10.2k, False: 48.2M]
  ------------------
 1270|  51.0k|    case I64IMAGE2DRECT:
  ------------------
  |  Branch (1270:5): [True: 9.85k, False: 48.2M]
  ------------------
 1271|  60.8k|    case U64IMAGE2DRECT:
  ------------------
  |  Branch (1271:5): [True: 9.85k, False: 48.2M]
  ------------------
 1272|  60.8k|        afterType = true;
 1273|  60.8k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1273:13): [True: 60.8k, False: 0]
  ------------------
 1274|  60.8k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1274:13): [True: 0, False: 0]
  ------------------
 1275|  60.8k|            return firstGenerationImage(false);
 1276|  60.8k|        }
 1277|      0|        return identifierOrType();
 1278|       |
 1279|  13.3k|    case IMAGEBUFFER:
  ------------------
  |  Branch (1279:5): [True: 13.3k, False: 48.2M]
  ------------------
 1280|  43.5k|    case IIMAGEBUFFER:
  ------------------
  |  Branch (1280:5): [True: 30.2k, False: 48.2M]
  ------------------
 1281|  73.7k|    case UIMAGEBUFFER:
  ------------------
  |  Branch (1281:5): [True: 30.2k, False: 48.2M]
  ------------------
 1282|  73.7k|        afterType = true;
 1283|  73.7k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1283:14): [True: 45.4k, False: 28.3k]
  |  Branch (1283:44): [True: 276, False: 45.1k]
  ------------------
 1284|  73.5k|            parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1284:13): [True: 0, False: 73.5k]
  ------------------
 1285|    276|            return keyword;
 1286|  73.5k|        return firstGenerationImage(false);
 1287|       |        
 1288|  30.1k|    case I64IMAGEBUFFER:
  ------------------
  |  Branch (1288:5): [True: 30.1k, False: 48.2M]
  ------------------
 1289|  60.3k|    case U64IMAGEBUFFER:
  ------------------
  |  Branch (1289:5): [True: 30.1k, False: 48.2M]
  ------------------
 1290|  60.3k|        afterType = true;        
 1291|  60.3k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1291:13): [True: 60.3k, False: 0]
  ------------------
 1292|  60.3k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1292:13): [True: 0, False: 0]
  ------------------
 1293|  60.3k|            if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1293:18): [True: 41.4k, False: 18.8k]
  |  Branch (1293:48): [True: 252, False: 41.2k]
  ------------------
 1294|  60.0k|                parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1294:17): [True: 0, False: 60.0k]
  ------------------
 1295|    252|                return keyword;
 1296|  60.0k|            return firstGenerationImage(false);
 1297|  60.3k|        }
 1298|      0|        return identifierOrType();
 1299|       |
 1300|  15.0k|    case IMAGE2D:
  ------------------
  |  Branch (1300:5): [True: 15.0k, False: 48.2M]
  ------------------
 1301|  47.1k|    case IIMAGE2D:
  ------------------
  |  Branch (1301:5): [True: 32.0k, False: 48.2M]
  ------------------
 1302|  79.1k|    case UIMAGE2D:
  ------------------
  |  Branch (1302:5): [True: 32.0k, False: 48.2M]
  ------------------
 1303|  94.2k|    case IMAGE3D:
  ------------------
  |  Branch (1303:5): [True: 15.0k, False: 48.2M]
  ------------------
 1304|   126k|    case IIMAGE3D:
  ------------------
  |  Branch (1304:5): [True: 32.0k, False: 48.2M]
  ------------------
 1305|   158k|    case UIMAGE3D:
  ------------------
  |  Branch (1305:5): [True: 32.0k, False: 48.2M]
  ------------------
 1306|   173k|    case IMAGECUBE:
  ------------------
  |  Branch (1306:5): [True: 15.0k, False: 48.2M]
  ------------------
 1307|   205k|    case IIMAGECUBE:
  ------------------
  |  Branch (1307:5): [True: 32.0k, False: 48.2M]
  ------------------
 1308|   237k|    case UIMAGECUBE:
  ------------------
  |  Branch (1308:5): [True: 32.0k, False: 48.2M]
  ------------------
 1309|   252k|    case IMAGE2DARRAY:
  ------------------
  |  Branch (1309:5): [True: 15.0k, False: 48.2M]
  ------------------
 1310|   284k|    case IIMAGE2DARRAY:
  ------------------
  |  Branch (1310:5): [True: 32.0k, False: 48.2M]
  ------------------
 1311|   316k|    case UIMAGE2DARRAY:
  ------------------
  |  Branch (1311:5): [True: 32.0k, False: 48.2M]
  ------------------
 1312|   316k|        afterType = true;
 1313|   316k|        return firstGenerationImage(true);
 1314|       |
 1315|  31.9k|    case I64IMAGE2D:
  ------------------
  |  Branch (1315:5): [True: 31.9k, False: 48.2M]
  ------------------
 1316|  63.8k|    case U64IMAGE2D:
  ------------------
  |  Branch (1316:5): [True: 31.9k, False: 48.2M]
  ------------------
 1317|  95.7k|    case I64IMAGE3D:
  ------------------
  |  Branch (1317:5): [True: 31.9k, False: 48.2M]
  ------------------
 1318|   127k|    case U64IMAGE3D:
  ------------------
  |  Branch (1318:5): [True: 31.9k, False: 48.2M]
  ------------------
 1319|   159k|    case I64IMAGECUBE:
  ------------------
  |  Branch (1319:5): [True: 31.9k, False: 48.2M]
  ------------------
 1320|   191k|    case U64IMAGECUBE:
  ------------------
  |  Branch (1320:5): [True: 31.9k, False: 48.2M]
  ------------------
 1321|   223k|    case I64IMAGE2DARRAY:
  ------------------
  |  Branch (1321:5): [True: 31.9k, False: 48.2M]
  ------------------
 1322|   255k|    case U64IMAGE2DARRAY:
  ------------------
  |  Branch (1322:5): [True: 31.9k, False: 48.2M]
  ------------------
 1323|   255k|        afterType = true;
 1324|   255k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1324:13): [True: 255k, False: 0]
  ------------------
 1325|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64))
  ------------------
  |  Branch (1325:13): [True: 0, False: 0]
  ------------------
 1326|   255k|            return firstGenerationImage(true);
 1327|      0|        return identifierOrType();
 1328|       |        
 1329|  15.0k|    case IMAGECUBEARRAY:
  ------------------
  |  Branch (1329:5): [True: 15.0k, False: 48.2M]
  ------------------
 1330|  47.1k|    case IIMAGECUBEARRAY:
  ------------------
  |  Branch (1330:5): [True: 32.0k, False: 48.2M]
  ------------------
 1331|  79.1k|    case UIMAGECUBEARRAY:
  ------------------
  |  Branch (1331:5): [True: 32.0k, False: 48.2M]
  ------------------
 1332|  79.1k|        afterType = true;
 1333|  79.1k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1333:14): [True: 45.4k, False: 33.6k]
  |  Branch (1333:44): [True: 276, False: 45.1k]
  ------------------
 1334|  78.8k|            parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
  ------------------
  |  Branch (1334:13): [True: 0, False: 78.8k]
  ------------------
 1335|    276|            return keyword;
 1336|  78.8k|        return secondGenerationImage();
 1337|       |        
 1338|  31.9k|    case I64IMAGECUBEARRAY:
  ------------------
  |  Branch (1338:5): [True: 31.9k, False: 48.2M]
  ------------------
 1339|  63.8k|    case U64IMAGECUBEARRAY:
  ------------------
  |  Branch (1339:5): [True: 31.9k, False: 48.2M]
  ------------------
 1340|  63.8k|        afterType = true;
 1341|  63.8k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1341:13): [True: 63.8k, False: 0]
  ------------------
 1342|  63.8k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1342:13): [True: 0, False: 0]
  ------------------
 1343|  63.8k|            if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1343:18): [True: 41.4k, False: 22.3k]
  |  Branch (1343:48): [True: 252, False: 41.2k]
  ------------------
 1344|  63.6k|                parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
  ------------------
  |  Branch (1344:17): [True: 0, False: 63.6k]
  ------------------
 1345|    252|                return keyword;
 1346|  63.6k|            return secondGenerationImage();
 1347|  63.8k|        }
 1348|      0|        return identifierOrType();
 1349|       |
 1350|  10.2k|    case IMAGE2DMS:
  ------------------
  |  Branch (1350:5): [True: 10.2k, False: 48.2M]
  ------------------
 1351|  20.6k|    case IIMAGE2DMS:
  ------------------
  |  Branch (1351:5): [True: 10.3k, False: 48.2M]
  ------------------
 1352|  31.0k|    case UIMAGE2DMS:
  ------------------
  |  Branch (1352:5): [True: 10.3k, False: 48.2M]
  ------------------
 1353|  41.2k|    case IMAGE2DMSARRAY:
  ------------------
  |  Branch (1353:5): [True: 10.2k, False: 48.2M]
  ------------------
 1354|  51.6k|    case IIMAGE2DMSARRAY:
  ------------------
  |  Branch (1354:5): [True: 10.3k, False: 48.2M]
  ------------------
 1355|  62.0k|    case UIMAGE2DMSARRAY:
  ------------------
  |  Branch (1355:5): [True: 10.3k, False: 48.2M]
  ------------------
 1356|  62.0k|        afterType = true;
 1357|  62.0k|        return secondGenerationImage();
 1358|       |        
 1359|  31.0k|    case I64IMAGE2DMS:
  ------------------
  |  Branch (1359:5): [True: 31.0k, False: 48.2M]
  ------------------
 1360|  62.0k|    case U64IMAGE2DMS:
  ------------------
  |  Branch (1360:5): [True: 31.0k, False: 48.2M]
  ------------------
 1361|  93.1k|    case I64IMAGE2DMSARRAY:
  ------------------
  |  Branch (1361:5): [True: 31.0k, False: 48.2M]
  ------------------
 1362|   124k|    case U64IMAGE2DMSARRAY:
  ------------------
  |  Branch (1362:5): [True: 31.0k, False: 48.2M]
  ------------------
 1363|   124k|        afterType = true;
 1364|   124k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1364:13): [True: 124k, False: 0]
  ------------------
 1365|   124k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1365:13): [True: 0, False: 0]
  ------------------
 1366|   124k|            return secondGenerationImage();
 1367|   124k|        }
 1368|      0|        return identifierOrType();
 1369|       |
 1370|   128k|    case DOUBLE:
  ------------------
  |  Branch (1370:5): [True: 128k, False: 48.1M]
  ------------------
 1371|   232k|    case DVEC2:
  ------------------
  |  Branch (1371:5): [True: 104k, False: 48.1M]
  ------------------
 1372|   336k|    case DVEC3:
  ------------------
  |  Branch (1372:5): [True: 104k, False: 48.1M]
  ------------------
 1373|   441k|    case DVEC4:
  ------------------
  |  Branch (1373:5): [True: 104k, False: 48.1M]
  ------------------
 1374|   441k|        afterType = true;
 1375|   441k|        if (parseContext.isEsProfile() || parseContext.version < 150 ||
  ------------------
  |  Branch (1375:13): [True: 0, False: 441k]
  |  Branch (1375:43): [True: 0, False: 441k]
  ------------------
 1376|   441k|            (!parseContext.symbolTable.atBuiltInLevel() &&
  ------------------
  |  Branch (1376:14): [True: 0, False: 441k]
  ------------------
 1377|      0|              (parseContext.version < 400 && !parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) &&
  ------------------
  |  Branch (1377:16): [True: 0, False: 0]
  |  Branch (1377:46): [True: 0, False: 0]
  ------------------
 1378|      0|              (parseContext.version < 410 && !parseContext.extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit)))))
  ------------------
  |  Branch (1378:16): [True: 0, False: 0]
  |  Branch (1378:46): [True: 0, False: 0]
  ------------------
 1379|      0|            reservedWord();
 1380|   441k|        return keyword;
 1381|       |
 1382|   843k|    case INT64_T:
  ------------------
  |  Branch (1382:5): [True: 843k, False: 47.4M]
  ------------------
 1383|  1.88M|    case UINT64_T:
  ------------------
  |  Branch (1383:5): [True: 1.04M, False: 47.2M]
  ------------------
 1384|  2.18M|    case I64VEC2:
  ------------------
  |  Branch (1384:5): [True: 299k, False: 47.9M]
  ------------------
 1385|  2.48M|    case I64VEC3:
  ------------------
  |  Branch (1385:5): [True: 298k, False: 47.9M]
  ------------------
 1386|  2.82M|    case I64VEC4:
  ------------------
  |  Branch (1386:5): [True: 337k, False: 47.9M]
  ------------------
 1387|  3.11M|    case U64VEC2:
  ------------------
  |  Branch (1387:5): [True: 288k, False: 48.0M]
  ------------------
 1388|  3.39M|    case U64VEC3:
  ------------------
  |  Branch (1388:5): [True: 286k, False: 48.0M]
  ------------------
 1389|  3.72M|    case U64VEC4:
  ------------------
  |  Branch (1389:5): [True: 326k, False: 47.9M]
  ------------------
 1390|  3.72M|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1390:13): [True: 3.72M, False: 0]
  ------------------
 1391|      0|            parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
  ------------------
  |  Branch (1391:13): [True: 0, False: 0]
  ------------------
 1392|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1392:13): [True: 0, False: 0]
  ------------------
 1393|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1393:13): [True: 0, False: 0]
  ------------------
 1394|  3.72M|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64)) {
  ------------------
  |  Branch (1394:13): [True: 0, False: 0]
  ------------------
 1395|  3.72M|            afterType = true;
 1396|  3.72M|            return keyword;
 1397|  3.72M|        }
 1398|      0|        return identifierOrType();
 1399|       |
 1400|   336k|    case INT8_T:
  ------------------
  |  Branch (1400:5): [True: 336k, False: 47.9M]
  ------------------
 1401|   628k|    case UINT8_T:
  ------------------
  |  Branch (1401:5): [True: 291k, False: 47.9M]
  ------------------
 1402|   914k|    case I8VEC2:
  ------------------
  |  Branch (1402:5): [True: 285k, False: 48.0M]
  ------------------
 1403|  1.19M|    case I8VEC3:
  ------------------
  |  Branch (1403:5): [True: 280k, False: 48.0M]
  ------------------
 1404|  1.47M|    case I8VEC4:
  ------------------
  |  Branch (1404:5): [True: 285k, False: 48.0M]
  ------------------
 1405|  1.75M|    case U8VEC2:
  ------------------
  |  Branch (1405:5): [True: 275k, False: 48.0M]
  ------------------
 1406|  2.03M|    case U8VEC3:
  ------------------
  |  Branch (1406:5): [True: 276k, False: 48.0M]
  ------------------
 1407|  2.30M|    case U8VEC4:
  ------------------
  |  Branch (1407:5): [True: 275k, False: 48.0M]
  ------------------
 1408|  2.30M|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1408:13): [True: 2.30M, False: 0]
  ------------------
 1409|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1409:13): [True: 0, False: 0]
  ------------------
 1410|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
  ------------------
  |  Branch (1410:13): [True: 0, False: 0]
  ------------------
 1411|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1411:13): [True: 0, False: 0]
  ------------------
 1412|  2.30M|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8)) {
  ------------------
  |  Branch (1412:13): [True: 0, False: 0]
  ------------------
 1413|  2.30M|            afterType = true;
 1414|  2.30M|            return keyword;
 1415|  2.30M|        }
 1416|      0|        return identifierOrType();
 1417|       |
 1418|   380k|    case INT16_T:
  ------------------
  |  Branch (1418:5): [True: 380k, False: 47.9M]
  ------------------
 1419|   704k|    case UINT16_T:
  ------------------
  |  Branch (1419:5): [True: 324k, False: 47.9M]
  ------------------
 1420|  1.03M|    case I16VEC2:
  ------------------
  |  Branch (1420:5): [True: 329k, False: 47.9M]
  ------------------
 1421|  1.35M|    case I16VEC3:
  ------------------
  |  Branch (1421:5): [True: 322k, False: 47.9M]
  ------------------
 1422|  1.68M|    case I16VEC4:
  ------------------
  |  Branch (1422:5): [True: 329k, False: 47.9M]
  ------------------
 1423|  2.00M|    case U16VEC2:
  ------------------
  |  Branch (1423:5): [True: 315k, False: 47.9M]
  ------------------
 1424|  2.31M|    case U16VEC3:
  ------------------
  |  Branch (1424:5): [True: 313k, False: 47.9M]
  ------------------
 1425|  2.62M|    case U16VEC4:
  ------------------
  |  Branch (1425:5): [True: 315k, False: 47.9M]
  ------------------
 1426|  2.62M|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1426:13): [True: 2.62M, False: 0]
  ------------------
 1427|      0|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
  ------------------
  |  Branch (1427:13): [True: 0, False: 0]
  ------------------
 1428|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
  ------------------
  |  Branch (1428:13): [True: 0, False: 0]
  ------------------
 1429|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1429:13): [True: 0, False: 0]
  ------------------
 1430|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1430:13): [True: 0, False: 0]
  ------------------
 1431|  2.62M|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16)) {
  ------------------
  |  Branch (1431:13): [True: 0, False: 0]
  ------------------
 1432|  2.62M|            afterType = true;
 1433|  2.62M|            return keyword;
 1434|  2.62M|        }
 1435|      0|        return identifierOrType();
 1436|  39.4k|    case INT32_T:
  ------------------
  |  Branch (1436:5): [True: 39.4k, False: 48.2M]
  ------------------
 1437|  81.8k|    case UINT32_T:
  ------------------
  |  Branch (1437:5): [True: 42.3k, False: 48.2M]
  ------------------
 1438|  86.4k|    case I32VEC2:
  ------------------
  |  Branch (1438:5): [True: 4.64k, False: 48.2M]
  ------------------
 1439|  88.2k|    case I32VEC3:
  ------------------
  |  Branch (1439:5): [True: 1.77k, False: 48.2M]
  ------------------
 1440|  90.0k|    case I32VEC4:
  ------------------
  |  Branch (1440:5): [True: 1.77k, False: 48.2M]
  ------------------
 1441|  97.5k|    case U32VEC2:
  ------------------
  |  Branch (1441:5): [True: 7.50k, False: 48.2M]
  ------------------
 1442|   105k|    case U32VEC3:
  ------------------
  |  Branch (1442:5): [True: 7.50k, False: 48.2M]
  ------------------
 1443|   106k|    case U32VEC4:
  ------------------
  |  Branch (1443:5): [True: 1.77k, False: 48.2M]
  ------------------
 1444|   106k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1444:13): [True: 106k, False: 0]
  ------------------
 1445|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1445:13): [True: 0, False: 0]
  ------------------
 1446|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1446:13): [True: 0, False: 0]
  ------------------
 1447|   106k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32)) {
  ------------------
  |  Branch (1447:13): [True: 0, False: 0]
  ------------------
 1448|   106k|            afterType = true;
 1449|   106k|            return keyword;
 1450|   106k|        }
 1451|      0|        return identifierOrType();
 1452|  33.7k|    case FLOAT32_T:
  ------------------
  |  Branch (1452:5): [True: 33.7k, False: 48.2M]
  ------------------
 1453|  35.5k|    case F32VEC2:
  ------------------
  |  Branch (1453:5): [True: 1.77k, False: 48.2M]
  ------------------
 1454|  37.2k|    case F32VEC3:
  ------------------
  |  Branch (1454:5): [True: 1.77k, False: 48.2M]
  ------------------
 1455|  39.0k|    case F32VEC4:
  ------------------
  |  Branch (1455:5): [True: 1.77k, False: 48.2M]
  ------------------
 1456|  39.0k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1456:13): [True: 39.0k, False: 0]
  ------------------
 1457|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1457:13): [True: 0, False: 0]
  ------------------
 1458|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1458:13): [True: 0, False: 0]
  ------------------
 1459|  39.0k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) {
  ------------------
  |  Branch (1459:13): [True: 0, False: 0]
  ------------------
 1460|  39.0k|            afterType = true;
 1461|  39.0k|            return keyword;
 1462|  39.0k|        }
 1463|      0|        return identifierOrType();
 1464|      0|    case F32MAT2:
  ------------------
  |  Branch (1464:5): [True: 0, False: 48.2M]
  ------------------
 1465|      0|    case F32MAT3:
  ------------------
  |  Branch (1465:5): [True: 0, False: 48.2M]
  ------------------
 1466|      0|    case F32MAT4:
  ------------------
  |  Branch (1466:5): [True: 0, False: 48.2M]
  ------------------
 1467|      0|    case F32MAT2X2:
  ------------------
  |  Branch (1467:5): [True: 0, False: 48.2M]
  ------------------
 1468|      0|    case F32MAT2X3:
  ------------------
  |  Branch (1468:5): [True: 0, False: 48.2M]
  ------------------
 1469|      0|    case F32MAT2X4:
  ------------------
  |  Branch (1469:5): [True: 0, False: 48.2M]
  ------------------
 1470|      0|    case F32MAT3X2:
  ------------------
  |  Branch (1470:5): [True: 0, False: 48.2M]
  ------------------
 1471|      0|    case F32MAT3X3:
  ------------------
  |  Branch (1471:5): [True: 0, False: 48.2M]
  ------------------
 1472|      0|    case F32MAT3X4:
  ------------------
  |  Branch (1472:5): [True: 0, False: 48.2M]
  ------------------
 1473|      0|    case F32MAT4X2:
  ------------------
  |  Branch (1473:5): [True: 0, False: 48.2M]
  ------------------
 1474|      0|    case F32MAT4X3:
  ------------------
  |  Branch (1474:5): [True: 0, False: 48.2M]
  ------------------
 1475|      0|    case F32MAT4X4:
  ------------------
  |  Branch (1475:5): [True: 0, False: 48.2M]
  ------------------
 1476|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1476:13): [True: 0, False: 0]
  ------------------
 1477|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1477:13): [True: 0, False: 0]
  ------------------
 1478|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) {
  ------------------
  |  Branch (1478:13): [True: 0, False: 0]
  ------------------
 1479|      0|            afterType = true;
 1480|      0|            return keyword;
 1481|      0|        }
 1482|      0|        return identifierOrType();
 1483|       |
 1484|   186k|    case FLOAT64_T:
  ------------------
  |  Branch (1484:5): [True: 186k, False: 48.1M]
  ------------------
 1485|   324k|    case F64VEC2:
  ------------------
  |  Branch (1485:5): [True: 138k, False: 48.1M]
  ------------------
 1486|   464k|    case F64VEC3:
  ------------------
  |  Branch (1486:5): [True: 139k, False: 48.1M]
  ------------------
 1487|   601k|    case F64VEC4:
  ------------------
  |  Branch (1487:5): [True: 136k, False: 48.1M]
  ------------------
 1488|   601k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1488:13): [True: 601k, False: 0]
  ------------------
 1489|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1489:13): [True: 0, False: 0]
  ------------------
 1490|      0|            (parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) && 
  ------------------
  |  Branch (1490:14): [True: 0, False: 0]
  ------------------
 1491|      0|             parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) ||
  ------------------
  |  Branch (1491:14): [True: 0, False: 0]
  ------------------
 1492|   601k|             parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) {
  ------------------
  |  Branch (1492:14): [True: 0, False: 0]
  ------------------
 1493|   601k|            afterType = true;
 1494|   601k|            return keyword;
 1495|   601k|        }
 1496|      0|        return identifierOrType();
 1497|  8.89k|    case F64MAT2:
  ------------------
  |  Branch (1497:5): [True: 8.89k, False: 48.2M]
  ------------------
 1498|  17.7k|    case F64MAT3:
  ------------------
  |  Branch (1498:5): [True: 8.89k, False: 48.2M]
  ------------------
 1499|  26.6k|    case F64MAT4:
  ------------------
  |  Branch (1499:5): [True: 8.89k, False: 48.2M]
  ------------------
 1500|  26.6k|    case F64MAT2X2:
  ------------------
  |  Branch (1500:5): [True: 0, False: 48.2M]
  ------------------
 1501|  32.6k|    case F64MAT2X3:
  ------------------
  |  Branch (1501:5): [True: 5.92k, False: 48.2M]
  ------------------
 1502|  38.5k|    case F64MAT2X4:
  ------------------
  |  Branch (1502:5): [True: 5.92k, False: 48.2M]
  ------------------
 1503|  44.4k|    case F64MAT3X2:
  ------------------
  |  Branch (1503:5): [True: 5.92k, False: 48.2M]
  ------------------
 1504|  44.4k|    case F64MAT3X3:
  ------------------
  |  Branch (1504:5): [True: 0, False: 48.2M]
  ------------------
 1505|  50.3k|    case F64MAT3X4:
  ------------------
  |  Branch (1505:5): [True: 5.92k, False: 48.2M]
  ------------------
 1506|  56.3k|    case F64MAT4X2:
  ------------------
  |  Branch (1506:5): [True: 5.92k, False: 48.2M]
  ------------------
 1507|  62.2k|    case F64MAT4X3:
  ------------------
  |  Branch (1507:5): [True: 5.92k, False: 48.2M]
  ------------------
 1508|  62.2k|    case F64MAT4X4:
  ------------------
  |  Branch (1508:5): [True: 0, False: 48.2M]
  ------------------
 1509|  62.2k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1509:13): [True: 62.2k, False: 0]
  ------------------
 1510|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1510:13): [True: 0, False: 0]
  ------------------
 1511|  62.2k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) {
  ------------------
  |  Branch (1511:13): [True: 0, False: 0]
  ------------------
 1512|  62.2k|            afterType = true;
 1513|  62.2k|            return keyword;
 1514|  62.2k|        }
 1515|      0|        return identifierOrType();
 1516|       |
 1517|   868k|    case FLOAT16_T:
  ------------------
  |  Branch (1517:5): [True: 868k, False: 47.4M]
  ------------------
 1518|  1.55M|    case F16VEC2:
  ------------------
  |  Branch (1518:5): [True: 684k, False: 47.6M]
  ------------------
 1519|  2.10M|    case F16VEC3:
  ------------------
  |  Branch (1519:5): [True: 553k, False: 47.7M]
  ------------------
 1520|  3.10M|    case F16VEC4:
  ------------------
  |  Branch (1520:5): [True: 999k, False: 47.2M]
  ------------------
 1521|  3.10M|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1521:13): [True: 3.10M, False: 0]
  ------------------
 1522|      0|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
  ------------------
  |  Branch (1522:13): [True: 0, False: 0]
  ------------------
 1523|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
  ------------------
  |  Branch (1523:13): [True: 0, False: 0]
  ------------------
 1524|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1524:13): [True: 0, False: 0]
  ------------------
 1525|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1525:13): [True: 0, False: 0]
  ------------------
 1526|  3.10M|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)) {
  ------------------
  |  Branch (1526:13): [True: 0, False: 0]
  ------------------
 1527|  3.10M|            afterType = true;
 1528|  3.10M|            return keyword;
 1529|  3.10M|        }
 1530|      0|        return identifierOrType();
 1531|       |
 1532|  12.8k|    case F16MAT2:
  ------------------
  |  Branch (1532:5): [True: 12.8k, False: 48.2M]
  ------------------
 1533|  25.7k|    case F16MAT3:
  ------------------
  |  Branch (1533:5): [True: 12.8k, False: 48.2M]
  ------------------
 1534|  38.6k|    case F16MAT4:
  ------------------
  |  Branch (1534:5): [True: 12.8k, False: 48.2M]
  ------------------
 1535|  38.6k|    case F16MAT2X2:
  ------------------
  |  Branch (1535:5): [True: 0, False: 48.2M]
  ------------------
 1536|  47.2k|    case F16MAT2X3:
  ------------------
  |  Branch (1536:5): [True: 8.59k, False: 48.2M]
  ------------------
 1537|  55.8k|    case F16MAT2X4:
  ------------------
  |  Branch (1537:5): [True: 8.59k, False: 48.2M]
  ------------------
 1538|  64.4k|    case F16MAT3X2:
  ------------------
  |  Branch (1538:5): [True: 8.59k, False: 48.2M]
  ------------------
 1539|  64.4k|    case F16MAT3X3:
  ------------------
  |  Branch (1539:5): [True: 0, False: 48.2M]
  ------------------
 1540|  73.0k|    case F16MAT3X4:
  ------------------
  |  Branch (1540:5): [True: 8.59k, False: 48.2M]
  ------------------
 1541|  81.6k|    case F16MAT4X2:
  ------------------
  |  Branch (1541:5): [True: 8.59k, False: 48.2M]
  ------------------
 1542|  90.2k|    case F16MAT4X3:
  ------------------
  |  Branch (1542:5): [True: 8.59k, False: 48.2M]
  ------------------
 1543|  90.2k|    case F16MAT4X4:
  ------------------
  |  Branch (1543:5): [True: 0, False: 48.2M]
  ------------------
 1544|  90.2k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1544:13): [True: 90.2k, False: 0]
  ------------------
 1545|      0|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
  ------------------
  |  Branch (1545:13): [True: 0, False: 0]
  ------------------
 1546|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1546:13): [True: 0, False: 0]
  ------------------
 1547|  90.2k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)) {
  ------------------
  |  Branch (1547:13): [True: 0, False: 0]
  ------------------
 1548|  90.2k|            afterType = true;
 1549|  90.2k|            return keyword;
 1550|  90.2k|        }
 1551|       |
 1552|      0|        return identifierOrType();
 1553|       |
 1554|  17.8k|    case BFLOAT16_T:
  ------------------
  |  Branch (1554:5): [True: 17.8k, False: 48.2M]
  ------------------
 1555|  28.2k|    case BF16VEC2:
  ------------------
  |  Branch (1555:5): [True: 10.3k, False: 48.2M]
  ------------------
 1556|  36.8k|    case BF16VEC3:
  ------------------
  |  Branch (1556:5): [True: 8.59k, False: 48.2M]
  ------------------
 1557|  47.2k|    case BF16VEC4:
  ------------------
  |  Branch (1557:5): [True: 10.3k, False: 48.2M]
  ------------------
 1558|  47.2k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1558:13): [True: 47.2k, False: 0]
  ------------------
 1559|  47.2k|            parseContext.extensionTurnedOn(E_GL_EXT_bfloat16)) {
  ------------------
  |  Branch (1559:13): [True: 0, False: 0]
  ------------------
 1560|  47.2k|            afterType = true;
 1561|  47.2k|            return keyword;
 1562|  47.2k|        }
 1563|       |
 1564|      0|        return identifierOrType();
 1565|       |
 1566|  9.28k|    case FLOATE5M2_T:
  ------------------
  |  Branch (1566:5): [True: 9.28k, False: 48.2M]
  ------------------
 1567|  16.7k|    case FE5M2VEC2:
  ------------------
  |  Branch (1567:5): [True: 7.50k, False: 48.2M]
  ------------------
 1568|  22.5k|    case FE5M2VEC3:
  ------------------
  |  Branch (1568:5): [True: 5.72k, False: 48.2M]
  ------------------
 1569|  30.0k|    case FE5M2VEC4:
  ------------------
  |  Branch (1569:5): [True: 7.50k, False: 48.2M]
  ------------------
 1570|  30.0k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1570:13): [True: 30.0k, False: 0]
  ------------------
 1571|  30.0k|            parseContext.extensionTurnedOn(E_GL_EXT_float_e5m2)) {
  ------------------
  |  Branch (1571:13): [True: 0, False: 0]
  ------------------
 1572|  30.0k|            afterType = true;
 1573|  30.0k|            return keyword;
 1574|  30.0k|        }
 1575|       |
 1576|      0|        return identifierOrType();
 1577|       |
 1578|  9.28k|    case FLOATE4M3_T:
  ------------------
  |  Branch (1578:5): [True: 9.28k, False: 48.2M]
  ------------------
 1579|  16.7k|    case FE4M3VEC2:
  ------------------
  |  Branch (1579:5): [True: 7.50k, False: 48.2M]
  ------------------
 1580|  22.5k|    case FE4M3VEC3:
  ------------------
  |  Branch (1580:5): [True: 5.72k, False: 48.2M]
  ------------------
 1581|  30.0k|    case FE4M3VEC4:
  ------------------
  |  Branch (1581:5): [True: 7.50k, False: 48.2M]
  ------------------
 1582|  30.0k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1582:13): [True: 30.0k, False: 0]
  ------------------
 1583|  30.0k|            parseContext.extensionTurnedOn(E_GL_EXT_float_e4m3)) {
  ------------------
  |  Branch (1583:13): [True: 0, False: 0]
  ------------------
 1584|  30.0k|            afterType = true;
 1585|  30.0k|            return keyword;
 1586|  30.0k|        }
 1587|       |
 1588|      0|        return identifierOrType();
 1589|       |
 1590|  7.16k|    case FLOATE2M1_T:
  ------------------
  |  Branch (1590:5): [True: 7.16k, False: 48.2M]
  ------------------
 1591|  11.4k|    case FE2M1VEC2:
  ------------------
  |  Branch (1591:5): [True: 4.29k, False: 48.2M]
  ------------------
 1592|  12.8k|    case FE2M1VEC3:
  ------------------
  |  Branch (1592:5): [True: 1.43k, False: 48.2M]
  ------------------
 1593|  17.1k|    case FE2M1VEC4:
  ------------------
  |  Branch (1593:5): [True: 4.29k, False: 48.2M]
  ------------------
 1594|  17.1k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1594:13): [True: 17.1k, False: 0]
  ------------------
 1595|  17.1k|            parseContext.extensionTurnedOn(E_GL_EXT_float_e2m1)) {
  ------------------
  |  Branch (1595:13): [True: 0, False: 0]
  ------------------
 1596|  17.1k|            afterType = true;
 1597|  17.1k|            return keyword;
 1598|  17.1k|        }
 1599|       |
 1600|      0|        return identifierOrType();
 1601|       |
 1602|  7.16k|    case FLOATE3M2_T:
  ------------------
  |  Branch (1602:5): [True: 7.16k, False: 48.2M]
  ------------------
 1603|  8.59k|    case FE3M2VEC2:
  ------------------
  |  Branch (1603:5): [True: 1.43k, False: 48.2M]
  ------------------
 1604|  10.0k|    case FE3M2VEC3:
  ------------------
  |  Branch (1604:5): [True: 1.43k, False: 48.2M]
  ------------------
 1605|  14.3k|    case FE3M2VEC4:
  ------------------
  |  Branch (1605:5): [True: 4.29k, False: 48.2M]
  ------------------
 1606|  14.3k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1606:13): [True: 14.3k, False: 0]
  ------------------
 1607|  14.3k|            parseContext.extensionTurnedOn(E_GL_EXT_float_e3m2)) {
  ------------------
  |  Branch (1607:13): [True: 0, False: 0]
  ------------------
 1608|  14.3k|            afterType = true;
 1609|  14.3k|            return keyword;
 1610|  14.3k|        }
 1611|       |
 1612|      0|        return identifierOrType();
 1613|       |
 1614|  7.16k|    case FLOATE2M3_T:
  ------------------
  |  Branch (1614:5): [True: 7.16k, False: 48.2M]
  ------------------
 1615|  8.59k|    case FE2M3VEC2:
  ------------------
  |  Branch (1615:5): [True: 1.43k, False: 48.2M]
  ------------------
 1616|  10.0k|    case FE2M3VEC3:
  ------------------
  |  Branch (1616:5): [True: 1.43k, False: 48.2M]
  ------------------
 1617|  14.3k|    case FE2M3VEC4:
  ------------------
  |  Branch (1617:5): [True: 4.29k, False: 48.2M]
  ------------------
 1618|  14.3k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1618:13): [True: 14.3k, False: 0]
  ------------------
 1619|  14.3k|            parseContext.extensionTurnedOn(E_GL_EXT_float_e2m3)) {
  ------------------
  |  Branch (1619:13): [True: 0, False: 0]
  ------------------
 1620|  14.3k|            afterType = true;
 1621|  14.3k|            return keyword;
 1622|  14.3k|        }
 1623|       |
 1624|      0|        return identifierOrType();
 1625|       |
 1626|  5.72k|    case FLOATUE8M0_T:
  ------------------
  |  Branch (1626:5): [True: 5.72k, False: 48.2M]
  ------------------
 1627|  11.4k|    case FUE8M0VEC2:
  ------------------
  |  Branch (1627:5): [True: 5.72k, False: 48.2M]
  ------------------
 1628|  17.1k|    case FUE8M0VEC3:
  ------------------
  |  Branch (1628:5): [True: 5.72k, False: 48.2M]
  ------------------
 1629|  22.9k|    case FUE8M0VEC4:
  ------------------
  |  Branch (1629:5): [True: 5.72k, False: 48.2M]
  ------------------
 1630|  22.9k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1630:13): [True: 22.9k, False: 0]
  ------------------
 1631|  22.9k|            parseContext.extensionTurnedOn(E_GL_EXT_float_ue8m0)) {
  ------------------
  |  Branch (1631:13): [True: 0, False: 0]
  ------------------
 1632|  22.9k|            afterType = true;
 1633|  22.9k|            return keyword;
 1634|  22.9k|        }
 1635|       |
 1636|      0|        return identifierOrType();
 1637|       |
 1638|  5.72k|    case FLOATMXINT8_T:
  ------------------
  |  Branch (1638:5): [True: 5.72k, False: 48.2M]
  ------------------
 1639|  11.4k|    case FMXINT8VEC2:
  ------------------
  |  Branch (1639:5): [True: 5.72k, False: 48.2M]
  ------------------
 1640|  17.1k|    case FMXINT8VEC3:
  ------------------
  |  Branch (1640:5): [True: 5.72k, False: 48.2M]
  ------------------
 1641|  22.9k|    case FMXINT8VEC4:
  ------------------
  |  Branch (1641:5): [True: 5.72k, False: 48.2M]
  ------------------
 1642|  22.9k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1642:13): [True: 22.9k, False: 0]
  ------------------
 1643|  22.9k|            parseContext.extensionTurnedOn(E_GL_EXT_float_mxint8)) {
  ------------------
  |  Branch (1643:13): [True: 0, False: 0]
  ------------------
 1644|  22.9k|            afterType = true;
 1645|  22.9k|            return keyword;
 1646|  22.9k|        }
 1647|       |
 1648|      0|        return identifierOrType();
 1649|       |
 1650|  26.9k|    case SAMPLERCUBEARRAY:
  ------------------
  |  Branch (1650:5): [True: 26.9k, False: 48.2M]
  ------------------
 1651|  43.3k|    case SAMPLERCUBEARRAYSHADOW:
  ------------------
  |  Branch (1651:5): [True: 16.4k, False: 48.2M]
  ------------------
 1652|  70.2k|    case ISAMPLERCUBEARRAY:
  ------------------
  |  Branch (1652:5): [True: 26.9k, False: 48.2M]
  ------------------
 1653|  97.2k|    case USAMPLERCUBEARRAY:
  ------------------
  |  Branch (1653:5): [True: 26.9k, False: 48.2M]
  ------------------
 1654|  97.2k|        afterType = true;
 1655|  97.2k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1655:14): [True: 26.6k, False: 70.5k]
  |  Branch (1655:44): [True: 162, False: 26.5k]
  ------------------
 1656|  97.0k|            parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
  ------------------
  |  Branch (1656:13): [True: 0, False: 97.0k]
  ------------------
 1657|    162|            return keyword;
 1658|  97.0k|        if (parseContext.isEsProfile() || (parseContext.version < 400 &&
  ------------------
  |  Branch (1658:13): [True: 26.5k, False: 70.5k]
  |  Branch (1658:44): [True: 147, False: 70.3k]
  ------------------
 1659|    147|            ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)
  ------------------
  |  Branch (1659:13): [True: 147, False: 0]
  ------------------
 1660|    147|            && ! parseContext.extensionsTurnedOn(Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5)))
  ------------------
  |  Branch (1660:16): [True: 147, False: 0]
  ------------------
 1661|  26.6k|            reservedWord();
 1662|  97.0k|        return keyword;
 1663|       |
 1664|    106|    case TEXTURECUBEARRAY:
  ------------------
  |  Branch (1664:5): [True: 106, False: 48.2M]
  ------------------
 1665|    212|    case ITEXTURECUBEARRAY:
  ------------------
  |  Branch (1665:5): [True: 106, False: 48.2M]
  ------------------
 1666|    318|    case UTEXTURECUBEARRAY:
  ------------------
  |  Branch (1666:5): [True: 106, False: 48.2M]
  ------------------
 1667|    318|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1667:13): [True: 318, False: 0]
  ------------------
 1668|    318|            return keyword;
 1669|      0|        else
 1670|      0|            return identifierOrType();
 1671|       |
 1672|  2.88M|    case UINT:
  ------------------
  |  Branch (1672:5): [True: 2.88M, False: 45.4M]
  ------------------
 1673|  3.25M|    case UVEC2:
  ------------------
  |  Branch (1673:5): [True: 373k, False: 47.9M]
  ------------------
 1674|  3.60M|    case UVEC3:
  ------------------
  |  Branch (1674:5): [True: 352k, False: 47.9M]
  ------------------
 1675|  5.67M|    case UVEC4:
  ------------------
  |  Branch (1675:5): [True: 2.06M, False: 46.2M]
  ------------------
 1676|  5.69M|    case SAMPLERCUBESHADOW:
  ------------------
  |  Branch (1676:5): [True: 19.3k, False: 48.2M]
  ------------------
 1677|  5.78M|    case SAMPLER2DARRAY:
  ------------------
  |  Branch (1677:5): [True: 89.4k, False: 48.2M]
  ------------------
 1678|  5.81M|    case SAMPLER2DARRAYSHADOW:
  ------------------
  |  Branch (1678:5): [True: 29.4k, False: 48.2M]
  ------------------
 1679|  5.93M|    case ISAMPLER2D:
  ------------------
  |  Branch (1679:5): [True: 121k, False: 48.1M]
  ------------------
 1680|  5.98M|    case ISAMPLER3D:
  ------------------
  |  Branch (1680:5): [True: 54.6k, False: 48.2M]
  ------------------
 1681|  6.01M|    case ISAMPLERCUBE:
  ------------------
  |  Branch (1681:5): [True: 26.9k, False: 48.2M]
  ------------------
 1682|  6.10M|    case ISAMPLER2DARRAY:
  ------------------
  |  Branch (1682:5): [True: 88.0k, False: 48.2M]
  ------------------
 1683|  6.22M|    case USAMPLER2D:
  ------------------
  |  Branch (1683:5): [True: 121k, False: 48.1M]
  ------------------
 1684|  6.27M|    case USAMPLER3D:
  ------------------
  |  Branch (1684:5): [True: 54.6k, False: 48.2M]
  ------------------
 1685|  6.30M|    case USAMPLERCUBE:
  ------------------
  |  Branch (1685:5): [True: 26.9k, False: 48.2M]
  ------------------
 1686|  6.39M|    case USAMPLER2DARRAY:
  ------------------
  |  Branch (1686:5): [True: 88.0k, False: 48.2M]
  ------------------
 1687|  6.39M|        afterType = true;
 1688|  6.39M|        if (keyword == SAMPLER2DARRAY || keyword == SAMPLER2DARRAYSHADOW) {
  ------------------
  |  Branch (1688:13): [True: 89.4k, False: 6.30M]
  |  Branch (1688:42): [True: 29.4k, False: 6.27M]
  ------------------
 1689|   118k|            if (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (1689:17): [True: 71.4k, False: 47.4k]
  ------------------
 1690|  71.4k|                (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) {
  ------------------
  |  Branch (1690:18): [True: 0, False: 71.4k]
  |  Branch (1690:76): [True: 71.4k, False: 0]
  ------------------
 1691|  71.4k|                return keyword;
 1692|  71.4k|            }
 1693|   118k|        }
 1694|  6.32M|        return nonreservedKeyword(300, 130);
 1695|       |
 1696|  57.3k|    case SAMPLER3D:
  ------------------
  |  Branch (1696:5): [True: 57.3k, False: 48.2M]
  ------------------
 1697|  57.3k|        afterType = true;
 1698|  57.3k|        if (parseContext.isEsProfile() && parseContext.version < 300) {
  ------------------
  |  Branch (1698:13): [True: 24.1k, False: 33.1k]
  |  Branch (1698:43): [True: 440, False: 23.7k]
  ------------------
 1699|    440|            if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
  ------------------
  |  Branch (1699:17): [True: 440, False: 0]
  ------------------
 1700|    440|                reservedWord();
 1701|    440|        }
 1702|  57.3k|        return keyword;
 1703|       |
 1704|  48.5k|    case SAMPLER2DSHADOW:
  ------------------
  |  Branch (1704:5): [True: 48.5k, False: 48.2M]
  ------------------
 1705|  48.5k|        afterType = true;
 1706|  48.5k|        if (parseContext.isEsProfile() && parseContext.version < 300) {
  ------------------
  |  Branch (1706:13): [True: 19.8k, False: 28.7k]
  |  Branch (1706:43): [True: 80, False: 19.7k]
  ------------------
 1707|     80|            if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
  ------------------
  |  Branch (1707:17): [True: 80, False: 0]
  ------------------
 1708|     80|                reservedWord();
 1709|     80|        }
 1710|  48.5k|        return keyword;
 1711|       |
 1712|    893|    case TEXTURE2D:
  ------------------
  |  Branch (1712:5): [True: 893, False: 48.2M]
  ------------------
 1713|  1.06k|    case TEXTURECUBE:
  ------------------
  |  Branch (1713:5): [True: 168, False: 48.2M]
  ------------------
 1714|  1.37k|    case TEXTURE2DARRAY:
  ------------------
  |  Branch (1714:5): [True: 318, False: 48.2M]
  ------------------
 1715|  1.69k|    case ITEXTURE2D:
  ------------------
  |  Branch (1715:5): [True: 318, False: 48.2M]
  ------------------
 1716|  2.01k|    case ITEXTURE3D:
  ------------------
  |  Branch (1716:5): [True: 318, False: 48.2M]
  ------------------
 1717|  2.12k|    case ITEXTURECUBE:
  ------------------
  |  Branch (1717:5): [True: 106, False: 48.2M]
  ------------------
 1718|  2.43k|    case ITEXTURE2DARRAY:
  ------------------
  |  Branch (1718:5): [True: 318, False: 48.2M]
  ------------------
 1719|  2.75k|    case UTEXTURE2D:
  ------------------
  |  Branch (1719:5): [True: 318, False: 48.2M]
  ------------------
 1720|  3.07k|    case UTEXTURE3D:
  ------------------
  |  Branch (1720:5): [True: 318, False: 48.2M]
  ------------------
 1721|  3.18k|    case UTEXTURECUBE:
  ------------------
  |  Branch (1721:5): [True: 106, False: 48.2M]
  ------------------
 1722|  3.49k|    case UTEXTURE2DARRAY:
  ------------------
  |  Branch (1722:5): [True: 318, False: 48.2M]
  ------------------
 1723|  3.87k|    case TEXTURE3D:
  ------------------
  |  Branch (1723:5): [True: 380, False: 48.2M]
  ------------------
 1724|  3.91k|    case SAMPLER:
  ------------------
  |  Branch (1724:5): [True: 40, False: 48.2M]
  ------------------
 1725|  3.91k|    case SAMPLERSHADOW:
  ------------------
  |  Branch (1725:5): [True: 0, False: 48.2M]
  ------------------
 1726|  3.91k|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1726:13): [True: 3.65k, False: 266]
  ------------------
 1727|  3.65k|            return keyword;
 1728|    266|        else
 1729|    266|            return identifierOrType();
 1730|       |
 1731|  26.3k|    case ISAMPLER1D:
  ------------------
  |  Branch (1731:5): [True: 26.3k, False: 48.2M]
  ------------------
 1732|  41.2k|    case ISAMPLER1DARRAY:
  ------------------
  |  Branch (1732:5): [True: 14.8k, False: 48.2M]
  ------------------
 1733|  54.2k|    case SAMPLER1DARRAYSHADOW:
  ------------------
  |  Branch (1733:5): [True: 13.0k, False: 48.2M]
  ------------------
 1734|  80.6k|    case USAMPLER1D:
  ------------------
  |  Branch (1734:5): [True: 26.3k, False: 48.2M]
  ------------------
 1735|  95.4k|    case USAMPLER1DARRAY:
  ------------------
  |  Branch (1735:5): [True: 14.8k, False: 48.2M]
  ------------------
 1736|  95.4k|        afterType = true;
 1737|  95.4k|        if (keyword == SAMPLER1DARRAYSHADOW) {
  ------------------
  |  Branch (1737:13): [True: 13.0k, False: 82.4k]
  ------------------
 1738|  13.0k|            if (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (1738:17): [True: 13.0k, False: 0]
  ------------------
 1739|  13.0k|                (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) {
  ------------------
  |  Branch (1739:18): [True: 0, False: 13.0k]
  |  Branch (1739:76): [True: 13.0k, False: 0]
  ------------------
 1740|  13.0k|                return keyword;
 1741|  13.0k|            }
 1742|  13.0k|        }
 1743|  82.4k|        return es30ReservedFromGLSL(130);
 1744|  24.4k|    case ISAMPLER2DRECT:
  ------------------
  |  Branch (1744:5): [True: 24.4k, False: 48.2M]
  ------------------
 1745|  48.8k|    case USAMPLER2DRECT:
  ------------------
  |  Branch (1745:5): [True: 24.4k, False: 48.2M]
  ------------------
 1746|  48.8k|        afterType = true;
 1747|  48.8k|        return es30ReservedFromGLSL(140);
 1748|       |
 1749|  2.88k|    case SAMPLERBUFFER:
  ------------------
  |  Branch (1749:5): [True: 2.88k, False: 48.2M]
  ------------------
 1750|  2.88k|        afterType = true;
 1751|  2.88k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1751:14): [True: 1.97k, False: 904]
  |  Branch (1751:44): [True: 12, False: 1.96k]
  ------------------
 1752|  2.86k|            parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1752:13): [True: 0, False: 2.86k]
  ------------------
 1753|     12|            return keyword;
 1754|  2.86k|        return es30ReservedFromGLSL(130);
 1755|       |
 1756|  2.88k|    case ISAMPLERBUFFER:
  ------------------
  |  Branch (1756:5): [True: 2.88k, False: 48.2M]
  ------------------
 1757|  5.76k|    case USAMPLERBUFFER:
  ------------------
  |  Branch (1757:5): [True: 2.88k, False: 48.2M]
  ------------------
 1758|  5.76k|        afterType = true;
 1759|  5.76k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1759:14): [True: 3.95k, False: 1.80k]
  |  Branch (1759:44): [True: 24, False: 3.92k]
  ------------------
 1760|  5.73k|            parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1760:13): [True: 0, False: 5.73k]
  ------------------
 1761|     24|            return keyword;
 1762|  5.73k|        return es30ReservedFromGLSL(140);
 1763|       |
 1764|  4.65k|    case SAMPLER2DMS:
  ------------------
  |  Branch (1764:5): [True: 4.65k, False: 48.2M]
  ------------------
 1765|  9.31k|    case ISAMPLER2DMS:
  ------------------
  |  Branch (1765:5): [True: 4.65k, False: 48.2M]
  ------------------
 1766|  13.9k|    case USAMPLER2DMS:
  ------------------
  |  Branch (1766:5): [True: 4.65k, False: 48.2M]
  ------------------
 1767|  13.9k|        afterType = true;
 1768|  13.9k|        if (parseContext.isEsProfile() && parseContext.version >= 310)
  ------------------
  |  Branch (1768:13): [True: 5.92k, False: 8.04k]
  |  Branch (1768:43): [True: 5.92k, False: 0]
  ------------------
 1769|  5.92k|            return keyword;
 1770|  8.04k|        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
  ------------------
  |  Branch (1770:13): [True: 8.04k, False: 0]
  |  Branch (1770:45): [True: 8.04k, False: 0]
  ------------------
 1771|      0|            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
  ------------------
  |  Branch (1771:14): [True: 0, False: 0]
  |  Branch (1771:45): [True: 0, False: 0]
  ------------------
 1772|  8.04k|            return keyword;
 1773|      0|        return es30ReservedFromGLSL(150);
 1774|       |
 1775|  4.65k|    case SAMPLER2DMSARRAY:
  ------------------
  |  Branch (1775:5): [True: 4.65k, False: 48.2M]
  ------------------
 1776|  9.31k|    case ISAMPLER2DMSARRAY:
  ------------------
  |  Branch (1776:5): [True: 4.65k, False: 48.2M]
  ------------------
 1777|  13.9k|    case USAMPLER2DMSARRAY:
  ------------------
  |  Branch (1777:5): [True: 4.65k, False: 48.2M]
  ------------------
 1778|  13.9k|        afterType = true;
 1779|  13.9k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1779:14): [True: 5.92k, False: 8.04k]
  |  Branch (1779:44): [True: 36, False: 5.89k]
  ------------------
 1780|  13.9k|            parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
  ------------------
  |  Branch (1780:13): [True: 0, False: 13.9k]
  ------------------
 1781|     36|            return keyword;
 1782|  13.9k|        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
  ------------------
  |  Branch (1782:13): [True: 8.04k, False: 5.89k]
  |  Branch (1782:45): [True: 8.04k, False: 0]
  ------------------
 1783|      0|            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
  ------------------
  |  Branch (1783:14): [True: 0, False: 0]
  |  Branch (1783:45): [True: 0, False: 0]
  ------------------
 1784|  8.04k|            return keyword;
 1785|  5.89k|        return es30ReservedFromGLSL(150);
 1786|       |
 1787|  26.3k|    case SAMPLER1D:
  ------------------
  |  Branch (1787:5): [True: 26.3k, False: 48.2M]
  ------------------
 1788|  43.8k|    case SAMPLER1DSHADOW:
  ------------------
  |  Branch (1788:5): [True: 17.4k, False: 48.2M]
  ------------------
 1789|  43.8k|        afterType = true;
 1790|  43.8k|        if (parseContext.isEsProfile())
  ------------------
  |  Branch (1790:13): [True: 0, False: 43.8k]
  ------------------
 1791|      0|            reservedWord();
 1792|  43.8k|        return keyword;
 1793|       |
 1794|  24.4k|    case SAMPLER2DRECT:
  ------------------
  |  Branch (1794:5): [True: 24.4k, False: 48.2M]
  ------------------
 1795|  38.0k|    case SAMPLER2DRECTSHADOW:
  ------------------
  |  Branch (1795:5): [True: 13.6k, False: 48.2M]
  ------------------
 1796|  38.0k|        afterType = true;
 1797|  38.0k|        if (parseContext.isEsProfile())
  ------------------
  |  Branch (1797:13): [True: 0, False: 38.0k]
  ------------------
 1798|      0|            reservedWord();
 1799|  38.0k|        else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_rectangle)) {
  ------------------
  |  Branch (1799:18): [True: 0, False: 38.0k]
  |  Branch (1799:48): [True: 0, False: 0]
  |  Branch (1799:95): [True: 0, False: 0]
  ------------------
 1800|      0|            if (parseContext.relaxedErrors())
  ------------------
  |  Branch (1800:17): [True: 0, False: 0]
  ------------------
 1801|      0|                parseContext.requireExtensions(loc, 1, &E_GL_ARB_texture_rectangle, "texture-rectangle sampler keyword");
 1802|      0|            else
 1803|      0|                reservedWord();
 1804|      0|        }
 1805|  38.0k|        return keyword;
 1806|       |
 1807|  16.2k|    case SAMPLER1DARRAY:
  ------------------
  |  Branch (1807:5): [True: 16.2k, False: 48.2M]
  ------------------
 1808|  16.2k|        afterType = true;
 1809|  16.2k|        if (parseContext.isEsProfile() && parseContext.version == 300)
  ------------------
  |  Branch (1809:13): [True: 988, False: 15.2k]
  |  Branch (1809:43): [True: 0, False: 988]
  ------------------
 1810|      0|            reservedWord();
 1811|  16.2k|        else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1811:19): [True: 988, False: 15.2k]
  |  Branch (1811:49): [True: 0, False: 988]
  ------------------
 1812|  16.2k|                 ((!parseContext.isEsProfile() && parseContext.version < 130) &&
  ------------------
  |  Branch (1812:20): [True: 15.2k, False: 988]
  |  Branch (1812:51): [True: 0, False: 15.2k]
  ------------------
 1813|      0|                   !parseContext.symbolTable.atBuiltInLevel() &&
  ------------------
  |  Branch (1813:20): [True: 0, False: 0]
  ------------------
 1814|      0|                   !parseContext.extensionTurnedOn(E_GL_EXT_texture_array)))
  ------------------
  |  Branch (1814:20): [True: 0, False: 0]
  ------------------
 1815|      0|            return identifierOrType();
 1816|  16.2k|        return keyword;
 1817|       |
 1818|    120|    case SAMPLEREXTERNALOES:
  ------------------
  |  Branch (1818:5): [True: 120, False: 48.2M]
  ------------------
 1819|    120|        afterType = true;
 1820|    120|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1820:13): [True: 120, False: 0]
  ------------------
 1821|      0|            parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external) ||
  ------------------
  |  Branch (1821:13): [True: 0, False: 0]
  ------------------
 1822|      0|            parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external_essl3))
  ------------------
  |  Branch (1822:13): [True: 0, False: 0]
  ------------------
 1823|    120|            return keyword;
 1824|      0|        return identifierOrType();
 1825|       |
 1826|    320|    case SAMPLEREXTERNAL2DY2YEXT:
  ------------------
  |  Branch (1826:5): [True: 320, False: 48.2M]
  ------------------
 1827|    320|        afterType = true;
 1828|    320|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1828:13): [True: 320, False: 0]
  ------------------
 1829|      0|            parseContext.extensionTurnedOn(E_GL_EXT_YUV_target))
  ------------------
  |  Branch (1829:13): [True: 0, False: 0]
  ------------------
 1830|    320|            return keyword;
 1831|      0|        return identifierOrType();
 1832|       |
 1833|    212|    case ITEXTURE1DARRAY:
  ------------------
  |  Branch (1833:5): [True: 212, False: 48.2M]
  ------------------
 1834|    424|    case UTEXTURE1D:
  ------------------
  |  Branch (1834:5): [True: 212, False: 48.2M]
  ------------------
 1835|    636|    case ITEXTURE1D:
  ------------------
  |  Branch (1835:5): [True: 212, False: 48.2M]
  ------------------
 1836|    848|    case UTEXTURE1DARRAY:
  ------------------
  |  Branch (1836:5): [True: 212, False: 48.2M]
  ------------------
 1837|    954|    case TEXTUREBUFFER:
  ------------------
  |  Branch (1837:5): [True: 106, False: 48.2M]
  ------------------
 1838|  1.21k|    case ITEXTURE2DRECT:
  ------------------
  |  Branch (1838:5): [True: 265, False: 48.2M]
  ------------------
 1839|  1.48k|    case UTEXTURE2DRECT:
  ------------------
  |  Branch (1839:5): [True: 265, False: 48.2M]
  ------------------
 1840|  1.59k|    case ITEXTUREBUFFER:
  ------------------
  |  Branch (1840:5): [True: 106, False: 48.2M]
  ------------------
 1841|  1.69k|    case UTEXTUREBUFFER:
  ------------------
  |  Branch (1841:5): [True: 106, False: 48.2M]
  ------------------
 1842|  1.90k|    case TEXTURE2DMS:
  ------------------
  |  Branch (1842:5): [True: 212, False: 48.2M]
  ------------------
 1843|  2.12k|    case ITEXTURE2DMS:
  ------------------
  |  Branch (1843:5): [True: 212, False: 48.2M]
  ------------------
 1844|  2.33k|    case UTEXTURE2DMS:
  ------------------
  |  Branch (1844:5): [True: 212, False: 48.2M]
  ------------------
 1845|  2.54k|    case TEXTURE2DMSARRAY:
  ------------------
  |  Branch (1845:5): [True: 212, False: 48.2M]
  ------------------
 1846|  2.75k|    case ITEXTURE2DMSARRAY:
  ------------------
  |  Branch (1846:5): [True: 212, False: 48.2M]
  ------------------
 1847|  2.96k|    case UTEXTURE2DMSARRAY:
  ------------------
  |  Branch (1847:5): [True: 212, False: 48.2M]
  ------------------
 1848|  3.18k|    case TEXTURE1D:
  ------------------
  |  Branch (1848:5): [True: 214, False: 48.2M]
  ------------------
 1849|  3.44k|    case TEXTURE2DRECT:
  ------------------
  |  Branch (1849:5): [True: 265, False: 48.2M]
  ------------------
 1850|  3.65k|    case TEXTURE1DARRAY:
  ------------------
  |  Branch (1850:5): [True: 212, False: 48.2M]
  ------------------
 1851|  3.65k|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1851:13): [True: 3.65k, False: 2]
  ------------------
 1852|  3.65k|            return keyword;
 1853|      2|        else
 1854|      2|            return identifierOrType();
 1855|       |
 1856|      0|    case SUBPASSINPUT:
  ------------------
  |  Branch (1856:5): [True: 0, False: 48.2M]
  ------------------
 1857|      0|    case SUBPASSINPUTMS:
  ------------------
  |  Branch (1857:5): [True: 0, False: 48.2M]
  ------------------
 1858|      0|    case ISUBPASSINPUT:
  ------------------
  |  Branch (1858:5): [True: 0, False: 48.2M]
  ------------------
 1859|      0|    case ISUBPASSINPUTMS:
  ------------------
  |  Branch (1859:5): [True: 0, False: 48.2M]
  ------------------
 1860|      0|    case USUBPASSINPUT:
  ------------------
  |  Branch (1860:5): [True: 0, False: 48.2M]
  ------------------
 1861|      0|    case USUBPASSINPUTMS:
  ------------------
  |  Branch (1861:5): [True: 0, False: 48.2M]
  ------------------
 1862|      0|    case ATTACHMENTEXT:
  ------------------
  |  Branch (1862:5): [True: 0, False: 48.2M]
  ------------------
 1863|      0|    case IATTACHMENTEXT:
  ------------------
  |  Branch (1863:5): [True: 0, False: 48.2M]
  ------------------
 1864|      0|    case UATTACHMENTEXT:
  ------------------
  |  Branch (1864:5): [True: 0, False: 48.2M]
  ------------------
 1865|      0|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1865:13): [True: 0, False: 0]
  ------------------
 1866|      0|            return keyword;
 1867|      0|        else
 1868|      0|            return identifierOrType();
 1869|       |
 1870|  48.4k|    case F16SAMPLER1D:
  ------------------
  |  Branch (1870:5): [True: 48.4k, False: 48.2M]
  ------------------
 1871|   159k|    case F16SAMPLER2D:
  ------------------
  |  Branch (1871:5): [True: 111k, False: 48.1M]
  ------------------
 1872|   217k|    case F16SAMPLER3D:
  ------------------
  |  Branch (1872:5): [True: 57.8k, False: 48.2M]
  ------------------
 1873|   265k|    case F16SAMPLER2DRECT:
  ------------------
  |  Branch (1873:5): [True: 47.9k, False: 48.2M]
  ------------------
 1874|   301k|    case F16SAMPLERCUBE:
  ------------------
  |  Branch (1874:5): [True: 36.2k, False: 48.2M]
  ------------------
 1875|   327k|    case F16SAMPLER1DARRAY:
  ------------------
  |  Branch (1875:5): [True: 25.7k, False: 48.2M]
  ------------------
 1876|   415k|    case F16SAMPLER2DARRAY:
  ------------------
  |  Branch (1876:5): [True: 88.4k, False: 48.2M]
  ------------------
 1877|   452k|    case F16SAMPLERCUBEARRAY:
  ------------------
  |  Branch (1877:5): [True: 36.2k, False: 48.2M]
  ------------------
 1878|   453k|    case F16SAMPLERBUFFER:
  ------------------
  |  Branch (1878:5): [True: 1.33k, False: 48.2M]
  ------------------
 1879|   456k|    case F16SAMPLER2DMS:
  ------------------
  |  Branch (1879:5): [True: 2.66k, False: 48.2M]
  ------------------
 1880|   458k|    case F16SAMPLER2DMSARRAY:
  ------------------
  |  Branch (1880:5): [True: 2.66k, False: 48.2M]
  ------------------
 1881|   489k|    case F16SAMPLER1DSHADOW:
  ------------------
  |  Branch (1881:5): [True: 30.9k, False: 48.2M]
  ------------------
 1882|   542k|    case F16SAMPLER2DSHADOW:
  ------------------
  |  Branch (1882:5): [True: 53.3k, False: 48.2M]
  ------------------
 1883|   565k|    case F16SAMPLER1DARRAYSHADOW:
  ------------------
  |  Branch (1883:5): [True: 22.2k, False: 48.2M]
  ------------------
 1884|   593k|    case F16SAMPLER2DARRAYSHADOW:
  ------------------
  |  Branch (1884:5): [True: 27.7k, False: 48.2M]
  ------------------
 1885|   619k|    case F16SAMPLER2DRECTSHADOW:
  ------------------
  |  Branch (1885:5): [True: 26.6k, False: 48.2M]
  ------------------
 1886|   641k|    case F16SAMPLERCUBESHADOW:
  ------------------
  |  Branch (1886:5): [True: 22.2k, False: 48.2M]
  ------------------
 1887|   657k|    case F16SAMPLERCUBEARRAYSHADOW:
  ------------------
  |  Branch (1887:5): [True: 15.5k, False: 48.2M]
  ------------------
 1888|       |
 1889|   667k|    case F16IMAGE1D:
  ------------------
  |  Branch (1889:5): [True: 10.2k, False: 48.2M]
  ------------------
 1890|   678k|    case F16IMAGE2D:
  ------------------
  |  Branch (1890:5): [True: 11.1k, False: 48.2M]
  ------------------
 1891|   689k|    case F16IMAGE3D:
  ------------------
  |  Branch (1891:5): [True: 11.1k, False: 48.2M]
  ------------------
 1892|   699k|    case F16IMAGE2DRECT:
  ------------------
  |  Branch (1892:5): [True: 9.76k, False: 48.2M]
  ------------------
 1893|   710k|    case F16IMAGECUBE:
  ------------------
  |  Branch (1893:5): [True: 11.1k, False: 48.2M]
  ------------------
 1894|   720k|    case F16IMAGE1DARRAY:
  ------------------
  |  Branch (1894:5): [True: 10.2k, False: 48.2M]
  ------------------
 1895|   732k|    case F16IMAGE2DARRAY:
  ------------------
  |  Branch (1895:5): [True: 11.1k, False: 48.2M]
  ------------------
 1896|   743k|    case F16IMAGECUBEARRAY:
  ------------------
  |  Branch (1896:5): [True: 11.1k, False: 48.2M]
  ------------------
 1897|   752k|    case F16IMAGEBUFFER:
  ------------------
  |  Branch (1897:5): [True: 9.32k, False: 48.2M]
  ------------------
 1898|   762k|    case F16IMAGE2DMS:
  ------------------
  |  Branch (1898:5): [True: 10.2k, False: 48.2M]
  ------------------
 1899|   772k|    case F16IMAGE2DMSARRAY:
  ------------------
  |  Branch (1899:5): [True: 10.2k, False: 48.2M]
  ------------------
 1900|       |
 1901|   773k|    case F16TEXTURE1D:
  ------------------
  |  Branch (1901:5): [True: 318, False: 48.2M]
  ------------------
 1902|   773k|    case F16TEXTURE2D:
  ------------------
  |  Branch (1902:5): [True: 530, False: 48.2M]
  ------------------
 1903|   774k|    case F16TEXTURE3D:
  ------------------
  |  Branch (1903:5): [True: 530, False: 48.2M]
  ------------------
 1904|   774k|    case F16TEXTURE2DRECT:
  ------------------
  |  Branch (1904:5): [True: 477, False: 48.2M]
  ------------------
 1905|   774k|    case F16TEXTURECUBE:
  ------------------
  |  Branch (1905:5): [True: 106, False: 48.2M]
  ------------------
 1906|   775k|    case F16TEXTURE1DARRAY:
  ------------------
  |  Branch (1906:5): [True: 318, False: 48.2M]
  ------------------
 1907|   775k|    case F16TEXTURE2DARRAY:
  ------------------
  |  Branch (1907:5): [True: 530, False: 48.2M]
  ------------------
 1908|   775k|    case F16TEXTURECUBEARRAY:
  ------------------
  |  Branch (1908:5): [True: 106, False: 48.2M]
  ------------------
 1909|   775k|    case F16TEXTUREBUFFER:
  ------------------
  |  Branch (1909:5): [True: 159, False: 48.2M]
  ------------------
 1910|   776k|    case F16TEXTURE2DMS:
  ------------------
  |  Branch (1910:5): [True: 318, False: 48.2M]
  ------------------
 1911|   776k|    case F16TEXTURE2DMSARRAY:
  ------------------
  |  Branch (1911:5): [True: 318, False: 48.2M]
  ------------------
 1912|       |
 1913|   776k|    case F16SUBPASSINPUT:
  ------------------
  |  Branch (1913:5): [True: 0, False: 48.2M]
  ------------------
 1914|   776k|    case F16SUBPASSINPUTMS:
  ------------------
  |  Branch (1914:5): [True: 0, False: 48.2M]
  ------------------
 1915|   776k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1915:13): [True: 776k, False: 0]
  ------------------
 1916|   776k|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch)) {
  ------------------
  |  Branch (1916:13): [True: 0, False: 0]
  ------------------
 1917|   776k|            afterType = true;
 1918|   776k|            return keyword;
 1919|   776k|        }
 1920|      0|        return identifierOrType();
 1921|       |
 1922|      0|    case EXPLICITINTERPAMD:
  ------------------
  |  Branch (1922:5): [True: 0, False: 48.2M]
  ------------------
 1923|      0|        if (parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
  ------------------
  |  Branch (1923:13): [True: 0, False: 0]
  ------------------
 1924|      0|            return keyword;
 1925|      0|        return identifierOrType();
 1926|       |
 1927|      0|    case PERVERTEXNV:
  ------------------
  |  Branch (1927:5): [True: 0, False: 48.2M]
  ------------------
 1928|      0|        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
  ------------------
  |  Branch (1928:14): [True: 0, False: 0]
  |  Branch (1928:45): [True: 0, False: 0]
  ------------------
 1929|      0|            parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric))
  ------------------
  |  Branch (1929:13): [True: 0, False: 0]
  ------------------
 1930|      0|            return keyword;
 1931|      0|        return identifierOrType();
 1932|       |
 1933|      0|    case PERVERTEXEXT:
  ------------------
  |  Branch (1933:5): [True: 0, False: 48.2M]
  ------------------
 1934|      0|        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
  ------------------
  |  Branch (1934:14): [True: 0, False: 0]
  |  Branch (1934:45): [True: 0, False: 0]
  ------------------
 1935|      0|            parseContext.extensionTurnedOn(E_GL_EXT_fragment_shader_barycentric))
  ------------------
  |  Branch (1935:13): [True: 0, False: 0]
  ------------------
 1936|      0|            return keyword;
 1937|      0|        return identifierOrType();
 1938|       |
 1939|      0|    case PRECISE:
  ------------------
  |  Branch (1939:5): [True: 0, False: 48.2M]
  ------------------
 1940|      0|        if ((parseContext.isEsProfile() &&
  ------------------
  |  Branch (1940:14): [True: 0, False: 0]
  ------------------
 1941|      0|             (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
  ------------------
  |  Branch (1941:15): [True: 0, False: 0]
  |  Branch (1941:46): [True: 0, False: 0]
  ------------------
 1942|      0|            (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (1942:14): [True: 0, False: 0]
  ------------------
 1943|      0|             (parseContext.version >= 400 
  ------------------
  |  Branch (1943:15): [True: 0, False: 0]
  ------------------
 1944|      0|             || parseContext.extensionsTurnedOn(Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5))))
  ------------------
  |  Branch (1944:17): [True: 0, False: 0]
  ------------------
 1945|      0|            return keyword;
 1946|      0|        if (parseContext.isEsProfile() && parseContext.version == 310) {
  ------------------
  |  Branch (1946:13): [True: 0, False: 0]
  |  Branch (1946:43): [True: 0, False: 0]
  ------------------
 1947|      0|            reservedWord();
 1948|      0|            return keyword;
 1949|      0|        }
 1950|      0|        return identifierOrType();
 1951|       |
 1952|    447|    case PERPRIMITIVENV:
  ------------------
  |  Branch (1952:5): [True: 447, False: 48.2M]
  ------------------
 1953|  2.68k|    case PERVIEWNV:
  ------------------
  |  Branch (1953:5): [True: 2.23k, False: 48.2M]
  ------------------
 1954|  2.68k|    case PERTASKNV:
  ------------------
  |  Branch (1954:5): [True: 0, False: 48.2M]
  ------------------
 1955|  2.68k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1955:13): [True: 2.68k, False: 0]
  ------------------
 1956|      0|            parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
  ------------------
  |  Branch (1956:13): [True: 0, False: 0]
  ------------------
 1957|  2.68k|            return keyword;
 1958|      0|        return identifierOrType();
 1959|       |
 1960|    447|    case PERPRIMITIVEEXT:
  ------------------
  |  Branch (1960:5): [True: 447, False: 48.2M]
  ------------------
 1961|    447|    case TASKPAYLOADWORKGROUPEXT:
  ------------------
  |  Branch (1961:5): [True: 0, False: 48.2M]
  ------------------
 1962|    447|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1962:13): [True: 447, False: 0]
  ------------------
 1963|      0|            parseContext.extensionTurnedOn(E_GL_EXT_mesh_shader))
  ------------------
  |  Branch (1963:13): [True: 0, False: 0]
  ------------------
 1964|    447|            return keyword;
 1965|      0|        return identifierOrType();
 1966|       |
 1967|  9.32k|    case FCOOPMATNV:
  ------------------
  |  Branch (1967:5): [True: 9.32k, False: 48.2M]
  ------------------
 1968|  9.32k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1968:13): [True: 9.32k, False: 0]
  ------------------
 1969|  9.32k|            parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix)) {
  ------------------
  |  Branch (1969:13): [True: 0, False: 0]
  ------------------
 1970|  9.32k|            afterType = true;
 1971|  9.32k|            return keyword;
 1972|  9.32k|        }
 1973|      0|        return identifierOrType();
 1974|       |
 1975|  12.4k|    case UCOOPMATNV:
  ------------------
  |  Branch (1975:5): [True: 12.4k, False: 48.2M]
  ------------------
 1976|  24.8k|    case ICOOPMATNV:
  ------------------
  |  Branch (1976:5): [True: 12.4k, False: 48.2M]
  ------------------
 1977|  24.8k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1977:13): [True: 24.8k, False: 0]
  ------------------
 1978|  24.8k|            parseContext.extensionTurnedOn(E_GL_NV_integer_cooperative_matrix)) {
  ------------------
  |  Branch (1978:13): [True: 0, False: 0]
  ------------------
 1979|  24.8k|            afterType = true;
 1980|  24.8k|            return keyword;
 1981|  24.8k|        }
 1982|      0|        return identifierOrType();
 1983|  27.0k|    case TENSORARM:
  ------------------
  |  Branch (1983:5): [True: 27.0k, False: 48.2M]
  ------------------
 1984|  27.0k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1984:13): [True: 27.0k, False: 0]
  ------------------
 1985|  27.0k|            parseContext.extensionTurnedOn(E_GL_ARM_tensors)) {
  ------------------
  |  Branch (1985:13): [True: 0, False: 0]
  ------------------
 1986|  27.0k|            afterType = true;
 1987|  27.0k|            return keyword;
 1988|  27.0k|        }
 1989|      0|        return identifierOrType();
 1990|       |
 1991|  96.3k|    case COOPMAT:
  ------------------
  |  Branch (1991:5): [True: 96.3k, False: 48.1M]
  ------------------
 1992|  96.3k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1992:13): [True: 96.3k, False: 0]
  ------------------
 1993|  96.3k|            parseContext.extensionTurnedOn(E_GL_KHR_cooperative_matrix)) {
  ------------------
  |  Branch (1993:13): [True: 0, False: 0]
  ------------------
 1994|  96.3k|            afterType = true;
 1995|  96.3k|            return keyword;
 1996|  96.3k|        }
 1997|      0|        return identifierOrType();
 1998|       |
 1999|   352k|    case COOPVECNV:
  ------------------
  |  Branch (1999:5): [True: 352k, False: 47.9M]
  ------------------
 2000|   352k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2000:13): [True: 352k, False: 0]
  ------------------
 2001|   352k|            parseContext.extensionTurnedOn(E_GL_NV_cooperative_vector)) {
  ------------------
  |  Branch (2001:13): [True: 0, False: 0]
  ------------------
 2002|   352k|            afterType = true;
 2003|   352k|            return keyword;
 2004|   352k|        }
 2005|      0|        return identifierOrType();
 2006|       |
 2007|   415k|    case VECTOR:
  ------------------
  |  Branch (2007:5): [True: 415k, False: 47.8M]
  ------------------
 2008|   415k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2008:13): [True: 415k, False: 0]
  ------------------
 2009|   415k|            parseContext.extensionTurnedOn(E_GL_EXT_long_vector)) {
  ------------------
  |  Branch (2009:13): [True: 0, False: 0]
  ------------------
 2010|   415k|            afterType = true;
 2011|   415k|            return keyword;
 2012|   415k|        }
 2013|      0|        return identifierOrType();
 2014|       |
 2015|      0|    case DEMOTE:
  ------------------
  |  Branch (2015:5): [True: 0, False: 48.2M]
  ------------------
 2016|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation))
  ------------------
  |  Branch (2016:13): [True: 0, False: 0]
  ------------------
 2017|      0|            return keyword;
 2018|      0|        else
 2019|      0|            return identifierOrType();
 2020|       |
 2021|      0|    case SPIRV_INSTRUCTION:
  ------------------
  |  Branch (2021:5): [True: 0, False: 48.2M]
  ------------------
 2022|      0|    case SPIRV_EXECUTION_MODE:
  ------------------
  |  Branch (2022:5): [True: 0, False: 48.2M]
  ------------------
 2023|      0|    case SPIRV_EXECUTION_MODE_ID:
  ------------------
  |  Branch (2023:5): [True: 0, False: 48.2M]
  ------------------
 2024|      0|    case SPIRV_DECORATE:
  ------------------
  |  Branch (2024:5): [True: 0, False: 48.2M]
  ------------------
 2025|      0|    case SPIRV_DECORATE_ID:
  ------------------
  |  Branch (2025:5): [True: 0, False: 48.2M]
  ------------------
 2026|      0|    case SPIRV_DECORATE_STRING:
  ------------------
  |  Branch (2026:5): [True: 0, False: 48.2M]
  ------------------
 2027|      0|    case SPIRV_TYPE:
  ------------------
  |  Branch (2027:5): [True: 0, False: 48.2M]
  ------------------
 2028|      0|    case SPIRV_STORAGE_CLASS:
  ------------------
  |  Branch (2028:5): [True: 0, False: 48.2M]
  ------------------
 2029|      0|    case SPIRV_BY_REFERENCE:
  ------------------
  |  Branch (2029:5): [True: 0, False: 48.2M]
  ------------------
 2030|      0|    case SPIRV_LITERAL:
  ------------------
  |  Branch (2030:5): [True: 0, False: 48.2M]
  ------------------
 2031|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2031:13): [True: 0, False: 0]
  ------------------
 2032|      0|            parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
  ------------------
  |  Branch (2032:13): [True: 0, False: 0]
  ------------------
 2033|      0|            return keyword;
 2034|      0|        return identifierOrType();
 2035|       |
 2036|    113|    case HITOBJECTNV:
  ------------------
  |  Branch (2036:5): [True: 113, False: 48.2M]
  ------------------
 2037|    113|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2037:13): [True: 113, False: 0]
  ------------------
 2038|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (2038:14): [True: 0, False: 0]
  |  Branch (2038:45): [True: 0, False: 0]
  ------------------
 2039|      0|                 && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
  ------------------
  |  Branch (2039:21): [True: 0, False: 0]
  ------------------
 2040|    113|            return keyword;
 2041|      0|        return identifierOrType();
 2042|       |
 2043|    101|    case HITOBJECTEXT:
  ------------------
  |  Branch (2043:5): [True: 101, False: 48.2M]
  ------------------
 2044|    101|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2044:13): [True: 101, False: 0]
  ------------------
 2045|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (2045:14): [True: 0, False: 0]
  |  Branch (2045:45): [True: 0, False: 0]
  ------------------
 2046|      0|                 && parseContext.extensionTurnedOn(E_GL_EXT_shader_invocation_reorder)))
  ------------------
  |  Branch (2046:21): [True: 0, False: 0]
  ------------------
 2047|    101|            return keyword;
 2048|      0|        return identifierOrType();
 2049|       |
 2050|      0|    case HITOBJECTATTRNV:
  ------------------
  |  Branch (2050:5): [True: 0, False: 48.2M]
  ------------------
 2051|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2051:13): [True: 0, False: 0]
  ------------------
 2052|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (2052:14): [True: 0, False: 0]
  |  Branch (2052:45): [True: 0, False: 0]
  ------------------
 2053|      0|                 && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
  ------------------
  |  Branch (2053:21): [True: 0, False: 0]
  ------------------
 2054|      0|            return keyword;
 2055|      0|        return identifierOrType();
 2056|       |
 2057|      0|    case HITOBJECTATTREXT:
  ------------------
  |  Branch (2057:5): [True: 0, False: 48.2M]
  ------------------
 2058|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2058:13): [True: 0, False: 0]
  ------------------
 2059|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (2059:14): [True: 0, False: 0]
  |  Branch (2059:45): [True: 0, False: 0]
  ------------------
 2060|      0|                 && parseContext.extensionTurnedOn(E_GL_EXT_shader_invocation_reorder)))
  ------------------
  |  Branch (2060:21): [True: 0, False: 0]
  ------------------
 2061|      0|            return keyword;
 2062|      0|        return identifierOrType();
 2063|       |
 2064|  6.21k|    case FUNCTION:
  ------------------
  |  Branch (2064:5): [True: 6.21k, False: 48.2M]
  ------------------
 2065|  32.8k|    case TENSORLAYOUTNV:
  ------------------
  |  Branch (2065:5): [True: 26.6k, False: 48.2M]
  ------------------
 2066|  49.2k|    case TENSORVIEWNV:
  ------------------
  |  Branch (2066:5): [True: 16.4k, False: 48.2M]
  ------------------
 2067|  49.2k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2067:13): [True: 49.2k, False: 0]
  ------------------
 2068|  49.2k|            parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix2)) {
  ------------------
  |  Branch (2068:13): [True: 0, False: 0]
  ------------------
 2069|  49.2k|            afterType = true;
 2070|  49.2k|            return keyword;
 2071|  49.2k|        }
 2072|      0|        return identifierOrType();
 2073|       |
 2074|      0|    case RESOURCEHEAP:
  ------------------
  |  Branch (2074:5): [True: 0, False: 48.2M]
  ------------------
 2075|      0|    case SAMPLERHEAP:
  ------------------
  |  Branch (2075:5): [True: 0, False: 48.2M]
  ------------------
 2076|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_structured_descriptor_heap) &&
  ------------------
  |  Branch (2076:13): [True: 0, False: 0]
  ------------------
 2077|      0|            parseContext.extensionTurnedOn(E_GL_EXT_descriptor_heap))
  ------------------
  |  Branch (2077:13): [True: 0, False: 0]
  ------------------
 2078|      0|            return keyword;
 2079|      0|        return identifierOrType();
 2080|       |
 2081|      0|    case INLINE:
  ------------------
  |  Branch (2081:5): [True: 0, False: 48.2M]
  ------------------
 2082|      0|    case NOINLINE:
  ------------------
  |  Branch (2082:5): [True: 0, False: 48.2M]
  ------------------
 2083|      0|        if (!parseContext.extensionTurnedOn(E_GL_EXT_function_control_attributes))
  ------------------
  |  Branch (2083:13): [True: 0, False: 0]
  ------------------
 2084|      0|            return reservedWord();
 2085|      0|        return keyword;
 2086|       |
 2087|      0|    default:
  ------------------
  |  Branch (2087:5): [True: 0, False: 48.2M]
  ------------------
 2088|      0|        parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
 2089|      0|        return 0;
 2090|  48.2M|    }
 2091|  48.2M|}
_ZN7glslang12TScanContext16identifierOrTypeEv:
 2094|  16.5M|{
 2095|  16.5M|    parserToken->sType.lex.string = NewPoolTString(tokenText);
 2096|  16.5M|    if (field)
  ------------------
  |  Branch (2096:9): [True: 0, False: 16.5M]
  ------------------
 2097|      0|        return IDENTIFIER;
 2098|       |
 2099|       |    // If we see an identifier right after a type, this might be a declarator.
 2100|       |    // But not in template parameters (inside angle brackets), array expressions (inside square brackets),
 2101|       |    // or function parameters (inside parentheses)
 2102|  16.5M|    if (afterType && angleBracketDepth == 0 && squareBracketDepth == 0 && parenDepth == 0) {
  ------------------
  |  Branch (2102:9): [True: 16.5M, False: 33.9k]
  |  Branch (2102:22): [True: 16.5M, False: 0]
  |  Branch (2102:48): [True: 16.5M, False: 0]
  |  Branch (2102:75): [True: 11.4M, False: 5.08M]
  ------------------
 2103|  11.4M|        afterDeclarator = true;
 2104|  11.4M|        afterType = false;
 2105|  11.4M|        return IDENTIFIER;
 2106|  11.4M|    }
 2107|       |
 2108|  5.12M|    parserToken->sType.lex.symbol = parseContext.symbolTable.find(*parserToken->sType.lex.string);
 2109|  5.12M|    if ((afterType == false && afterStruct == false) && parserToken->sType.lex.symbol != nullptr) {
  ------------------
  |  Branch (2109:10): [True: 33.9k, False: 5.08M]
  |  Branch (2109:32): [True: 32.9k, False: 995]
  |  Branch (2109:57): [True: 6.44k, False: 26.5k]
  ------------------
 2110|  6.44k|        if (const TVariable* variable = parserToken->sType.lex.symbol->getAsVariable()) {
  ------------------
  |  Branch (2110:30): [True: 6.44k, False: 0]
  ------------------
 2111|  6.44k|            if (variable->isUserType() &&
  ------------------
  |  Branch (2111:17): [True: 5.49k, False: 946]
  ------------------
 2112|       |                // treat redeclaration of forward-declared buffer/uniform reference as an identifier
 2113|  5.49k|                !(variable->getType().isReference() && afterBuffer)) {
  ------------------
  |  Branch (2113:19): [True: 0, False: 5.49k]
  |  Branch (2113:56): [True: 0, False: 0]
  ------------------
 2114|       |
 2115|       |                // If we're in a declarator list (like "float a, B;"), treat struct names as IDENTIFIER
 2116|       |                // to fix GitHub issue #3931
 2117|  5.49k|                if (inDeclaratorList) {
  ------------------
  |  Branch (2117:21): [True: 0, False: 5.49k]
  ------------------
 2118|      0|                    return IDENTIFIER;
 2119|      0|                }
 2120|       |                
 2121|  5.49k|                afterType = true;
 2122|  5.49k|                return TYPE_NAME;
 2123|  5.49k|            }
 2124|  6.44k|        }
 2125|  6.44k|    }
 2126|       |
 2127|  5.11M|    return IDENTIFIER;
 2128|  5.12M|}
_ZN7glslang12TScanContext12reservedWordEv:
 2134|   196k|{
 2135|   196k|    if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (2135:9): [True: 0, False: 196k]
  ------------------
 2136|      0|        parseContext.error(loc, "Reserved word.", tokenText, "", "");
 2137|       |
 2138|   196k|    return 0;
 2139|   196k|}
_ZN7glslang12TScanContext20es30ReservedFromGLSLEi:
 2158|  1.33M|{
 2159|  1.33M|    if (parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (2159:9): [True: 1.33M, False: 0]
  ------------------
 2160|  1.33M|        return keyword;
 2161|       |
 2162|      0|    if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (2162:10): [True: 0, False: 0]
  |  Branch (2162:40): [True: 0, False: 0]
  ------------------
 2163|      0|        (!parseContext.isEsProfile() && parseContext.version < version)) {
  ------------------
  |  Branch (2163:10): [True: 0, False: 0]
  |  Branch (2163:41): [True: 0, False: 0]
  ------------------
 2164|      0|            if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2164:17): [True: 0, False: 0]
  ------------------
 2165|      0|                parseContext.warn(loc, "future reserved word in ES 300 and keyword in GLSL", tokenText, "");
 2166|       |
 2167|      0|            return identifierOrType();
 2168|      0|    } else if (parseContext.isEsProfile() && parseContext.version >= 300)
  ------------------
  |  Branch (2168:16): [True: 0, False: 0]
  |  Branch (2168:46): [True: 0, False: 0]
  ------------------
 2169|      0|        reservedWord();
 2170|       |
 2171|      0|    return keyword;
 2172|      0|}
_ZN7glslang12TScanContext18nonreservedKeywordEii:
 2177|  6.32M|{
 2178|  6.32M|    if ((parseContext.isEsProfile() && parseContext.version < esVersion) ||
  ------------------
  |  Branch (2178:10): [True: 3.21M, False: 3.10M]
  |  Branch (2178:40): [True: 0, False: 3.21M]
  ------------------
 2179|  6.32M|        (!parseContext.isEsProfile() && parseContext.version < nonEsVersion)) {
  ------------------
  |  Branch (2179:10): [True: 3.10M, False: 3.21M]
  |  Branch (2179:41): [True: 0, False: 3.10M]
  ------------------
 2180|      0|        if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2180:13): [True: 0, False: 0]
  ------------------
 2181|      0|            parseContext.warn(loc, "using future keyword", tokenText, "");
 2182|       |
 2183|      0|        return identifierOrType();
 2184|      0|    }
 2185|       |
 2186|  6.32M|    return keyword;
 2187|  6.32M|}
_ZN7glslang12TScanContext16precisionKeywordEv:
 2190|  2.26M|{
 2191|  2.26M|    if (parseContext.isEsProfile() || parseContext.version >= 130)
  ------------------
  |  Branch (2191:9): [True: 1.34M, False: 923k]
  |  Branch (2191:39): [True: 923k, False: 0]
  ------------------
 2192|  2.26M|        return keyword;
 2193|       |
 2194|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2194:9): [True: 0, False: 0]
  ------------------
 2195|      0|        parseContext.warn(loc, "using ES precision qualifier keyword", tokenText, "");
 2196|       |
 2197|      0|    return identifierOrType();
 2198|  2.26M|}
_ZN7glslang12TScanContext6matNxMEv:
 2201|  51.8k|{
 2202|  51.8k|    afterType = true;
 2203|       |
 2204|  51.8k|    if (parseContext.version > 110)
  ------------------
  |  Branch (2204:9): [True: 51.8k, False: 0]
  ------------------
 2205|  51.8k|        return keyword;
 2206|       |
 2207|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2207:9): [True: 0, False: 0]
  ------------------
 2208|      0|        parseContext.warn(loc, "using future non-square matrix type keyword", tokenText, "");
 2209|       |
 2210|      0|    return identifierOrType();
 2211|  51.8k|}
_ZN7glslang12TScanContext4dMatEv:
 2214|  28.4k|{
 2215|  28.4k|    afterType = true;
 2216|       |
 2217|  28.4k|    if (parseContext.isEsProfile() && parseContext.version >= 300) {
  ------------------
  |  Branch (2217:9): [True: 0, False: 28.4k]
  |  Branch (2217:39): [True: 0, False: 0]
  ------------------
 2218|      0|        reservedWord();
 2219|       |
 2220|      0|        return keyword;
 2221|      0|    }
 2222|       |
 2223|  28.4k|    if (!parseContext.isEsProfile() && (parseContext.version >= 400 ||
  ------------------
  |  Branch (2223:9): [True: 28.4k, False: 0]
  |  Branch (2223:41): [True: 28.3k, False: 126]
  ------------------
 2224|    126|        parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2224:9): [True: 126, False: 0]
  ------------------
 2225|      0|        (parseContext.version >= 150 && parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) ||
  ------------------
  |  Branch (2225:10): [True: 0, False: 0]
  |  Branch (2225:41): [True: 0, False: 0]
  ------------------
 2226|      0|        (parseContext.version >= 150 && parseContext.extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit)
  ------------------
  |  Branch (2226:10): [True: 0, False: 0]
  |  Branch (2226:41): [True: 0, False: 0]
  ------------------
 2227|      0|         && parseContext.language == EShLangVertex)))
  ------------------
  |  Branch (2227:13): [True: 0, False: 0]
  ------------------
 2228|  28.4k|        return keyword;
 2229|       |
 2230|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2230:9): [True: 0, False: 0]
  ------------------
 2231|      0|        parseContext.warn(loc, "using future type keyword", tokenText, "");
 2232|       |
 2233|      0|    return identifierOrType();
 2234|  28.4k|}
_ZN7glslang12TScanContext20firstGenerationImageEb:
 2237|   858k|{
 2238|   858k|    if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2238:9): [True: 858k, False: 0]
  ------------------
 2239|      0|        (!parseContext.isEsProfile() && (parseContext.version >= 420 ||
  ------------------
  |  Branch (2239:10): [True: 0, False: 0]
  |  Branch (2239:42): [True: 0, False: 0]
  ------------------
 2240|      0|         parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) ||
  ------------------
  |  Branch (2240:10): [True: 0, False: 0]
  ------------------
 2241|      0|        (inEs310 && parseContext.isEsProfile() && parseContext.version >= 310))
  ------------------
  |  Branch (2241:10): [True: 0, False: 0]
  |  Branch (2241:21): [True: 0, False: 0]
  |  Branch (2241:51): [True: 0, False: 0]
  ------------------
 2242|   858k|        return keyword;
 2243|       |
 2244|      0|    if ((parseContext.isEsProfile() && parseContext.version >= 300) ||
  ------------------
  |  Branch (2244:10): [True: 0, False: 0]
  |  Branch (2244:40): [True: 0, False: 0]
  ------------------
 2245|      0|        (!parseContext.isEsProfile() && parseContext.version >= 130)) {
  ------------------
  |  Branch (2245:10): [True: 0, False: 0]
  |  Branch (2245:41): [True: 0, False: 0]
  ------------------
 2246|      0|        reservedWord();
 2247|       |
 2248|      0|        return keyword;
 2249|      0|    }
 2250|       |
 2251|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2251:9): [True: 0, False: 0]
  ------------------
 2252|      0|        parseContext.warn(loc, "using future type keyword", tokenText, "");
 2253|       |
 2254|      0|    return identifierOrType();
 2255|      0|}
_ZN7glslang12TScanContext21secondGenerationImageEv:
 2258|   328k|{
 2259|   328k|    if (parseContext.isEsProfile() && parseContext.version >= 310) {
  ------------------
  |  Branch (2259:9): [True: 169k, False: 159k]
  |  Branch (2259:39): [True: 169k, False: 0]
  ------------------
 2260|   169k|        reservedWord();
 2261|   169k|        return keyword;
 2262|   169k|    }
 2263|       |
 2264|   159k|    if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2264:9): [True: 159k, False: 0]
  ------------------
 2265|      0|        (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (2265:10): [True: 0, False: 0]
  ------------------
 2266|      0|         (parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
  ------------------
  |  Branch (2266:11): [True: 0, False: 0]
  |  Branch (2266:42): [True: 0, False: 0]
  ------------------
 2267|   159k|        return keyword;
 2268|       |
 2269|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2269:9): [True: 0, False: 0]
  ------------------
 2270|      0|        parseContext.warn(loc, "using future type keyword", tokenText, "");
 2271|       |
 2272|      0|    return identifierOrType();
 2273|   159k|}
_ZN7glslang12TParserTokenC2ER7YYSTYPE:
  282|   117M|    explicit TParserToken(YYSTYPE& b) : sType(b) { }
Scan.cpp:_ZNK12_GLOBAL__N_18str_hashclEPKc:
  313|   129M|    {
  314|       |        // djb2
  315|   129M|        unsigned long hash = 5381;
  316|   129M|        int c;
  317|       |
  318|  1.17G|        while ((c = *str++) != 0)
  ------------------
  |  Branch (318:16): [True: 1.04G, False: 129M]
  ------------------
  319|  1.04G|            hash = ((hash << 5) + hash) + c;
  320|       |
  321|   129M|        return hash;
  322|   129M|    }
Scan.cpp:_ZNK12_GLOBAL__N_16str_eqclEPKcS2_:
  305|  48.2M|    {
  306|  48.2M|        return strcmp(lhs, rhs) == 0;
  307|  48.2M|    }

ShInitialize:
 1337|  1.23k|{
 1338|  1.23k|#ifndef DISABLE_THREAD_SUPPORT
 1339|  1.23k|    const std::lock_guard<std::mutex> lock(init_lock);
 1340|  1.23k|#endif
 1341|  1.23k|    ++NumberOfClients;
 1342|       |
 1343|  1.23k|    if (PerProcessGPA == nullptr)
  ------------------
  |  Branch (1343:9): [True: 1.23k, False: 0]
  ------------------
 1344|  1.23k|        PerProcessGPA = new TPoolAllocator();
 1345|       |
 1346|  1.23k|    return 1;
 1347|  1.23k|}
ShFinalize:
 1394|  1.23k|{
 1395|  1.23k|#ifndef DISABLE_THREAD_SUPPORT
 1396|  1.23k|    const std::lock_guard<std::mutex> lock(init_lock);
 1397|  1.23k|#endif
 1398|  1.23k|    --NumberOfClients;
 1399|  1.23k|    assert(NumberOfClients >= 0);
 1400|  1.23k|    if (NumberOfClients > 0)
  ------------------
  |  Branch (1400:9): [True: 0, False: 1.23k]
  ------------------
 1401|      0|        return 1;
 1402|       |
 1403|  22.1k|    for (int version = 0; version < VersionCount; ++version) {
  ------------------
  |  Branch (1403:27): [True: 20.9k, False: 1.23k]
  ------------------
 1404|   104k|        for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
  ------------------
  |  Branch (1404:34): [True: 83.8k, False: 20.9k]
  ------------------
 1405|   419k|            for (int p = 0; p < ProfileCount; ++p) {
  ------------------
  |  Branch (1405:29): [True: 335k, False: 83.8k]
  ------------------
 1406|  1.00M|                for (int source = 0; source < SourceCount; ++source) {
  ------------------
  |  Branch (1406:38): [True: 670k, False: 335k]
  ------------------
 1407|  10.0M|                    for (int stage = 0; stage < EShLangCount; ++stage) {
  ------------------
  |  Branch (1407:41): [True: 9.39M, False: 670k]
  ------------------
 1408|  9.39M|                        delete SharedSymbolTables[version][spvVersion][p][source][stage];
 1409|  9.39M|                        SharedSymbolTables[version][spvVersion][p][source][stage] = nullptr;
 1410|  9.39M|                    }
 1411|   670k|                }
 1412|   335k|            }
 1413|  83.8k|        }
 1414|  20.9k|    }
 1415|       |
 1416|  22.1k|    for (int version = 0; version < VersionCount; ++version) {
  ------------------
  |  Branch (1416:27): [True: 20.9k, False: 1.23k]
  ------------------
 1417|   104k|        for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
  ------------------
  |  Branch (1417:34): [True: 83.8k, False: 20.9k]
  ------------------
 1418|   419k|            for (int p = 0; p < ProfileCount; ++p) {
  ------------------
  |  Branch (1418:29): [True: 335k, False: 83.8k]
  ------------------
 1419|  1.00M|                for (int source = 0; source < SourceCount; ++source) {
  ------------------
  |  Branch (1419:38): [True: 670k, False: 335k]
  ------------------
 1420|  2.01M|                    for (int pc = 0; pc < EPcCount; ++pc) {
  ------------------
  |  Branch (1420:38): [True: 1.34M, False: 670k]
  ------------------
 1421|  1.34M|                        delete CommonSymbolTable[version][spvVersion][p][source][pc];
 1422|  1.34M|                        CommonSymbolTable[version][spvVersion][p][source][pc] = nullptr;
 1423|  1.34M|                    }
 1424|   670k|                }
 1425|   335k|            }
 1426|  83.8k|        }
 1427|  20.9k|    }
 1428|       |
 1429|  1.23k|    if (PerProcessGPA != nullptr) {
  ------------------
  |  Branch (1429:9): [True: 1.23k, False: 0]
  ------------------
 1430|  1.23k|        delete PerProcessGPA;
 1431|  1.23k|        PerProcessGPA = nullptr;
 1432|  1.23k|    }
 1433|       |
 1434|  1.23k|    return 1;
 1435|  1.23k|}
_ZN7glslang17InitializeProcessEv:
 1723|  1.23k|{
 1724|  1.23k|    return ShInitialize() != 0;
 1725|  1.23k|}
_ZN7glslang15FinalizeProcessEv:
 1728|  1.23k|{
 1729|  1.23k|    ShFinalize();
 1730|  1.23k|}
_ZN7glslang7TShaderC2E11EShLanguage:
 1743|  1.23k|    : stage(s), lengths(nullptr), stringNames(nullptr), preamble(""), overrideVersion(0)
 1744|  1.23k|{
 1745|  1.23k|    pool = new TPoolAllocator;
 1746|  1.23k|    infoSink = new TInfoSink;
 1747|  1.23k|    compiler = new TDeferredCompiler(stage, *infoSink);
 1748|  1.23k|    intermediate = new TIntermediate(s);
 1749|       |
 1750|       |    // clear environment (avoid constructors in them for use in a C interface)
 1751|  1.23k|    environment.input.languageFamily = EShSourceNone;
 1752|  1.23k|    environment.input.dialect = EShClientNone;
 1753|  1.23k|    environment.input.vulkanRulesRelaxed = false;
 1754|  1.23k|    environment.client.client = EShClientNone;
 1755|  1.23k|    environment.target.language = EShTargetNone;
 1756|  1.23k|    environment.target.hlslFunctionality1 = false;
 1757|  1.23k|}
_ZN7glslang7TShaderD2Ev:
 1760|  1.23k|{
 1761|  1.23k|    delete infoSink;
 1762|  1.23k|    delete compiler;
 1763|  1.23k|    delete intermediate;
 1764|  1.23k|    delete pool;
 1765|  1.23k|}
_ZN7glslang7TShader21setStringsWithLengthsEPKPKcPKii:
 1775|  1.23k|{
 1776|  1.23k|    strings = s;
 1777|  1.23k|    numStrings = n;
 1778|  1.23k|    lengths = l;
 1779|  1.23k|}
_ZN7glslang7TShader13setEntryPointEPKc:
 1791|  1.23k|{
 1792|  1.23k|    intermediate->setEntryPointName(entryPoint);
 1793|  1.23k|}
_ZN7glslang7TShader5parseEPK16TBuiltInResourcei8EProfilebb11EShMessagesRNS0_8IncluderE:
 1892|  1.23k|{
 1893|  1.23k|    SetThreadPoolAllocator(pool);
 1894|       |
 1895|  1.23k|    if (! preamble)
  ------------------
  |  Branch (1895:9): [True: 0, False: 1.23k]
  ------------------
 1896|      0|        preamble = "";
 1897|       |
 1898|  1.23k|    return CompileDeferred(compiler, strings, numStrings, lengths, stringNames,
 1899|  1.23k|                           preamble, EShOptNone, builtInResources, defaultVersion,
 1900|  1.23k|                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
 1901|  1.23k|                           forwardCompatible, messages, *intermediate, includer, sourceEntryPointName,
 1902|  1.23k|                           &environment, compileOnly);
 1903|  1.23k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115CompileDeferredEP9TCompilerPKPKciPKiS5_S3_20EShOptimizationLevelPK16TBuiltInResourcei8EProfilebib11EShMessagesRN7glslang13TIntermediateERNSE_7TShader8IncluderENSt3__112basic_stringIcNSK_11char_traitsIcEENSK_9allocatorIcEEEEPNSE_12TEnvironmentEb:
 1322|  1.23k|{
 1323|  1.23k|    DoFullParse parser;
 1324|  1.23k|    return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
 1325|  1.23k|                           preamble, optLevel, resources, defaultVersion,
 1326|  1.23k|                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
 1327|  1.23k|                           forwardCompatible, messages, intermediate, parser,
 1328|  1.23k|                           true, includer, sourceEntryPointName, environment, compileOnly);
 1329|  1.23k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115ProcessDeferredINS_11DoFullParseEEEbP9TCompilerPKPKciPKiS7_S5_20EShOptimizationLevelPK16TBuiltInResourcei8EProfilebib11EShMessagesRN7glslang13TIntermediateERT_bRNSG_7TShader8IncluderENSt3__112basic_stringIcNSO_11char_traitsIcEENSO_9allocatorIcEEEEPKNSG_12TEnvironmentEb:
  822|  1.23k|{
  823|       |    // This must be undone (.pop()) by the caller, after it finishes consuming the created tree.
  824|  1.23k|    GetThreadPoolAllocator().push();
  825|       |
  826|  1.23k|    if (numStrings == 0)
  ------------------
  |  Branch (826:9): [True: 0, False: 1.23k]
  ------------------
  827|      0|        return true;
  828|       |
  829|       |    // Move to length-based strings, rather than null-terminated strings.
  830|       |    // Also, add strings to include the preamble and to ensure the shader is not null,
  831|       |    // which lets the grammar accept what was a null (post preprocessing) shader.
  832|       |    //
  833|       |    // Shader will look like
  834|       |    //   string 0:                system preamble
  835|       |    //   string 1:                custom preamble
  836|       |    //   string 2...numStrings+1: user's shader
  837|       |    //   string numStrings+2:     "int;"
  838|  1.23k|    const int numPre = 2;
  839|  1.23k|    const int numPost = requireNonempty? 1 : 0;
  ------------------
  |  Branch (839:25): [True: 1.23k, False: 0]
  ------------------
  840|  1.23k|    const int numTotal = numPre + numStrings + numPost;
  841|  1.23k|    std::unique_ptr<size_t[]> lengths(new size_t[numTotal]);
  842|  1.23k|    std::unique_ptr<const char*[]> strings(new const char*[numTotal]);
  843|  1.23k|    std::unique_ptr<const char*[]> names(new const char*[numTotal]);
  844|  2.46k|    for (int s = 0; s < numStrings; ++s) {
  ------------------
  |  Branch (844:21): [True: 1.23k, False: 1.23k]
  ------------------
  845|  1.23k|        strings[s + numPre] = shaderStrings[s];
  846|  1.23k|        if (inputLengths == nullptr || inputLengths[s] < 0)
  ------------------
  |  Branch (846:13): [True: 0, False: 1.23k]
  |  Branch (846:40): [True: 0, False: 1.23k]
  ------------------
  847|      0|            lengths[s + numPre] = strlen(shaderStrings[s]);
  848|  1.23k|        else
  849|  1.23k|            lengths[s + numPre] = inputLengths[s];
  850|  1.23k|    }
  851|  1.23k|    if (stringNames != nullptr) {
  ------------------
  |  Branch (851:9): [True: 0, False: 1.23k]
  ------------------
  852|      0|        for (int s = 0; s < numStrings; ++s)
  ------------------
  |  Branch (852:25): [True: 0, False: 0]
  ------------------
  853|      0|            names[s + numPre] = stringNames[s];
  854|  1.23k|    } else {
  855|  2.46k|        for (int s = 0; s < numStrings; ++s)
  ------------------
  |  Branch (855:25): [True: 1.23k, False: 1.23k]
  ------------------
  856|  1.23k|            names[s + numPre] = nullptr;
  857|  1.23k|    }
  858|       |
  859|       |    // Get all the stages, languages, clients, and other environment
  860|       |    // stuff sorted out.
  861|  1.23k|    EShSource sourceGuess = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
  ------------------
  |  Branch (861:29): [True: 120, False: 1.11k]
  ------------------
  862|  1.23k|    SpvVersion spvVersion;
  863|  1.23k|    EShLanguage stage = compiler->getLanguage();
  864|  1.23k|    TranslateEnvironment(environment, messages, sourceGuess, stage, spvVersion);
  865|  1.23k|#ifdef ENABLE_HLSL
  866|  1.23k|    EShSource source = sourceGuess;
  867|  1.23k|    if (environment != nullptr && environment->target.hlslFunctionality1)
  ------------------
  |  Branch (867:9): [True: 1.23k, False: 0]
  |  Branch (867:35): [True: 0, False: 1.23k]
  ------------------
  868|      0|        intermediate.setHlslFunctionality1();
  869|       |#else
  870|       |    const EShSource source = EShSourceGlsl;
  871|       |#endif
  872|       |    // First, without using the preprocessor or parser, find the #version, so we know what
  873|       |    // symbol tables, processing rules, etc. to set up.  This does not need the extra strings
  874|       |    // outlined above, just the user shader, after the system and user preambles.
  875|  1.23k|    glslang::TInputScanner userInput(numStrings, &strings[numPre], &lengths[numPre]);
  876|  1.23k|    int version = 0;
  877|  1.23k|    EProfile profile = ENoProfile;
  878|  1.23k|    bool versionNotFirstToken = false;
  879|  1.23k|    bool versionNotFirst = (source == EShSourceHlsl)
  ------------------
  |  Branch (879:28): [True: 120, False: 1.11k]
  ------------------
  880|  1.23k|                                ? true
  881|  1.23k|                                : userInput.scanVersion(version, profile, versionNotFirstToken);
  882|  1.23k|    bool versionNotFound = version == 0;
  883|  1.23k|    if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
  ------------------
  |  Branch (883:9): [True: 0, False: 1.23k]
  |  Branch (883:42): [True: 0, False: 0]
  ------------------
  884|      0|        if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
  ------------------
  |  Branch (884:13): [True: 0, False: 0]
  |  Branch (884:54): [True: 0, False: 0]
  ------------------
  885|      0|            (version != defaultVersion || profile != defaultProfile)) {
  ------------------
  |  Branch (885:14): [True: 0, False: 0]
  |  Branch (885:43): [True: 0, False: 0]
  ------------------
  886|      0|            compiler->infoSink.info << "Warning, (version, profile) forced to be ("
  887|      0|                                    << defaultVersion << ", " << ProfileName(defaultProfile)
  888|      0|                                    << "), while in source code it is ("
  889|      0|                                    << version << ", " << ProfileName(profile) << ")\n";
  890|      0|        }
  891|       |
  892|      0|        if (versionNotFound) {
  ------------------
  |  Branch (892:13): [True: 0, False: 0]
  ------------------
  893|      0|            versionNotFirstToken = false;
  894|      0|            versionNotFirst = false;
  895|      0|            versionNotFound = false;
  896|      0|        }
  897|      0|        version = defaultVersion;
  898|      0|        profile = defaultProfile;
  899|      0|    }
  900|  1.23k|    if (source == EShSourceGlsl && overrideVersion != 0) {
  ------------------
  |  Branch (900:9): [True: 1.11k, False: 120]
  |  Branch (900:36): [True: 0, False: 1.11k]
  ------------------
  901|      0|        version = overrideVersion;
  902|      0|    }
  903|       |
  904|  1.23k|    bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
  905|  1.23k|                                            versionNotFirst, defaultVersion, source, version, profile, spvVersion);
  906|  1.23k|    bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
  ------------------
  |  Branch (906:32): [True: 759, False: 474]
  |  Branch (906:52): [True: 15, False: 459]
  |  Branch (906:77): [True: 15, False: 0]
  |  Branch (906:95): [True: 13, False: 2]
  ------------------
  907|  1.23k|    bool warnVersionNotFirst = false;
  908|  1.23k|    if (! versionWillBeError && versionNotFirstToken) {
  ------------------
  |  Branch (908:9): [True: 461, False: 772]
  |  Branch (908:33): [True: 142, False: 319]
  ------------------
  909|    142|        if (messages & EShMsgRelaxedErrors)
  ------------------
  |  Branch (909:13): [True: 103, False: 39]
  ------------------
  910|    103|            warnVersionNotFirst = true;
  911|     39|        else
  912|     39|            versionWillBeError = true;
  913|    142|    }
  914|       |
  915|  1.23k|    intermediate.setSource(source);
  916|  1.23k|    intermediate.setVersion(version);
  917|  1.23k|    intermediate.setProfile(profile);
  918|  1.23k|    intermediate.setSpv(spvVersion);
  919|  1.23k|    RecordProcesses(intermediate, messages, sourceEntryPointName);
  920|  1.23k|    if (spvVersion.vulkan > 0)
  ------------------
  |  Branch (920:9): [True: 210, False: 1.02k]
  ------------------
  921|    210|        intermediate.setOriginUpperLeft();
  922|  1.23k|#ifdef ENABLE_HLSL
  923|  1.23k|    if ((messages & EShMsgHlslOffsets) || source == EShSourceHlsl)
  ------------------
  |  Branch (923:9): [True: 65, False: 1.16k]
  |  Branch (923:43): [True: 63, False: 1.10k]
  ------------------
  924|    128|        intermediate.setHlslOffsets();
  925|  1.23k|#endif
  926|  1.23k|    if (messages & EShMsgDebugInfo) {
  ------------------
  |  Branch (926:9): [True: 77, False: 1.15k]
  ------------------
  927|     77|        intermediate.setSourceFile(names[numPre]);
  928|    154|        for (int s = 0; s < numStrings; ++s) {
  ------------------
  |  Branch (928:25): [True: 77, False: 77]
  ------------------
  929|       |            // The string may not be null-terminated, so make sure we provide
  930|       |            // the length along with the string.
  931|     77|            intermediate.addSourceText(strings[numPre + s], lengths[numPre + s]);
  932|     77|        }
  933|     77|    }
  934|  1.23k|    if (!SetupBuiltinSymbolTable(version, profile, spvVersion, source)) {
  ------------------
  |  Branch (934:9): [True: 200, False: 1.03k]
  ------------------
  935|    200|        return false;
  936|    200|    }
  937|       |
  938|  1.03k|    TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)]
  939|  1.03k|                                                  [MapSpvVersionToIndex(spvVersion)]
  940|  1.03k|                                                  [MapProfileToIndex(profile)]
  941|  1.03k|                                                  [MapSourceToIndex(source)]
  942|  1.03k|                                                  [stage];
  943|       |
  944|       |    // Dynamically allocate the symbol table so we can control when it is deallocated WRT the pool.
  945|  1.03k|    std::unique_ptr<TSymbolTable> symbolTable(new TSymbolTable);
  946|  1.03k|    if (cachedTable)
  ------------------
  |  Branch (946:9): [True: 1.03k, False: 0]
  ------------------
  947|  1.03k|        symbolTable->adoptLevels(*cachedTable);
  948|       |
  949|  1.03k|    if (intermediate.getUniqueId() != 0)
  ------------------
  |  Branch (949:9): [True: 0, False: 1.03k]
  ------------------
  950|      0|        symbolTable->overwriteUniqueId(intermediate.getUniqueId());
  951|       |
  952|       |    // Add built-in symbols that are potentially context dependent;
  953|       |    // they get popped again further down.
  954|  1.03k|    if (! AddContextSpecificSymbols(resources, compiler->infoSink, *symbolTable, version, profile, spvVersion,
  ------------------
  |  Branch (954:9): [True: 0, False: 1.03k]
  ------------------
  955|  1.03k|                                    stage, source)) {
  956|      0|        return false;
  957|      0|    }
  958|       |
  959|  1.03k|    if (messages & EShMsgBuiltinSymbolTable)
  ------------------
  |  Branch (959:9): [True: 109, False: 924]
  ------------------
  960|    109|        DumpBuiltinSymbolTable(compiler->infoSink, *symbolTable);
  961|       |
  962|       |    //
  963|       |    // Now we can process the full shader under proper symbols and rules.
  964|       |    //
  965|       |
  966|  1.03k|    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(*symbolTable, intermediate, version, profile, source,
  967|  1.03k|                                                    stage, compiler->infoSink,
  968|  1.03k|                                                    spvVersion, forwardCompatible, messages, false, sourceEntryPointName));
  969|  1.03k|    parseContext->compileOnly = compileOnly;
  970|  1.03k|    TPpContext ppContext(*parseContext, names[numPre] ? names[numPre] : "", includer);
  ------------------
  |  Branch (970:41): [True: 0, False: 1.03k]
  ------------------
  971|       |
  972|       |    // only GLSL (bison triggered, really) needs an externally set scan context
  973|  1.03k|    glslang::TScanContext scanContext(*parseContext);
  974|  1.03k|    if (source == EShSourceGlsl)
  ------------------
  |  Branch (974:9): [True: 913, False: 120]
  ------------------
  975|    913|        parseContext->setScanContext(&scanContext);
  976|       |
  977|  1.03k|    parseContext->setPpContext(&ppContext);
  978|  1.03k|    parseContext->setLimits(*resources);
  979|  1.03k|    if (! goodVersion)
  ------------------
  |  Branch (979:9): [True: 884, False: 149]
  ------------------
  980|    884|        parseContext->addError();
  981|  1.03k|    if (warnVersionNotFirst) {
  ------------------
  |  Branch (981:9): [True: 87, False: 946]
  ------------------
  982|     87|        TSourceLoc loc;
  983|     87|        loc.init();
  984|     87|        parseContext->warn(loc, "Illegal to have non-comment, non-whitespace tokens before #version", "#version", "");
  985|     87|    }
  986|       |
  987|  1.03k|    parseContext->initializeExtensionBehavior();
  988|       |
  989|       |    // Fill in the strings as outlined above.
  990|  1.03k|    std::string preamble;
  991|  1.03k|    parseContext->getPreamble(preamble);
  992|  1.03k|    strings[0] = preamble.c_str();
  993|  1.03k|    lengths[0] = strlen(strings[0]);
  994|  1.03k|    names[0] = nullptr;
  995|  1.03k|    strings[1] = customPreamble;
  996|  1.03k|    lengths[1] = strlen(strings[1]);
  997|  1.03k|    names[1] = nullptr;
  998|  1.03k|    assert(2 == numPre);
  999|  1.03k|    if (requireNonempty) {
  ------------------
  |  Branch (999:9): [True: 1.03k, False: 0]
  ------------------
 1000|  1.03k|        const int postIndex = numStrings + numPre;
 1001|  1.03k|        strings[postIndex] = "\n int;";
 1002|  1.03k|        lengths[postIndex] = strlen(strings[numStrings + numPre]);
 1003|  1.03k|        names[postIndex] = nullptr;
 1004|  1.03k|    }
 1005|  1.03k|    TInputScanner fullInput(numStrings + numPre + numPost, strings.get(), lengths.get(), names.get(), numPre, numPost);
 1006|       |
 1007|       |    // Push a new symbol allocation scope that will get used for the shader's globals.
 1008|  1.03k|    symbolTable->push();
 1009|       |
 1010|  1.03k|    bool success = processingContext(*parseContext, ppContext, fullInput,
 1011|  1.03k|                                     versionWillBeError, *symbolTable,
 1012|  1.03k|                                     intermediate, optLevel, messages);
 1013|  1.03k|    intermediate.setUniqueId(symbolTable->getMaxSymbolId());
 1014|  1.03k|    return success;
 1015|  1.03k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_120TranslateEnvironmentEPKN7glslang12TEnvironmentER11EShMessagesRNS0_9EShSourceER11EShLanguageRNS0_10SpvVersionE:
  702|  1.23k|{
  703|       |    // Set up environmental defaults, first ignoring 'environment'.
  704|  1.23k|    if (messages & EShMsgSpvRules)
  ------------------
  |  Branch (704:9): [True: 898, False: 335]
  ------------------
  705|    898|        spvVersion.spv = EShTargetSpv_1_0;
  706|  1.23k|    if (messages & EShMsgVulkanRules) {
  ------------------
  |  Branch (706:9): [True: 210, False: 1.02k]
  ------------------
  707|    210|        spvVersion.vulkan = EShTargetVulkan_1_0;
  708|    210|        spvVersion.vulkanGlsl = 100;
  709|  1.02k|    } else if (spvVersion.spv != 0)
  ------------------
  |  Branch (709:16): [True: 898, False: 125]
  ------------------
  710|    898|        spvVersion.openGl = 100;
  711|       |
  712|       |    // Now, override, based on any content set in 'environment'.
  713|       |    // 'environment' must be cleared to ESh*None settings when items
  714|       |    // are not being set.
  715|  1.23k|    if (environment != nullptr) {
  ------------------
  |  Branch (715:9): [True: 1.23k, False: 0]
  ------------------
  716|       |        // input language
  717|  1.23k|        if (environment->input.languageFamily != EShSourceNone) {
  ------------------
  |  Branch (717:13): [True: 0, False: 1.23k]
  ------------------
  718|      0|            stage = environment->input.stage;
  719|      0|            switch (environment->input.dialect) {
  ------------------
  |  Branch (719:21): [True: 0, False: 0]
  ------------------
  720|      0|            case EShClientNone:
  ------------------
  |  Branch (720:13): [True: 0, False: 0]
  ------------------
  721|      0|                break;
  722|      0|            case EShClientVulkan:
  ------------------
  |  Branch (722:13): [True: 0, False: 0]
  ------------------
  723|      0|                spvVersion.vulkanGlsl = environment->input.dialectVersion;
  724|      0|                spvVersion.vulkanRelaxed = environment->input.vulkanRulesRelaxed;
  725|      0|                break;
  726|      0|            case EShClientOpenGL:
  ------------------
  |  Branch (726:13): [True: 0, False: 0]
  ------------------
  727|      0|                spvVersion.openGl = environment->input.dialectVersion;
  728|      0|                break;
  729|      0|            case EShClientCount:
  ------------------
  |  Branch (729:13): [True: 0, False: 0]
  ------------------
  730|      0|                assert(0);
  731|      0|                break;
  732|      0|            }
  733|      0|            switch (environment->input.languageFamily) {
  ------------------
  |  Branch (733:21): [True: 0, False: 0]
  ------------------
  734|      0|            case EShSourceNone:
  ------------------
  |  Branch (734:13): [True: 0, False: 0]
  ------------------
  735|      0|                break;
  736|      0|            case EShSourceGlsl:
  ------------------
  |  Branch (736:13): [True: 0, False: 0]
  ------------------
  737|      0|                source = EShSourceGlsl;
  738|      0|                messages = static_cast<EShMessages>(messages & ~EShMsgReadHlsl);
  739|      0|                break;
  740|      0|            case EShSourceHlsl:
  ------------------
  |  Branch (740:13): [True: 0, False: 0]
  ------------------
  741|      0|                source = EShSourceHlsl;
  742|      0|                messages = static_cast<EShMessages>(messages | EShMsgReadHlsl);
  743|      0|                break;
  744|      0|            case EShSourceCount:
  ------------------
  |  Branch (744:13): [True: 0, False: 0]
  ------------------
  745|      0|                assert(0);
  746|      0|                break;
  747|      0|            }
  748|      0|        }
  749|       |
  750|       |        // client
  751|  1.23k|        switch (environment->client.client) {
  752|      0|        case EShClientVulkan:
  ------------------
  |  Branch (752:9): [True: 0, False: 1.23k]
  ------------------
  753|      0|            spvVersion.vulkan = environment->client.version;
  754|      0|            break;
  755|  1.23k|        default:
  ------------------
  |  Branch (755:9): [True: 1.23k, False: 0]
  ------------------
  756|  1.23k|            break;
  757|  1.23k|        }
  758|       |
  759|       |        // generated code
  760|  1.23k|        switch (environment->target.language) {
  761|      0|        case EshTargetSpv:
  ------------------
  |  Branch (761:9): [True: 0, False: 1.23k]
  ------------------
  762|      0|            spvVersion.spv = environment->target.version;
  763|      0|            break;
  764|  1.23k|        default:
  ------------------
  |  Branch (764:9): [True: 1.23k, False: 0]
  ------------------
  765|  1.23k|            break;
  766|  1.23k|        }
  767|  1.23k|    }
  768|  1.23k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_120DeduceVersionProfileER9TInfoSink11EShLanguagebiN7glslang9EShSourceERiR8EProfileRKNS3_10SpvVersionE:
  512|  1.23k|{
  513|  1.23k|    const int FirstProfileVersion = 150;
  514|  1.23k|    bool correct = true;
  515|       |
  516|  1.23k|    if (source == EShSourceHlsl) {
  ------------------
  |  Branch (516:9): [True: 120, False: 1.11k]
  ------------------
  517|    120|        version = 500;          // shader model; currently a characteristic of glslang, not the input
  518|    120|        profile = ECoreProfile; // allow doubles in prototype parsing
  519|    120|        return correct;
  520|    120|    }
  521|       |
  522|       |    // Get a version...
  523|  1.11k|    if (version == 0) {
  ------------------
  |  Branch (523:9): [True: 639, False: 474]
  ------------------
  524|    639|        version = defaultVersion;
  525|       |        // infoSink.info.message(EPrefixWarning, "#version: statement missing; use #version on first line of shader");
  526|    639|    }
  527|       |
  528|       |    // Get a good profile...
  529|  1.11k|    if (profile == ENoProfile) {
  ------------------
  |  Branch (529:9): [True: 1.04k, False: 71]
  ------------------
  530|  1.04k|        if (version == 300 || version == 310 || version == 320) {
  ------------------
  |  Branch (530:13): [True: 6, False: 1.03k]
  |  Branch (530:31): [True: 1, False: 1.03k]
  |  Branch (530:49): [True: 2, False: 1.03k]
  ------------------
  531|      9|            correct = false;
  532|      9|            infoSink.info.message(EPrefixError, "#version: versions 300, 310, and 320 require specifying the 'es' profile");
  533|      9|            profile = EEsProfile;
  534|  1.03k|        } else if (version == 100)
  ------------------
  |  Branch (534:20): [True: 641, False: 392]
  ------------------
  535|    641|            profile = EEsProfile;
  536|    392|        else if (version >= FirstProfileVersion)
  ------------------
  |  Branch (536:18): [True: 130, False: 262]
  ------------------
  537|    130|            profile = ECoreProfile;
  538|    262|        else
  539|    262|            profile = ENoProfile;
  540|  1.04k|    } else {
  541|       |        // a profile was provided...
  542|     71|        if (version < 150) {
  ------------------
  |  Branch (542:13): [True: 32, False: 39]
  ------------------
  543|     32|            correct = false;
  544|     32|            infoSink.info.message(EPrefixError, "#version: versions before 150 do not allow a profile token");
  545|     32|            if (version == 100)
  ------------------
  |  Branch (545:17): [True: 1, False: 31]
  ------------------
  546|      1|                profile = EEsProfile;
  547|     31|            else
  548|     31|                profile = ENoProfile;
  549|     39|        } else if (version == 300 || version == 310 || version == 320) {
  ------------------
  |  Branch (549:20): [True: 1, False: 38]
  |  Branch (549:38): [True: 1, False: 37]
  |  Branch (549:56): [True: 1, False: 36]
  ------------------
  550|      3|            if (profile != EEsProfile) {
  ------------------
  |  Branch (550:17): [True: 0, False: 3]
  ------------------
  551|      0|                correct = false;
  552|      0|                infoSink.info.message(EPrefixError, "#version: versions 300, 310, and 320 support only the es profile");
  553|      0|            }
  554|      3|            profile = EEsProfile;
  555|     36|        } else {
  556|     36|            if (profile == EEsProfile) {
  ------------------
  |  Branch (556:17): [True: 36, False: 0]
  ------------------
  557|     36|                correct = false;
  558|     36|                infoSink.info.message(EPrefixError, "#version: only version 300, 310, and 320 support the es profile");
  559|     36|                if (version >= FirstProfileVersion)
  ------------------
  |  Branch (559:21): [True: 36, False: 0]
  ------------------
  560|     36|                    profile = ECoreProfile;
  561|      0|                else
  562|      0|                    profile = ENoProfile;
  563|     36|            }
  564|       |            // else: typical desktop case... e.g., "#version 410 core"
  565|     36|        }
  566|     71|    }
  567|       |
  568|       |    // Fix version...
  569|  1.11k|    switch (version) {
  570|       |    // ES versions
  571|    642|    case 100: break;
  ------------------
  |  Branch (571:5): [True: 642, False: 471]
  ------------------
  572|      7|    case 300: break;
  ------------------
  |  Branch (572:5): [True: 7, False: 1.10k]
  ------------------
  573|      2|    case 310: break;
  ------------------
  |  Branch (573:5): [True: 2, False: 1.11k]
  ------------------
  574|      3|    case 320: break;
  ------------------
  |  Branch (574:5): [True: 3, False: 1.11k]
  ------------------
  575|       |
  576|       |    // desktop versions
  577|      3|    case 110: break;
  ------------------
  |  Branch (577:5): [True: 3, False: 1.11k]
  ------------------
  578|      1|    case 120: break;
  ------------------
  |  Branch (578:5): [True: 1, False: 1.11k]
  ------------------
  579|      1|    case 130: break;
  ------------------
  |  Branch (579:5): [True: 1, False: 1.11k]
  ------------------
  580|      2|    case 140: break;
  ------------------
  |  Branch (580:5): [True: 2, False: 1.11k]
  ------------------
  581|      1|    case 150: break;
  ------------------
  |  Branch (581:5): [True: 1, False: 1.11k]
  ------------------
  582|      1|    case 330: break;
  ------------------
  |  Branch (582:5): [True: 1, False: 1.11k]
  ------------------
  583|      1|    case 400: break;
  ------------------
  |  Branch (583:5): [True: 1, False: 1.11k]
  ------------------
  584|      1|    case 410: break;
  ------------------
  |  Branch (584:5): [True: 1, False: 1.11k]
  ------------------
  585|      1|    case 420: break;
  ------------------
  |  Branch (585:5): [True: 1, False: 1.11k]
  ------------------
  586|      1|    case 430: break;
  ------------------
  |  Branch (586:5): [True: 1, False: 1.11k]
  ------------------
  587|      2|    case 440: break;
  ------------------
  |  Branch (587:5): [True: 2, False: 1.11k]
  ------------------
  588|      1|    case 450: break;
  ------------------
  |  Branch (588:5): [True: 1, False: 1.11k]
  ------------------
  589|      1|    case 460: break;
  ------------------
  |  Branch (589:5): [True: 1, False: 1.11k]
  ------------------
  590|       |
  591|       |    // unknown version
  592|    442|    default:
  ------------------
  |  Branch (592:5): [True: 442, False: 671]
  ------------------
  593|    442|        correct = false;
  594|    442|        infoSink.info.message(EPrefixError, "version not supported");
  595|    442|        if (profile == EEsProfile)
  ------------------
  |  Branch (595:13): [True: 0, False: 442]
  ------------------
  596|      0|            version = 310;
  597|    442|        else {
  598|    442|            version = 450;
  599|    442|            profile = ECoreProfile;
  600|    442|        }
  601|    442|        break;
  602|  1.11k|    }
  603|       |
  604|       |    // Correct for stage type...
  605|  1.11k|    switch (stage) {
  606|      0|    case EShLangGeometry:
  ------------------
  |  Branch (606:5): [True: 0, False: 1.11k]
  ------------------
  607|      0|        if ((profile == EEsProfile && version < 310) ||
  ------------------
  |  Branch (607:14): [True: 0, False: 0]
  |  Branch (607:39): [True: 0, False: 0]
  ------------------
  608|      0|            (profile != EEsProfile && version < 150)) {
  ------------------
  |  Branch (608:14): [True: 0, False: 0]
  |  Branch (608:39): [True: 0, False: 0]
  ------------------
  609|      0|            correct = false;
  610|      0|            infoSink.info.message(EPrefixError, "#version: geometry shaders require es profile with version 310 or non-es profile with version 150 or above");
  611|      0|            version = (profile == EEsProfile) ? 310 : 150;
  ------------------
  |  Branch (611:23): [True: 0, False: 0]
  ------------------
  612|      0|            if (profile == EEsProfile || profile == ENoProfile)
  ------------------
  |  Branch (612:17): [True: 0, False: 0]
  |  Branch (612:42): [True: 0, False: 0]
  ------------------
  613|      0|                profile = ECoreProfile;
  614|      0|        }
  615|      0|        break;
  616|      0|    case EShLangTessControl:
  ------------------
  |  Branch (616:5): [True: 0, False: 1.11k]
  ------------------
  617|      0|    case EShLangTessEvaluation:
  ------------------
  |  Branch (617:5): [True: 0, False: 1.11k]
  ------------------
  618|      0|        if ((profile == EEsProfile && version < 310) ||
  ------------------
  |  Branch (618:14): [True: 0, False: 0]
  |  Branch (618:39): [True: 0, False: 0]
  ------------------
  619|      0|            (profile != EEsProfile && version < 150)) {
  ------------------
  |  Branch (619:14): [True: 0, False: 0]
  |  Branch (619:39): [True: 0, False: 0]
  ------------------
  620|      0|            correct = false;
  621|      0|            infoSink.info.message(EPrefixError, "#version: tessellation shaders require es profile with version 310 or non-es profile with version 150 or above");
  622|      0|            version = (profile == EEsProfile) ? 310 : 400; // 150 supports the extension, correction is to 400 which does not
  ------------------
  |  Branch (622:23): [True: 0, False: 0]
  ------------------
  623|      0|            if (profile == EEsProfile || profile == ENoProfile)
  ------------------
  |  Branch (623:17): [True: 0, False: 0]
  |  Branch (623:42): [True: 0, False: 0]
  ------------------
  624|      0|                profile = ECoreProfile;
  625|      0|        }
  626|      0|        break;
  627|      0|    case EShLangCompute:
  ------------------
  |  Branch (627:5): [True: 0, False: 1.11k]
  ------------------
  628|      0|        if ((profile == EEsProfile && version < 310) ||
  ------------------
  |  Branch (628:14): [True: 0, False: 0]
  |  Branch (628:39): [True: 0, False: 0]
  ------------------
  629|      0|            (profile != EEsProfile && version < 420)) {
  ------------------
  |  Branch (629:14): [True: 0, False: 0]
  |  Branch (629:39): [True: 0, False: 0]
  ------------------
  630|      0|            correct = false;
  631|      0|            infoSink.info.message(EPrefixError, "#version: compute shaders require es profile with version 310 or above, or non-es profile with version 420 or above");
  632|      0|            version = profile == EEsProfile ? 310 : 420;
  ------------------
  |  Branch (632:23): [True: 0, False: 0]
  ------------------
  633|      0|        }
  634|      0|        break;
  635|      0|    case EShLangRayGen:
  ------------------
  |  Branch (635:5): [True: 0, False: 1.11k]
  ------------------
  636|      0|    case EShLangIntersect:
  ------------------
  |  Branch (636:5): [True: 0, False: 1.11k]
  ------------------
  637|      0|    case EShLangAnyHit:
  ------------------
  |  Branch (637:5): [True: 0, False: 1.11k]
  ------------------
  638|      0|    case EShLangClosestHit:
  ------------------
  |  Branch (638:5): [True: 0, False: 1.11k]
  ------------------
  639|      0|    case EShLangMiss:
  ------------------
  |  Branch (639:5): [True: 0, False: 1.11k]
  ------------------
  640|      0|    case EShLangCallable:
  ------------------
  |  Branch (640:5): [True: 0, False: 1.11k]
  ------------------
  641|      0|        if (profile == EEsProfile || version < 460) {
  ------------------
  |  Branch (641:13): [True: 0, False: 0]
  |  Branch (641:38): [True: 0, False: 0]
  ------------------
  642|      0|            correct = false;
  643|      0|            infoSink.info.message(EPrefixError, "#version: ray tracing shaders require non-es profile with version 460 or above");
  644|      0|            version = 460;
  645|      0|        }
  646|      0|        break;
  647|      0|    case EShLangMesh:
  ------------------
  |  Branch (647:5): [True: 0, False: 1.11k]
  ------------------
  648|      0|    case EShLangTask:
  ------------------
  |  Branch (648:5): [True: 0, False: 1.11k]
  ------------------
  649|      0|        if ((profile == EEsProfile && version < 320) ||
  ------------------
  |  Branch (649:14): [True: 0, False: 0]
  |  Branch (649:39): [True: 0, False: 0]
  ------------------
  650|      0|            (profile != EEsProfile && version < 450)) {
  ------------------
  |  Branch (650:14): [True: 0, False: 0]
  |  Branch (650:39): [True: 0, False: 0]
  ------------------
  651|      0|            correct = false;
  652|      0|            infoSink.info.message(EPrefixError, "#version: mesh/task shaders require es profile with version 320 or above, or non-es profile with version 450 or above");
  653|      0|            version = profile == EEsProfile ? 320 : 450;
  ------------------
  |  Branch (653:23): [True: 0, False: 0]
  ------------------
  654|      0|        }
  655|      0|        break;
  656|  1.11k|    default:
  ------------------
  |  Branch (656:5): [True: 1.11k, False: 0]
  ------------------
  657|  1.11k|        break;
  658|  1.11k|    }
  659|       |
  660|  1.11k|    if (profile == EEsProfile && version >= 300 && versionNotFirst) {
  ------------------
  |  Branch (660:9): [True: 654, False: 459]
  |  Branch (660:34): [True: 12, False: 642]
  |  Branch (660:52): [True: 11, False: 1]
  ------------------
  661|     11|        correct = false;
  662|     11|        infoSink.info.message(EPrefixError, "#version: statement must appear first in es-profile shader; before comments or newlines");
  663|     11|    }
  664|       |
  665|       |    // Check for SPIR-V compatibility
  666|  1.11k|    if (spvVersion.spv != 0) {
  ------------------
  |  Branch (666:9): [True: 898, False: 215]
  ------------------
  667|    898|        switch (profile) {
  668|    494|        case EEsProfile:
  ------------------
  |  Branch (668:9): [True: 494, False: 404]
  ------------------
  669|    494|            if (version < 310) {
  ------------------
  |  Branch (669:17): [True: 489, False: 5]
  ------------------
  670|    489|                correct = false;
  671|    489|                infoSink.info.message(EPrefixError, "#version: ES shaders for SPIR-V require version 310 or higher");
  672|    489|                version = 310;
  673|    489|            }
  674|    494|            break;
  675|      0|        case ECompatibilityProfile:
  ------------------
  |  Branch (675:9): [True: 0, False: 898]
  ------------------
  676|      0|            infoSink.info.message(EPrefixError, "#version: compilation for SPIR-V does not support the compatibility profile");
  677|      0|            break;
  678|    404|        default:
  ------------------
  |  Branch (678:9): [True: 404, False: 494]
  ------------------
  679|    404|            if (spvVersion.vulkan > 0 && version < 140) {
  ------------------
  |  Branch (679:17): [True: 0, False: 404]
  |  Branch (679:42): [True: 0, False: 0]
  ------------------
  680|      0|                correct = false;
  681|      0|                infoSink.info.message(EPrefixError, "#version: Desktop shaders for Vulkan SPIR-V require version 140 or higher");
  682|      0|                version = 140;
  683|      0|            }
  684|    404|            if (spvVersion.openGl >= 100 && version < 330) {
  ------------------
  |  Branch (684:17): [True: 404, False: 0]
  |  Branch (684:45): [True: 8, False: 396]
  ------------------
  685|      8|                correct = false;
  686|      8|                infoSink.info.message(EPrefixError, "#version: Desktop shaders for OpenGL SPIR-V require version 330 or higher");
  687|      8|                version = 330;
  688|      8|            }
  689|    404|            break;
  690|    898|        }
  691|    898|    }
  692|       |
  693|  1.11k|    return correct;
  694|  1.11k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115RecordProcessesERN7glslang13TIntermediateE11EShMessagesRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  773|  1.23k|{
  774|  1.23k|    if ((messages & EShMsgRelaxedErrors) != 0)
  ------------------
  |  Branch (774:9): [True: 773, False: 460]
  ------------------
  775|    773|        intermediate.addProcess("relaxed-errors");
  776|  1.23k|    if ((messages & EShMsgSuppressWarnings) != 0)
  ------------------
  |  Branch (776:9): [True: 808, False: 425]
  ------------------
  777|    808|        intermediate.addProcess("suppress-warnings");
  778|  1.23k|    if ((messages & EShMsgKeepUncalled) != 0)
  ------------------
  |  Branch (778:9): [True: 95, False: 1.13k]
  ------------------
  779|     95|        intermediate.addProcess("keep-uncalled");
  780|  1.23k|    if ((messages & EShMsgRelaxSetBindingLimits) != 0)
  ------------------
  |  Branch (780:9): [True: 171, False: 1.06k]
  ------------------
  781|    171|        intermediate.setRelaxSetBindingLimits(true);
  782|  1.23k|    if (sourceEntryPointName.size() > 0) {
  ------------------
  |  Branch (782:9): [True: 0, False: 1.23k]
  ------------------
  783|      0|        intermediate.addProcess("source-entrypoint");
  784|      0|        intermediate.addProcessArgument(sourceEntryPointName);
  785|      0|    }
  786|  1.23k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_123SetupBuiltinSymbolTableEi8EProfileRKN7glslang10SpvVersionENS1_9EShSourceE:
  427|  1.23k|{
  428|  1.23k|    TInfoSink infoSink;
  429|  1.23k|    bool success;
  430|       |
  431|       |    // Make sure only one thread tries to do this at a time
  432|  1.23k|#ifndef DISABLE_THREAD_SUPPORT
  433|  1.23k|    const std::lock_guard<std::mutex> lock(init_lock);
  434|  1.23k|#endif
  435|       |
  436|       |    // See if it's already been done for this version/profile combination
  437|  1.23k|    int versionIndex = MapVersionToIndex(version);
  438|  1.23k|    int spvVersionIndex = MapSpvVersionToIndex(spvVersion);
  439|  1.23k|    int profileIndex = MapProfileToIndex(profile);
  440|  1.23k|    int sourceIndex = MapSourceToIndex(source);
  441|  1.23k|    if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][EPcGeneral]) {
  ------------------
  |  Branch (441:9): [True: 0, False: 1.23k]
  ------------------
  442|      0|        return true;
  443|      0|    }
  444|       |
  445|       |    // Switch to a new pool
  446|  1.23k|    TPoolAllocator& previousAllocator = GetThreadPoolAllocator();
  447|  1.23k|    TPoolAllocator* builtInPoolAllocator = new TPoolAllocator;
  448|  1.23k|    SetThreadPoolAllocator(builtInPoolAllocator);
  449|       |
  450|       |    // Dynamically allocate the local symbol tables so we can control when they are deallocated WRT when the pool is popped.
  451|  1.23k|    TSymbolTable* commonTable[EPcCount];
  452|  1.23k|    TSymbolTable* stageTables[EShLangCount];
  453|  3.69k|    for (int precClass = 0; precClass < EPcCount; ++precClass)
  ------------------
  |  Branch (453:29): [True: 2.46k, False: 1.23k]
  ------------------
  454|  2.46k|        commonTable[precClass] = new TSymbolTable;
  455|  18.4k|    for (int stage = 0; stage < EShLangCount; ++stage)
  ------------------
  |  Branch (455:25): [True: 17.2k, False: 1.23k]
  ------------------
  456|  17.2k|        stageTables[stage] = new TSymbolTable;
  457|       |
  458|       |    // Generate the local symbol tables using the new pool
  459|  1.23k|    if (!InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source)) {
  ------------------
  |  Branch (459:9): [True: 200, False: 1.03k]
  ------------------
  460|    200|        success = false;
  461|    200|        goto cleanup;
  462|    200|    }
  463|       |
  464|       |    // Switch to the process-global pool
  465|  1.03k|    SetThreadPoolAllocator(PerProcessGPA);
  466|       |
  467|       |    // Copy the local symbol tables from the new pool to the global tables using the process-global pool
  468|  3.09k|    for (int precClass = 0; precClass < EPcCount; ++precClass) {
  ------------------
  |  Branch (468:29): [True: 2.06k, False: 1.03k]
  ------------------
  469|  2.06k|        if (! commonTable[precClass]->isEmpty()) {
  ------------------
  |  Branch (469:13): [True: 1.54k, False: 519]
  ------------------
  470|  1.54k|            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass] = new TSymbolTable;
  471|  1.54k|            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass]->copyTable(*commonTable[precClass]);
  472|  1.54k|            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass]->readOnly();
  473|  1.54k|        }
  474|  2.06k|    }
  475|  15.4k|    for (int stage = 0; stage < EShLangCount; ++stage) {
  ------------------
  |  Branch (475:25): [True: 14.4k, False: 1.03k]
  ------------------
  476|  14.4k|        if (! stageTables[stage]->isEmpty()) {
  ------------------
  |  Branch (476:13): [True: 10.2k, False: 4.25k]
  ------------------
  477|  10.2k|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage] = new TSymbolTable;
  478|  10.2k|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->adoptLevels(*CommonSymbolTable
  479|  10.2k|                              [versionIndex][spvVersionIndex][profileIndex][sourceIndex][CommonIndex(profile, (EShLanguage)stage)]);
  480|  10.2k|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->copyTable(*stageTables[stage]);
  481|  10.2k|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->readOnly();
  482|  10.2k|        }
  483|  14.4k|    }
  484|  1.03k|    success = true;
  485|       |
  486|  1.23k|cleanup:
  487|       |    // Clean up the local tables before deleting the pool they used.
  488|  3.69k|    for (int precClass = 0; precClass < EPcCount; ++precClass)
  ------------------
  |  Branch (488:29): [True: 2.46k, False: 1.23k]
  ------------------
  489|  2.46k|        delete commonTable[precClass];
  490|  18.4k|    for (int stage = 0; stage < EShLangCount; ++stage)
  ------------------
  |  Branch (490:25): [True: 17.2k, False: 1.23k]
  ------------------
  491|  17.2k|        delete stageTables[stage];
  492|       |
  493|  1.23k|    delete builtInPoolAllocator;
  494|  1.23k|    SetThreadPoolAllocator(&previousAllocator);
  495|       |
  496|  1.23k|    return success;
  497|  1.03k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_122InitializeSymbolTablesER9TInfoSinkPPN7glslang12TSymbolTableES5_i8EProfileRKNS2_10SpvVersionENS2_9EShSourceE:
  322|  1.23k|{
  323|  1.23k|    bool success = true;
  324|  1.23k|    std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
  325|       |
  326|  1.23k|    if (builtInParseables == nullptr)
  ------------------
  |  Branch (326:9): [True: 0, False: 1.23k]
  ------------------
  327|      0|        return false;
  328|       |
  329|  1.23k|    builtInParseables->initialize(version, profile, spvVersion);
  330|       |
  331|       |    // do the common tables
  332|  1.23k|    success &= InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, source,
  333|  1.23k|                          infoSink, *commonTable[EPcGeneral]);
  334|  1.23k|    if (profile == EEsProfile)
  ------------------
  |  Branch (334:9): [True: 654, False: 579]
  ------------------
  335|    654|        success &= InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, source,
  336|    654|                              infoSink, *commonTable[EPcFragment]);
  337|       |
  338|       |    // do the per-stage tables
  339|       |
  340|       |    // always have vertex and fragment
  341|  1.23k|    success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, source,
  342|  1.23k|                               infoSink, commonTable, symbolTables);
  343|  1.23k|    success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
  344|  1.23k|                               infoSink, commonTable, symbolTables);
  345|       |
  346|       |    // check for tessellation
  347|  1.23k|    if ((profile != EEsProfile && version >= 150) ||
  ------------------
  |  Branch (347:10): [True: 579, False: 654]
  |  Branch (347:35): [True: 579, False: 0]
  ------------------
  348|  1.07k|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (348:10): [True: 654, False: 0]
  |  Branch (348:35): [True: 494, False: 160]
  ------------------
  349|  1.07k|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, source,
  350|  1.07k|                                   infoSink, commonTable, symbolTables);
  351|  1.07k|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, source,
  352|  1.07k|                                   infoSink, commonTable, symbolTables);
  353|  1.07k|    }
  354|       |
  355|       |    // check for geometry
  356|  1.23k|    if ((profile != EEsProfile && version >= 150) ||
  ------------------
  |  Branch (356:10): [True: 579, False: 654]
  |  Branch (356:35): [True: 579, False: 0]
  ------------------
  357|    654|        (profile == EEsProfile && version >= 310))
  ------------------
  |  Branch (357:10): [True: 654, False: 0]
  |  Branch (357:35): [True: 494, False: 160]
  ------------------
  358|  1.07k|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
  359|  1.07k|                                   infoSink, commonTable, symbolTables);
  360|       |
  361|       |    // check for compute
  362|  1.23k|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (362:10): [True: 579, False: 654]
  |  Branch (362:35): [True: 568, False: 11]
  ------------------
  363|    665|        (profile == EEsProfile && version >= 310))
  ------------------
  |  Branch (363:10): [True: 654, False: 11]
  |  Branch (363:35): [True: 494, False: 160]
  ------------------
  364|  1.06k|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
  365|  1.06k|                                   infoSink, commonTable, symbolTables);
  366|       |
  367|       |    // check for ray tracing stages
  368|  1.23k|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (368:9): [True: 579, False: 654]
  |  Branch (368:34): [True: 564, False: 15]
  ------------------
  369|    564|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
  370|    564|            infoSink, commonTable, symbolTables);
  371|    564|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersect, source,
  372|    564|            infoSink, commonTable, symbolTables);
  373|    564|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHit, source,
  374|    564|            infoSink, commonTable, symbolTables);
  375|    564|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHit, source,
  376|    564|            infoSink, commonTable, symbolTables);
  377|    564|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMiss, source,
  378|    564|            infoSink, commonTable, symbolTables);
  379|    564|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallable, source,
  380|    564|            infoSink, commonTable, symbolTables);
  381|    564|    }
  382|       |
  383|       |    // check for mesh
  384|  1.23k|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (384:10): [True: 579, False: 654]
  |  Branch (384:35): [True: 564, False: 15]
  ------------------
  385|    669|        (profile == EEsProfile && version >= 320))
  ------------------
  |  Branch (385:10): [True: 654, False: 15]
  |  Branch (385:35): [True: 3, False: 651]
  ------------------
  386|    567|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMesh, source,
  387|    567|                                   infoSink, commonTable, symbolTables);
  388|       |
  389|       |    // check for task
  390|  1.23k|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (390:10): [True: 579, False: 654]
  |  Branch (390:35): [True: 564, False: 15]
  ------------------
  391|    669|        (profile == EEsProfile && version >= 320))
  ------------------
  |  Branch (391:10): [True: 654, False: 15]
  |  Branch (391:35): [True: 3, False: 651]
  ------------------
  392|    567|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source,
  393|    567|                                   infoSink, commonTable, symbolTables);
  394|       |
  395|  1.23k|    return success;
  396|  1.23k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_123CreateBuiltInParseablesER9TInfoSinkN7glslang9EShSourceE:
   94|  2.26k|{
   95|  2.26k|    switch (source) {
   96|  2.02k|    case EShSourceGlsl: return new TBuiltIns();              // GLSL builtIns
  ------------------
  |  Branch (96:5): [True: 2.02k, False: 240]
  ------------------
   97|      0|#ifdef ENABLE_HLSL
   98|    240|    case EShSourceHlsl: return new TBuiltInParseablesHlsl(); // HLSL intrinsics
  ------------------
  |  Branch (98:5): [True: 240, False: 2.02k]
  ------------------
   99|      0|#endif
  100|       |
  101|      0|    default:
  ------------------
  |  Branch (101:5): [True: 0, False: 2.26k]
  ------------------
  102|      0|        infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
  103|      0|        return nullptr;
  104|  2.26k|    }
  105|  2.26k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_121InitializeSymbolTableERKNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEEi8EProfileRKNS4_10SpvVersionE11EShLanguageNS4_9EShSourceER9TInfoSinkRNS4_12TSymbolTableE:
  249|  14.1k|{
  250|  14.1k|    TIntermediate intermediate(language, version, profile);
  251|       |
  252|  14.1k|    intermediate.setSource(source);
  253|       |
  254|  14.1k|    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(symbolTable, intermediate, version, profile, source,
  255|  14.1k|                                                                       language, infoSink, spvVersion, true, EShMsgDefault,
  256|  14.1k|                                                                       true));
  257|       |
  258|  14.1k|    TShader::ForbidIncluder includer;
  259|  14.1k|    TPpContext ppContext(*parseContext, "", includer);
  260|  14.1k|    TScanContext scanContext(*parseContext);
  261|  14.1k|    parseContext->setScanContext(&scanContext);
  262|  14.1k|    parseContext->setPpContext(&ppContext);
  263|       |
  264|       |    //
  265|       |    // Push the symbol table to give it an initial scope.  This
  266|       |    // push should not have a corresponding pop, so that built-ins
  267|       |    // are preserved, and the test for an empty table fails.
  268|       |    //
  269|       |
  270|  14.1k|    symbolTable.push();
  271|       |
  272|  14.1k|    const char* builtInShaders[2];
  273|  14.1k|    size_t builtInLengths[2];
  274|  14.1k|    builtInShaders[0] = builtIns.c_str();
  275|  14.1k|    builtInLengths[0] = builtIns.size();
  276|       |
  277|  14.1k|    if (builtInLengths[0] == 0)
  ------------------
  |  Branch (277:9): [True: 1.80k, False: 12.3k]
  ------------------
  278|  1.80k|        return true;
  279|       |
  280|  12.3k|    TInputScanner input(1, builtInShaders, builtInLengths);
  281|  12.3k|    if (! parseContext->parseShaderStrings(ppContext, input) != 0) {
  ------------------
  |  Branch (281:9): [True: 480, False: 11.9k]
  ------------------
  282|    480|        infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
  283|    480|        printf("Unable to parse built-ins\n%s\n", infoSink.info.c_str());
  284|    480|        printf("%s\n", builtInShaders[0]);
  285|       |
  286|    480|        return false;
  287|    480|    }
  288|       |
  289|  11.9k|    return true;
  290|  12.3k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_126InitializeStageSymbolTableERN7glslang18TBuiltInParseablesEi8EProfileRKNS0_10SpvVersionE11EShLanguageNS0_9EShSourceER9TInfoSinkPPNS0_12TSymbolTableESD_:
  303|  11.2k|{
  304|  11.2k|    (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
  305|  11.2k|    if (!InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
  ------------------
  |  Branch (305:9): [True: 193, False: 11.0k]
  ------------------
  306|  11.2k|                          infoSink, *symbolTables[language]))
  307|    193|        return false;
  308|  11.0k|    builtInParseables.identifyBuiltIns(version, profile, spvVersion, language, *symbolTables[language]);
  309|  11.0k|    if (profile == EEsProfile && version >= 300)
  ------------------
  |  Branch (309:9): [True: 3.15k, False: 7.92k]
  |  Branch (309:34): [True: 2.97k, False: 180]
  ------------------
  310|  2.97k|        (*symbolTables[language]).setNoBuiltInRedeclarations();
  311|  11.0k|    if (version == 110)
  ------------------
  |  Branch (311:9): [True: 0, False: 11.0k]
  ------------------
  312|      0|        (*symbolTables[language]).setSeparateNameSpaces();
  313|       |
  314|  11.0k|    return true;
  315|  11.2k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_111CommonIndexE8EProfile11EShLanguage:
  293|  21.4k|{
  294|  21.4k|    return (profile == EEsProfile && language == EShLangFragment) ? EPcFragment : EPcGeneral;
  ------------------
  |  Branch (294:13): [True: 6.30k, False: 15.1k]
  |  Branch (294:38): [True: 1.16k, False: 5.13k]
  ------------------
  295|  21.4k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_117MapVersionToIndexEi:
  138|  2.26k|{
  139|  2.26k|    int index = 0;
  140|       |
  141|  2.26k|    switch (version) {
  142|    180|    case 100: index =  0; break;
  ------------------
  |  Branch (142:5): [True: 180, False: 2.08k]
  ------------------
  143|      0|    case 110: index =  1; break;
  ------------------
  |  Branch (143:5): [True: 0, False: 2.26k]
  ------------------
  144|      0|    case 120: index =  2; break;
  ------------------
  |  Branch (144:5): [True: 0, False: 2.26k]
  ------------------
  145|      0|    case 130: index =  3; break;
  ------------------
  |  Branch (145:5): [True: 0, False: 2.26k]
  ------------------
  146|      0|    case 140: index =  4; break;
  ------------------
  |  Branch (146:5): [True: 0, False: 2.26k]
  ------------------
  147|      0|    case 150: index =  5; break;
  ------------------
  |  Branch (147:5): [True: 0, False: 2.26k]
  ------------------
  148|      0|    case 300: index =  6; break;
  ------------------
  |  Branch (148:5): [True: 0, False: 2.26k]
  ------------------
  149|     11|    case 330: index =  7; break;
  ------------------
  |  Branch (149:5): [True: 11, False: 2.25k]
  ------------------
  150|      2|    case 400: index =  8; break;
  ------------------
  |  Branch (150:5): [True: 2, False: 2.26k]
  ------------------
  151|      2|    case 410: index =  9; break;
  ------------------
  |  Branch (151:5): [True: 2, False: 2.26k]
  ------------------
  152|      2|    case 420: index = 10; break;
  ------------------
  |  Branch (152:5): [True: 2, False: 2.26k]
  ------------------
  153|      2|    case 430: index = 11; break;
  ------------------
  |  Branch (153:5): [True: 2, False: 2.26k]
  ------------------
  154|      4|    case 440: index = 12; break;
  ------------------
  |  Branch (154:5): [True: 4, False: 2.26k]
  ------------------
  155|    982|    case 310: index = 13; break;
  ------------------
  |  Branch (155:5): [True: 982, False: 1.28k]
  ------------------
  156|    833|    case 450: index = 14; break;
  ------------------
  |  Branch (156:5): [True: 833, False: 1.43k]
  ------------------
  157|    240|    case 500: index =  0; break; // HLSL
  ------------------
  |  Branch (157:5): [True: 240, False: 2.02k]
  ------------------
  158|      6|    case 320: index = 15; break;
  ------------------
  |  Branch (158:5): [True: 6, False: 2.26k]
  ------------------
  159|      2|    case 460: index = 16; break;
  ------------------
  |  Branch (159:5): [True: 2, False: 2.26k]
  ------------------
  160|      0|    default:  assert(0);  break;
  ------------------
  |  Branch (160:5): [True: 0, False: 2.26k]
  ------------------
  161|  2.26k|    }
  162|       |
  163|  2.26k|    assert(index < VersionCount);
  164|       |
  165|  2.26k|    return index;
  166|  2.26k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_120MapSpvVersionToIndexERKN7glslang10SpvVersionE:
  171|  2.26k|{
  172|  2.26k|    int index = 0;
  173|       |
  174|  2.26k|    if (spvVersion.openGl > 0)
  ------------------
  |  Branch (174:9): [True: 1.78k, False: 477]
  ------------------
  175|  1.78k|        index = 1;
  176|    477|    else if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (176:14): [True: 227, False: 250]
  ------------------
  177|    227|        if (!spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (177:13): [True: 227, False: 0]
  ------------------
  178|    227|            index = 2;
  179|      0|        else
  180|      0|            index = 3;
  181|    227|    }
  182|       |
  183|  2.26k|    assert(index < SpvVersionCount);
  184|       |
  185|  2.26k|    return index;
  186|  2.26k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_117MapProfileToIndexE8EProfile:
  191|  2.26k|{
  192|  2.26k|    int index = 0;
  193|       |
  194|  2.26k|    switch (profile) {
  195|      7|    case ENoProfile:            index = 0; break;
  ------------------
  |  Branch (195:5): [True: 7, False: 2.25k]
  ------------------
  196|  1.09k|    case ECoreProfile:          index = 1; break;
  ------------------
  |  Branch (196:5): [True: 1.09k, False: 1.17k]
  ------------------
  197|      0|    case ECompatibilityProfile: index = 2; break;
  ------------------
  |  Branch (197:5): [True: 0, False: 2.26k]
  ------------------
  198|  1.16k|    case EEsProfile:            index = 3; break;
  ------------------
  |  Branch (198:5): [True: 1.16k, False: 1.09k]
  ------------------
  199|      0|    default:                               break;
  ------------------
  |  Branch (199:5): [True: 0, False: 2.26k]
  ------------------
  200|  2.26k|    }
  201|       |
  202|  2.26k|    assert(index < ProfileCount);
  203|       |
  204|  2.26k|    return index;
  205|  2.26k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_116MapSourceToIndexEN7glslang9EShSourceE:
  210|  2.26k|{
  211|  2.26k|    int index = 0;
  212|       |
  213|  2.26k|    switch (source) {
  214|  2.02k|    case EShSourceGlsl: index = 0; break;
  ------------------
  |  Branch (214:5): [True: 2.02k, False: 240]
  ------------------
  215|    240|    case EShSourceHlsl: index = 1; break;
  ------------------
  |  Branch (215:5): [True: 240, False: 2.02k]
  ------------------
  216|      0|    default:                       break;
  ------------------
  |  Branch (216:5): [True: 0, False: 2.26k]
  ------------------
  217|  2.26k|    }
  218|       |
  219|  2.26k|    assert(index < SourceCount);
  220|       |
  221|  2.26k|    return index;
  222|  2.26k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_125AddContextSpecificSymbolsEPK16TBuiltInResourceR9TInfoSinkRN7glslang12TSymbolTableEi8EProfileRKNS5_10SpvVersionE11EShLanguageNS5_9EShSourceE:
  400|  1.03k|{
  401|  1.03k|    std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
  402|       |
  403|  1.03k|    if (builtInParseables == nullptr)
  ------------------
  |  Branch (403:9): [True: 0, False: 1.03k]
  ------------------
  404|      0|        return false;
  405|       |
  406|  1.03k|    builtInParseables->initialize(*resources, version, profile, spvVersion, language);
  407|  1.03k|    if (!InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, source, infoSink, symbolTable))
  ------------------
  |  Branch (407:9): [True: 0, False: 1.03k]
  ------------------
  408|      0|        return false;
  409|  1.03k|    builtInParseables->identifyBuiltIns(version, profile, spvVersion, language, symbolTable, *resources);
  410|       |
  411|  1.03k|    return true;
  412|  1.03k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_122DumpBuiltinSymbolTableER9TInfoSinkRKN7glslang12TSymbolTableE:
  501|    109|{
  502|    109|    infoSink.debug << "BuiltinSymbolTable {\n";
  503|       |
  504|    109|    symbolTable.dump(infoSink, true);
  505|       |
  506|    109|    infoSink.debug << "}\n";
  507|    109|}
ShaderLang.cpp:_ZN12_GLOBAL__N_118CreateParseContextERN7glslang12TSymbolTableERNS0_13TIntermediateEi8EProfileNS0_9EShSourceE11EShLanguageR9TInfoSinkNS0_10SpvVersionEb11EShMessagesbNSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEE:
  113|  15.2k|{
  114|  15.2k|    switch (source) {
  115|  13.1k|    case EShSourceGlsl: {
  ------------------
  |  Branch (115:5): [True: 13.1k, False: 2.04k]
  ------------------
  116|  13.1k|        if (sourceEntryPointName.size() == 0)
  ------------------
  |  Branch (116:13): [True: 13.1k, False: 0]
  ------------------
  117|  13.1k|            intermediate.setEntryPointName("main");
  118|  13.1k|        TString entryPoint = sourceEntryPointName.c_str();
  119|  13.1k|        return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
  120|  13.1k|                                 language, infoSink, forwardCompatible, messages, &entryPoint);
  121|      0|    }
  122|      0|#ifdef ENABLE_HLSL
  123|  2.04k|    case EShSourceHlsl:
  ------------------
  |  Branch (123:5): [True: 2.04k, False: 13.1k]
  ------------------
  124|  2.04k|        return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
  125|  2.04k|                                    language, infoSink, sourceEntryPointName.c_str(), forwardCompatible, messages);
  126|      0|#endif
  127|      0|    default:
  ------------------
  |  Branch (127:5): [True: 0, False: 15.2k]
  ------------------
  128|      0|        infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
  129|      0|        return nullptr;
  130|  15.2k|    }
  131|  15.2k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_111DoFullParseclERN7glslang17TParseContextBaseERNS1_10TPpContextERNS1_13TInputScannerEbRNS1_12TSymbolTableERNS1_13TIntermediateE20EShOptimizationLevel11EShMessages:
 1233|  1.03k|    {
 1234|  1.03k|        bool success = true;
 1235|       |        // Parse the full shader.
 1236|  1.03k|        if (! parseContext.parseShaderStrings(ppContext, fullInput, versionWillBeError))
  ------------------
  |  Branch (1236:13): [True: 1.02k, False: 4]
  ------------------
 1237|  1.02k|            success = false;
 1238|       |
 1239|  1.03k|        if (success && intermediate.getTreeRoot()) {
  ------------------
  |  Branch (1239:13): [True: 4, False: 1.02k]
  |  Branch (1239:24): [True: 4, False: 0]
  ------------------
 1240|      4|            if (optLevel == EShOptNoGeneration)
  ------------------
  |  Branch (1240:17): [True: 0, False: 4]
  ------------------
 1241|      0|                parseContext.infoSink.info.message(EPrefixNone, "No errors.  No code generation or linking was requested.");
 1242|      4|            else
 1243|      4|                success = intermediate.postProcess(intermediate.getTreeRoot(), parseContext.getLanguage());
 1244|  1.02k|        } else if (! success) {
  ------------------
  |  Branch (1244:20): [True: 1.02k, False: 0]
  ------------------
 1245|  1.02k|            parseContext.infoSink.info.prefix(EPrefixError);
 1246|  1.02k|            parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors.  No code generated.\n\n";
 1247|  1.02k|        }
 1248|       |
 1249|  1.03k|        if (messages & EShMsgAST)
  ------------------
  |  Branch (1249:13): [True: 891, False: 142]
  ------------------
 1250|    891|            intermediate.output(parseContext.infoSink, true);
 1251|       |
 1252|  1.03k|        return success;
 1253|  1.03k|    }
_ZN7glslang17TDeferredCompilerC2E11EShLanguageR9TInfoSink:
 1734|  1.23k|    TDeferredCompiler(EShLanguage s, TInfoSink& i) : TCompiler(s, i) { }

_ZNK7glslang5TType16buildMangledNameERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
   57|  29.2M|{
   58|  29.2M|    if (isTensorARM())
  ------------------
  |  Branch (58:9): [True: 27.0k, False: 29.1M]
  ------------------
   59|  27.0k|        mangledName += 'T';
   60|  29.1M|    else if (isMatrix())
  ------------------
  |  Branch (60:14): [True: 595k, False: 28.5M]
  ------------------
   61|   595k|        mangledName += 'm';
   62|  28.5M|    else if (isVector())
  ------------------
  |  Branch (62:14): [True: 13.0M, False: 15.5M]
  ------------------
   63|  13.0M|        mangledName += 'v';
   64|       |
   65|  29.2M|    if (isCoopVecNV())
  ------------------
  |  Branch (65:9): [True: 348k, False: 28.8M]
  ------------------
   66|   348k|        mangledName += "coopvec";
   67|       |
   68|  29.2M|    switch (basicType) {
   69|  4.79M|    case EbtFloat:              mangledName += 'f';      break;
  ------------------
  |  Branch (69:5): [True: 4.79M, False: 24.4M]
  ------------------
   70|  7.05M|    case EbtInt:                mangledName += 'i';      break;
  ------------------
  |  Branch (70:5): [True: 7.05M, False: 22.1M]
  ------------------
   71|  4.61M|    case EbtUint:               mangledName += 'u';      break;
  ------------------
  |  Branch (71:5): [True: 4.61M, False: 24.6M]
  ------------------
   72|   508k|    case EbtBool:               mangledName += 'b';      break;
  ------------------
  |  Branch (72:5): [True: 508k, False: 28.7M]
  ------------------
   73|   725k|    case EbtDouble:             mangledName += 'd';      break;
  ------------------
  |  Branch (73:5): [True: 725k, False: 28.4M]
  ------------------
   74|  1.99M|    case EbtFloat16:            mangledName += "f16";    break;
  ------------------
  |  Branch (74:5): [True: 1.99M, False: 27.2M]
  ------------------
   75|  30.0k|    case EbtBFloat16:           mangledName += "bf16";   break;
  ------------------
  |  Branch (75:5): [True: 30.0k, False: 29.1M]
  ------------------
   76|  18.5k|    case EbtFloatE5M2:          mangledName += "fe5m2";  break;
  ------------------
  |  Branch (76:5): [True: 18.5k, False: 29.1M]
  ------------------
   77|  18.5k|    case EbtFloatE4M3:          mangledName += "fe4m3";  break;
  ------------------
  |  Branch (77:5): [True: 18.5k, False: 29.1M]
  ------------------
   78|  5.72k|    case EbtFloatE2M1:          mangledName += "fe2m1";  break;
  ------------------
  |  Branch (78:5): [True: 5.72k, False: 29.2M]
  ------------------
   79|  4.29k|    case EbtFloatE3M2:          mangledName += "fe3m2";  break;
  ------------------
  |  Branch (79:5): [True: 4.29k, False: 29.2M]
  ------------------
   80|  4.29k|    case EbtFloatE2M3:          mangledName += "fe2m3";  break;
  ------------------
  |  Branch (80:5): [True: 4.29k, False: 29.2M]
  ------------------
   81|  11.4k|    case EbtFloatUE8M0:         mangledName += "fue8m0";  break;
  ------------------
  |  Branch (81:5): [True: 11.4k, False: 29.2M]
  ------------------
   82|  11.4k|    case EbtFloatMXINT8:        mangledName += "fmxint8";break;
  ------------------
  |  Branch (82:5): [True: 11.4k, False: 29.2M]
  ------------------
   83|   706k|    case EbtInt8:               mangledName += "i8";     break;
  ------------------
  |  Branch (83:5): [True: 706k, False: 28.5M]
  ------------------
   84|   678k|    case EbtUint8:              mangledName += "u8";     break;
  ------------------
  |  Branch (84:5): [True: 678k, False: 28.5M]
  ------------------
   85|   821k|    case EbtInt16:              mangledName += "i16";    break;
  ------------------
  |  Branch (85:5): [True: 821k, False: 28.3M]
  ------------------
   86|   757k|    case EbtUint16:             mangledName += "u16";    break;
  ------------------
  |  Branch (86:5): [True: 757k, False: 28.4M]
  ------------------
   87|  1.00M|    case EbtInt64:              mangledName += "i64";    break;
  ------------------
  |  Branch (87:5): [True: 1.00M, False: 28.2M]
  ------------------
   88|  1.19M|    case EbtUint64:             mangledName += "u64";    break;
  ------------------
  |  Branch (88:5): [True: 1.19M, False: 28.0M]
  ------------------
   89|  7.68k|    case EbtAtomicUint:         mangledName += "au";     break;
  ------------------
  |  Branch (89:5): [True: 7.68k, False: 29.2M]
  ------------------
   90|     56|    case EbtAccStruct:          mangledName += "as";     break;
  ------------------
  |  Branch (90:5): [True: 56, False: 29.2M]
  ------------------
   91|     38|    case EbtRayQuery:           mangledName += "rq";     break;
  ------------------
  |  Branch (91:5): [True: 38, False: 29.2M]
  ------------------
   92|      0|    case EbtSpirvType:          mangledName += "spv-t";  break;
  ------------------
  |  Branch (92:5): [True: 0, False: 29.2M]
  ------------------
   93|    113|    case EbtHitObjectNV:        mangledName += "ho";     break;
  ------------------
  |  Branch (93:5): [True: 113, False: 29.2M]
  ------------------
   94|    101|    case EbtHitObjectEXT:       mangledName += "ho";     break;
  ------------------
  |  Branch (94:5): [True: 101, False: 29.2M]
  ------------------
   95|  16.4k|    case EbtTensorLayoutNV:     mangledName += "tl";     break;
  ------------------
  |  Branch (95:5): [True: 16.4k, False: 29.2M]
  ------------------
   96|  8.43k|    case EbtTensorViewNV:       mangledName += "tv";     break;
  ------------------
  |  Branch (96:5): [True: 8.43k, False: 29.2M]
  ------------------
   97|  3.52M|    case EbtSampler:
  ------------------
  |  Branch (97:5): [True: 3.52M, False: 25.6M]
  ------------------
   98|  3.52M|        switch (sampler.type) {
   99|   776k|        case EbtFloat16: mangledName += "f16"; break;
  ------------------
  |  Branch (99:9): [True: 776k, False: 2.74M]
  ------------------
  100|   672k|        case EbtInt:   mangledName += "i"; break;
  ------------------
  |  Branch (100:9): [True: 672k, False: 2.84M]
  ------------------
  101|   672k|        case EbtUint:  mangledName += "u"; break;
  ------------------
  |  Branch (101:9): [True: 672k, False: 2.84M]
  ------------------
  102|   282k|        case EbtInt64:   mangledName += "i64"; break;
  ------------------
  |  Branch (102:9): [True: 282k, False: 3.23M]
  ------------------
  103|   282k|        case EbtUint64:  mangledName += "u64"; break;
  ------------------
  |  Branch (103:9): [True: 282k, False: 3.23M]
  ------------------
  104|   834k|        default: break; // some compilers want this
  ------------------
  |  Branch (104:9): [True: 834k, False: 2.68M]
  ------------------
  105|  3.52M|        }
  106|  3.52M|        if (sampler.isImageClass())
  ------------------
  |  Branch (106:13): [True: 1.31M, False: 2.20M]
  ------------------
  107|  1.31M|            mangledName += "I";  // a normal image or subpass
  108|  2.20M|        else if (sampler.isPureSampler())
  ------------------
  |  Branch (108:18): [True: 74.8k, False: 2.13M]
  ------------------
  109|  74.8k|            mangledName += "p";  // a "pure" sampler
  110|  2.13M|        else if (!sampler.isCombined())
  ------------------
  |  Branch (110:18): [True: 99.0k, False: 2.03M]
  ------------------
  111|  99.0k|            mangledName += "t";  // a "pure" texture
  112|  2.03M|        else
  113|  2.03M|            mangledName += "s";  // traditional combined sampler
  114|  3.52M|        if (sampler.isArrayed())
  ------------------
  |  Branch (114:13): [True: 1.20M, False: 2.31M]
  ------------------
  115|  1.20M|            mangledName += "A";
  116|  3.52M|        if (sampler.isShadow())
  ------------------
  |  Branch (116:13): [True: 385k, False: 3.13M]
  ------------------
  117|   385k|            mangledName += "S";
  118|  3.52M|        if (sampler.isExternal())
  ------------------
  |  Branch (118:13): [True: 120, False: 3.52M]
  ------------------
  119|    120|            mangledName += "E";
  120|  3.52M|        if (sampler.isYuv())
  ------------------
  |  Branch (120:13): [True: 320, False: 3.52M]
  ------------------
  121|    320|            mangledName += "Y";
  122|  3.52M|        switch (sampler.dim) {
  123|  1.62M|        case Esd2D:       mangledName += "2";  break;
  ------------------
  |  Branch (123:9): [True: 1.62M, False: 1.89M]
  ------------------
  124|   386k|        case Esd3D:       mangledName += "3";  break;
  ------------------
  |  Branch (124:9): [True: 386k, False: 3.13M]
  ------------------
  125|   632k|        case EsdCube:     mangledName += "C";  break;
  ------------------
  |  Branch (125:9): [True: 632k, False: 2.88M]
  ------------------
  126|   425k|        case Esd1D:       mangledName += "1";  break;
  ------------------
  |  Branch (126:9): [True: 425k, False: 3.09M]
  ------------------
  127|   222k|        case EsdRect:     mangledName += "R2"; break;
  ------------------
  |  Branch (127:9): [True: 222k, False: 3.29M]
  ------------------
  128|   155k|        case EsdBuffer:   mangledName += "B";  break;
  ------------------
  |  Branch (128:9): [True: 155k, False: 3.36M]
  ------------------
  129|  2.88k|        case EsdSubpass:  mangledName += "P";  break;
  ------------------
  |  Branch (129:9): [True: 2.88k, False: 3.51M]
  ------------------
  130|  74.8k|        default: break; // some compilers want this
  ------------------
  |  Branch (130:9): [True: 74.8k, False: 3.44M]
  ------------------
  131|  3.52M|        }
  132|       |
  133|  3.52M|#ifdef ENABLE_HLSL
  134|  3.52M|        if (sampler.hasReturnStruct()) {
  ------------------
  |  Branch (134:13): [True: 0, False: 3.52M]
  ------------------
  135|       |            // Name mangle for sampler return struct uses struct table index.
  136|      0|            mangledName += "-tx-struct";
  137|       |
  138|      0|            char text[16]; // plenty enough space for the small integers.
  139|      0|            snprintf(text, sizeof(text), "%u-", sampler.getStructReturnIndex());
  140|      0|            mangledName += text;
  141|  3.52M|        } else {
  142|  3.52M|            switch (sampler.getVectorSize()) {
  ------------------
  |  Branch (142:21): [True: 3.52M, False: 0]
  ------------------
  143|  18.7k|            case 1: mangledName += "1"; break;
  ------------------
  |  Branch (143:13): [True: 18.7k, False: 3.50M]
  ------------------
  144|  54.7k|            case 2: mangledName += "2"; break;
  ------------------
  |  Branch (144:13): [True: 54.7k, False: 3.46M]
  ------------------
  145|  7.56k|            case 3: mangledName += "3"; break;
  ------------------
  |  Branch (145:13): [True: 7.56k, False: 3.51M]
  ------------------
  146|  3.44M|            case 4: break; // default to prior name mangle behavior
  ------------------
  |  Branch (146:13): [True: 3.44M, False: 81.0k]
  ------------------
  147|  3.52M|            }
  148|  3.52M|        }
  149|  3.52M|#endif
  150|       |
  151|  3.52M|        if (sampler.isMultiSample())
  ------------------
  |  Branch (151:13): [True: 246k, False: 3.27M]
  ------------------
  152|   246k|            mangledName += "M";
  153|  3.52M|        break;
  154|  5.40k|    case EbtStruct:
  ------------------
  |  Branch (154:5): [True: 5.40k, False: 29.2M]
  ------------------
  155|  5.40k|    case EbtBlock:
  ------------------
  |  Branch (155:5): [True: 0, False: 29.2M]
  ------------------
  156|  5.40k|        if (basicType == EbtStruct)
  ------------------
  |  Branch (156:13): [True: 5.40k, False: 0]
  ------------------
  157|  5.40k|            mangledName += "struct-";
  158|      0|        else
  159|      0|            mangledName += "block-";
  160|  5.40k|        if (typeName)
  ------------------
  |  Branch (160:13): [True: 5.40k, False: 0]
  ------------------
  161|  5.40k|            mangledName += *typeName;
  162|  32.4k|        for (unsigned int i = 0; i < structure->size(); ++i) {
  ------------------
  |  Branch (162:34): [True: 27.0k, False: 5.40k]
  ------------------
  163|  27.0k|            if ((*structure)[i].type->getBasicType() == EbtVoid)
  ------------------
  |  Branch (163:17): [True: 0, False: 27.0k]
  ------------------
  164|      0|                continue;
  165|  27.0k|            mangledName += '-';
  166|  27.0k|            (*structure)[i].type->buildMangledName(mangledName);
  167|  27.0k|        }
  168|  5.40k|        break;
  169|   698k|    default:
  ------------------
  |  Branch (169:5): [True: 698k, False: 28.5M]
  ------------------
  170|   698k|        break;
  171|  29.2M|    }
  172|       |
  173|  29.2M|    if (getVectorSize() > 0)
  ------------------
  |  Branch (173:9): [True: 28.6M, False: 595k]
  ------------------
  174|  28.6M|        mangledName += static_cast<char>('0' + getVectorSize());
  175|   595k|    else {
  176|   595k|        mangledName += static_cast<char>('0' + getMatrixCols());
  177|   595k|        mangledName += static_cast<char>('0' + getMatrixRows());
  178|   595k|    }
  179|       |
  180|  29.2M|    if (typeParameters) {
  ------------------
  |  Branch (180:9): [True: 8.59k, False: 29.2M]
  ------------------
  181|  8.59k|        const int maxSize = 11;
  182|  8.59k|        char buf[maxSize];
  183|  17.1k|        for (int i = 0; i < typeParameters->arraySizes->getNumDims(); ++i) {
  ------------------
  |  Branch (183:25): [True: 8.59k, False: 8.59k]
  ------------------
  184|  8.59k|            if (typeParameters->arraySizes->getDimNode(i)) {
  ------------------
  |  Branch (184:17): [True: 0, False: 8.59k]
  ------------------
  185|      0|                if (typeParameters->arraySizes->getDimNode(i)->getAsSymbolNode())
  ------------------
  |  Branch (185:21): [True: 0, False: 0]
  ------------------
  186|      0|                    snprintf(buf, maxSize, "s%lld", typeParameters->arraySizes->getDimNode(i)->getAsSymbolNode()->getId());
  187|      0|                else
  188|      0|                    snprintf(buf, maxSize, "s%p", typeParameters->arraySizes->getDimNode(i));
  189|      0|            } else
  190|  8.59k|                snprintf(buf, maxSize, "%d", typeParameters->arraySizes->getDimSize(i));
  191|  8.59k|            mangledName += '<';
  192|  8.59k|            mangledName += buf;
  193|  8.59k|            mangledName += '>';
  194|  8.59k|        }
  195|  8.59k|    }
  196|       |
  197|  29.2M|    if (arraySizes) {
  ------------------
  |  Branch (197:9): [True: 630k, False: 28.5M]
  ------------------
  198|   630k|        const int maxSize = 11;
  199|   630k|        char buf[maxSize];
  200|  1.26M|        for (int i = 0; i < arraySizes->getNumDims(); ++i) {
  ------------------
  |  Branch (200:25): [True: 630k, False: 630k]
  ------------------
  201|   630k|            if (arraySizes->getDimNode(i)) {
  ------------------
  |  Branch (201:17): [True: 0, False: 630k]
  ------------------
  202|      0|                if (arraySizes->getDimNode(i)->getAsSymbolNode())
  ------------------
  |  Branch (202:21): [True: 0, False: 0]
  ------------------
  203|      0|                    snprintf(buf, maxSize, "s%lld", arraySizes->getDimNode(i)->getAsSymbolNode()->getId());
  204|      0|                else
  205|      0|                    snprintf(buf, maxSize, "s%p", (void*)(arraySizes->getDimNode(i)));
  206|      0|            } else
  207|   630k|                snprintf(buf, maxSize, "%d", arraySizes->getDimSize(i));
  208|   630k|            mangledName += '[';
  209|   630k|            mangledName += buf;
  210|   630k|            mangledName += ']';
  211|   630k|        }
  212|   630k|    }
  213|  29.2M|}
_ZNK7glslang7TSymbol14dumpExtensionsER9TInfoSink:
  220|   431k|{
  221|   431k|    int numExtensions = getNumExtensions();
  222|   431k|    if (numExtensions) {
  ------------------
  |  Branch (222:9): [True: 11.6k, False: 419k]
  ------------------
  223|  11.6k|        infoSink.debug << " <";
  224|       |
  225|  23.3k|        for (int i = 0; i < numExtensions; i++)
  ------------------
  |  Branch (225:25): [True: 11.6k, False: 11.6k]
  ------------------
  226|  11.6k|            infoSink.debug << getExtensions()[i] << ",";
  227|       |
  228|  11.6k|        infoSink.debug << ">";
  229|  11.6k|    }
  230|   431k|}
_ZNK7glslang9TVariable4dumpER9TInfoSinkb:
  233|    436|{
  234|    436|    if (complete) {
  ------------------
  |  Branch (234:9): [True: 436, False: 0]
  ------------------
  235|    436|        infoSink.debug << getName().c_str() << ": " << type.getCompleteString();
  236|    436|        dumpExtensions(infoSink);
  237|    436|    } else {
  238|      0|        infoSink.debug << getName().c_str() << ": " << type.getStorageQualifierString() << " "
  239|      0|                       << type.getBasicTypeString();
  240|       |
  241|      0|        if (type.isArray())
  ------------------
  |  Branch (241:13): [True: 0, False: 0]
  ------------------
  242|      0|            infoSink.debug << "[0]";
  243|      0|    }
  244|       |
  245|    436|    infoSink.debug << "\n";
  246|    436|}
_ZNK7glslang9TFunction4dumpER9TInfoSinkb:
  249|   430k|{
  250|   430k|    if (complete) {
  ------------------
  |  Branch (250:9): [True: 430k, False: 0]
  ------------------
  251|   430k|        infoSink.debug << getName().c_str() << ": " << returnType.getCompleteString() << " " << getName().c_str()
  252|   430k|                       << "(";
  253|       |
  254|   430k|        int numParams = getParamCount();
  255|  1.41M|        for (int i = 0; i < numParams; i++) {
  ------------------
  |  Branch (255:25): [True: 979k, False: 430k]
  ------------------
  256|   979k|            const TParameter &param = parameters[i];
  257|   979k|            infoSink.debug << param.type->getCompleteString() << " "
  258|   979k|                           << (param.type->isStruct() ? "of " + param.type->getTypeName() + " " : "")
  ------------------
  |  Branch (258:32): [True: 24, False: 979k]
  ------------------
  259|   979k|                           << (param.name ? *param.name : "") << (i < numParams - 1 ? "," : "");
  ------------------
  |  Branch (259:32): [True: 14.9k, False: 964k]
  |  Branch (259:67): [True: 552k, False: 427k]
  ------------------
  260|   979k|        }
  261|       |
  262|   430k|        infoSink.debug << ")";
  263|   430k|        dumpExtensions(infoSink);
  264|   430k|    } else {
  265|      0|        infoSink.debug << getName().c_str() << ": " << returnType.getBasicTypeString() << " "
  266|      0|                       << getMangledName().c_str() << "n";
  267|      0|    }
  268|       |
  269|   430k|    infoSink.debug << "\n";
  270|   430k|}
_ZNK7glslang11TAnonMember4dumpER9TInfoSinkb:
  273|      8|{
  274|      8|    TInfoSink.debug << "anonymous member " << getMemberNumber() << " of " << getAnonContainer().getName().c_str()
  275|      8|                    << "\n";
  276|      8|}
_ZNK7glslang17TSymbolTableLevel4dumpER9TInfoSinkb:
  279|    327|{
  280|    327|    tLevel::const_iterator it;
  281|   431k|    for (it = level.begin(); it != level.end(); ++it)
  ------------------
  |  Branch (281:30): [True: 431k, False: 327]
  ------------------
  282|   431k|        (*it).second->dump(infoSink, complete);
  283|    327|}
_ZNK7glslang12TSymbolTable4dumpER9TInfoSinkb:
  286|    109|{
  287|    436|    for (int level = currentLevel(); level >= 0; --level) {
  ------------------
  |  Branch (287:38): [True: 327, False: 109]
  ------------------
  288|    327|        infoSink.debug << "LEVEL " << level << "\n";
  289|    327|        table[level]->dump(infoSink, complete);
  290|    327|    }
  291|    109|}
_ZN7glslang9TFunctionD2Ev:
  297|  22.2M|{
  298|  78.3M|    for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i)
  ------------------
  |  Branch (298:55): [True: 56.1M, False: 22.2M]
  ------------------
  299|  56.1M|        delete (*i).type;
  300|  22.2M|}
_ZN7glslang17TSymbolTableLevelD2Ev:
  306|  26.9k|{
  307|  23.0M|    for (tLevel::iterator it = level.begin(); it != level.end(); ++it) {
  ------------------
  |  Branch (307:47): [True: 22.9M, False: 26.9k]
  ------------------
  308|  22.9M|        const TString& name = it->first;
  309|  22.9M|        auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(),
  310|  22.9M|                                      [&name](const std::pair<TString, TString>& i) { return i.first == name; });
  311|  22.9M|        if (retargetIter == retargetedSymbols.end())
  ------------------
  |  Branch (311:13): [True: 22.9M, False: 8]
  ------------------
  312|  22.9M|            delete (*it).second;
  313|  22.9M|    }
  314|       |
  315|       |
  316|  26.9k|    delete [] defaultPrecision;
  317|  26.9k|}
_ZN7glslang17TSymbolTableLevel16relateToOperatorEPKcNS_9TOperatorE:
  324|  8.50M|{
  325|  8.50M|    tLevel::const_iterator candidate = level.lower_bound(name);
  326|  97.4M|    while (candidate != level.end()) {
  ------------------
  |  Branch (326:12): [True: 95.0M, False: 2.42M]
  ------------------
  327|  95.0M|        const TString& candidateName = (*candidate).first;
  328|  95.0M|        TString::size_type parenAt = candidateName.find_first_of('(');
  329|  95.0M|        if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) {
  ------------------
  |  Branch (329:13): [True: 94.2M, False: 758k]
  |  Branch (329:46): [True: 88.9M, False: 5.33M]
  ------------------
  330|  88.9M|            TFunction* function = (*candidate).second->getAsFunction();
  331|  88.9M|            function->relateToOperator(op);
  332|  88.9M|        } else
  333|  6.08M|            break;
  334|  88.9M|        ++candidate;
  335|  88.9M|    }
  336|  8.50M|}
_ZN7glslang17TSymbolTableLevel21setFunctionExtensionsEPKciPKS2_:
  341|   493k|{
  342|   493k|    tLevel::const_iterator candidate = level.lower_bound(name);
  343|  4.81M|    while (candidate != level.end()) {
  ------------------
  |  Branch (343:12): [True: 4.77M, False: 42.1k]
  ------------------
  344|  4.77M|        const TString& candidateName = (*candidate).first;
  345|  4.77M|        TString::size_type parenAt = candidateName.find_first_of('(');
  346|  4.77M|        if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) {
  ------------------
  |  Branch (346:13): [True: 4.74M, False: 31.1k]
  |  Branch (346:46): [True: 4.32M, False: 419k]
  ------------------
  347|  4.32M|            TSymbol* symbol = candidate->second;
  348|  4.32M|            symbol->setExtensions(num, extensions);
  349|  4.32M|        } else
  350|   450k|            break;
  351|  4.32M|        ++candidate;
  352|  4.32M|    }
  353|   493k|}
_ZN7glslang17TSymbolTableLevel29setFunctionExtensionsCallbackEPKcRKNSt3__18functionIFNS3_6vectorIS2_NS3_9allocatorIS2_EEEES2_EEE:
  357|  18.8k|{
  358|  18.8k|    tLevel::const_iterator candidate = level.lower_bound(name);
  359|   315k|    while (candidate != level.end()) {
  ------------------
  |  Branch (359:12): [True: 315k, False: 0]
  ------------------
  360|   315k|        const TString& candidateName = (*candidate).first;
  361|   315k|        TString::size_type parenAt = candidateName.find_first_of('(');
  362|   315k|        if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) {
  ------------------
  |  Branch (362:13): [True: 310k, False: 4.95k]
  |  Branch (362:46): [True: 296k, False: 13.8k]
  ------------------
  363|   296k|            TSymbol* symbol = candidate->second;
  364|       |
  365|   296k|            auto exts = func(candidateName.c_str());
  366|   296k|            symbol->setExtensions(exts.size(), exts.data());
  367|   296k|        } else
  368|  18.8k|            break;
  369|   296k|        ++candidate;
  370|   296k|    }
  371|  18.8k|}
_ZN7glslang17TSymbolTableLevel8readOnlyEv:
  387|  21.9k|{
  388|  89.0M|    for (tLevel::iterator it = level.begin(); it != level.end(); ++it)
  ------------------
  |  Branch (388:47): [True: 89.0M, False: 21.9k]
  ------------------
  389|  89.0M|        (*it).second->makeReadOnly();
  390|  21.9k|}
_ZN7glslang7TSymbolC2ERKS0_:
  396|  11.1M|{
  397|  11.1M|    name = NewPoolTString(copyOf.name->c_str());
  398|  11.1M|    mangledName = NewPoolTString(copyOf.mangledName->c_str());
  399|  11.1M|    uniqueId = copyOf.uniqueId;
  400|  11.1M|    writable = true;
  401|  11.1M|}
_ZN7glslang9TVariableC2ERKS0_:
  403|   344k|TVariable::TVariable(const TVariable& copyOf) : TSymbol(copyOf)
  404|   344k|{
  405|   344k|    type.deepCopy(copyOf.type);
  406|   344k|    userType = copyOf.userType;
  407|       |
  408|       |    // we don't support specialization-constant subtrees in cloned tables, only extensions
  409|   344k|    constSubtree = nullptr;
  410|   344k|    extensions = nullptr;
  411|   344k|    memberExtensions = nullptr;
  412|   344k|    if (copyOf.getNumExtensions() > 0)
  ------------------
  |  Branch (412:9): [True: 192k, False: 151k]
  ------------------
  413|   192k|        setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
  414|   344k|    if (copyOf.hasMemberExtensions()) {
  ------------------
  |  Branch (414:9): [True: 4.33k, False: 339k]
  ------------------
  415|  22.8k|        for (int m = 0; m < (int)copyOf.type.getStruct()->size(); ++m) {
  ------------------
  |  Branch (415:25): [True: 18.4k, False: 4.33k]
  ------------------
  416|  18.4k|            if (copyOf.getNumMemberExtensions(m) > 0)
  ------------------
  |  Branch (416:17): [True: 13.3k, False: 5.11k]
  ------------------
  417|  13.3k|                setMemberExtensions(m, copyOf.getNumMemberExtensions(m), copyOf.getMemberExtensions(m));
  418|  18.4k|        }
  419|  4.33k|    }
  420|       |
  421|   344k|    if (! copyOf.constArray.empty()) {
  ------------------
  |  Branch (421:9): [True: 76.0k, False: 267k]
  ------------------
  422|       |        assert(! copyOf.type.isStruct());
  423|  76.0k|        TConstUnionArray newArray(copyOf.constArray, 0, copyOf.constArray.size());
  424|  76.0k|        constArray = newArray;
  425|  76.0k|    }
  426|   344k|}
_ZNK7glslang9TVariable5cloneEv:
  429|   344k|{
  430|   344k|    TVariable *variable = new TVariable(*this);
  431|       |
  432|   344k|    return variable;
  433|   344k|}
_ZN7glslang9TFunctionC2ERKS0_:
  435|  10.7M|TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf)
  436|  10.7M|{
  437|  37.8M|    for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) {
  ------------------
  |  Branch (437:30): [True: 27.1M, False: 10.7M]
  ------------------
  438|  27.1M|        TParameter param{};
  439|  27.1M|        parameters.push_back(param);
  440|  27.1M|        (void)parameters.back().copyParam(copyOf.parameters[i]);
  441|  27.1M|    }
  442|       |
  443|  10.7M|    extensions = nullptr;
  444|  10.7M|    if (copyOf.getNumExtensions() > 0)
  ------------------
  |  Branch (444:9): [True: 4.50M, False: 6.25M]
  ------------------
  445|  4.50M|        setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
  446|  10.7M|    returnType.deepCopy(copyOf.returnType);
  447|  10.7M|    mangledName = copyOf.mangledName;
  448|  10.7M|    op = copyOf.op;
  449|  10.7M|    defined = copyOf.defined;
  450|  10.7M|    prototyped = copyOf.prototyped;
  451|  10.7M|    implicitThis = copyOf.implicitThis;
  452|  10.7M|    variadic = copyOf.variadic;
  453|  10.7M|    illegalImplicitThis = copyOf.illegalImplicitThis;
  454|  10.7M|    defaultParamCount = copyOf.defaultParamCount;
  455|  10.7M|    spirvInst = copyOf.spirvInst;
  456|  10.7M|    functionControl = copyOf.functionControl;
  457|  10.7M|}
_ZNK7glslang9TFunction5cloneEv:
  460|  10.7M|{
  461|  10.7M|    TFunction *function = new TFunction(*this);
  462|       |
  463|  10.7M|    return function;
  464|  10.7M|}
_ZNK7glslang17TSymbolTableLevel5cloneEv:
  477|  11.7k|{
  478|  11.7k|    TSymbolTableLevel *symTableLevel = new TSymbolTableLevel();
  479|  11.7k|    symTableLevel->anonId = anonId;
  480|  11.7k|    symTableLevel->thisLevel = thisLevel;
  481|  11.7k|    symTableLevel->retargetedSymbols.clear();
  482|  11.7k|    for (auto &s : retargetedSymbols) {
  ------------------
  |  Branch (482:18): [True: 4, False: 11.7k]
  ------------------
  483|      4|        symTableLevel->retargetedSymbols.push_back({s.first, s.second});
  484|      4|    }
  485|  11.7k|    std::vector<bool> containerCopied(anonId, false);
  486|  11.7k|    tLevel::const_iterator iter;
  487|  11.1M|    for (iter = level.begin(); iter != level.end(); ++iter) {
  ------------------
  |  Branch (487:32): [True: 11.1M, False: 11.7k]
  ------------------
  488|  11.1M|        const TAnonMember* anon = iter->second->getAsAnonMember();
  489|  11.1M|        if (anon) {
  ------------------
  |  Branch (489:13): [True: 7.72k, False: 11.1M]
  ------------------
  490|       |            // Insert all the anonymous members of this same container at once,
  491|       |            // avoid inserting the remaining members in the future, once this has been done,
  492|       |            // allowing them to all be part of the same new container.
  493|  7.72k|            if (! containerCopied[anon->getAnonId()]) {
  ------------------
  |  Branch (493:17): [True: 2.67k, False: 5.04k]
  ------------------
  494|  2.67k|                TVariable* container = anon->getAnonContainer().clone();
  495|  2.67k|                container->changeName(NewPoolTString(""));
  496|       |                // insert the container and all its members
  497|  2.67k|                symTableLevel->insert(*container, false);
  498|  2.67k|                containerCopied[anon->getAnonId()] = true;
  499|  2.67k|            }
  500|  11.1M|        } else {
  501|  11.1M|            const TString& name = iter->first;
  502|  11.1M|            auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(),
  503|  11.1M|                                          [&name](const std::pair<TString, TString>& i) { return i.first == name; });
  504|  11.1M|            if (retargetIter != retargetedSymbols.end())
  ------------------
  |  Branch (504:17): [True: 4, False: 11.1M]
  ------------------
  505|      4|                continue;
  506|  11.1M|            symTableLevel->insert(*iter->second->clone(), false);
  507|  11.1M|        }
  508|  11.1M|    }
  509|       |    // Now point retargeted symbols to the newly created versions of them
  510|  11.7k|    for (auto &s : retargetedSymbols) {
  ------------------
  |  Branch (510:18): [True: 4, False: 11.7k]
  ------------------
  511|      4|        TSymbol* sym = symTableLevel->find(s.second);
  512|      4|        if (!sym)
  ------------------
  |  Branch (512:13): [True: 0, False: 4]
  ------------------
  513|      0|            continue;
  514|      4|        symTableLevel->insert(s.first, sym);
  515|      4|    }
  516|       |
  517|  11.7k|    return symTableLevel;
  518|  11.7k|}
_ZN7glslang12TSymbolTable9copyTableERKS0_:
  521|  11.7k|{
  522|  11.7k|    assert(adoptedLevels == copyOf.adoptedLevels);
  523|       |
  524|  11.7k|    uniqueId = copyOf.uniqueId;
  525|  11.7k|    noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations;
  526|  11.7k|    separateNameSpaces = copyOf.separateNameSpaces;
  527|  23.5k|    for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i)
  ------------------
  |  Branch (527:49): [True: 11.7k, False: 11.7k]
  ------------------
  528|  11.7k|        table.push_back(copyOf.table[i]->clone());
  529|  11.7k|}
SymbolTable.cpp:_ZZN7glslang17TSymbolTableLevelD1EvENK3$_0clERKNSt3__14pairINS2_12basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEES9_EE:
  310|    880|                                      [&name](const std::pair<TString, TString>& i) { return i.first == name; });
SymbolTable.cpp:_ZZNK7glslang17TSymbolTableLevel5cloneEvENK3$_0clERKNSt3__14pairINS2_12basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEES9_EE:
  503|    440|                                          [&name](const std::pair<TString, TString>& i) { return i.first == name; });

_ZN7glslang14TParseVersions27initializeExtensionBehaviorEv:
  163|  1.03k|{
  164|  1.03k|    typedef struct {
  165|  1.03k|        const char *const extensionName;
  166|  1.03k|        EShTargetLanguageVersion minSpvVersion;
  167|  1.03k|    } extensionData;
  168|       |
  169|  1.03k|    const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4},
  170|  1.03k|                                   {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4},
  171|  1.03k|                                   {E_GL_EXT_mesh_shader, EShTargetSpv_1_4},
  172|  1.03k|                                   {E_GL_NV_cooperative_matrix2, EShTargetSpv_1_6},
  173|  1.03k|                                   {E_GL_NV_cooperative_matrix_decode_vector, EShTargetSpv_1_6},
  174|  1.03k|                                   {E_GL_EXT_cooperative_matrix_maintenance1, EShTargetSpv_1_3},
  175|  1.03k|                                 };
  176|       |
  177|  7.23k|    for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) {
  ------------------
  |  Branch (177:25): [True: 6.19k, False: 1.03k]
  ------------------
  178|       |        // Add only extensions which require > spv1.0 to save space in map
  179|  6.19k|        if (exts[ii].minSpvVersion > EShTargetSpv_1_0) {
  ------------------
  |  Branch (179:13): [True: 6.19k, False: 0]
  ------------------
  180|  6.19k|            extensionMinSpv[exts[ii].extensionName] = exts[ii].minSpvVersion;
  181|  6.19k|        }
  182|  6.19k|    }
  183|       |
  184|  1.03k|    extensionBehavior[E_GL_OES_texture_3D]                   = EBhDisable;
  185|  1.03k|    extensionBehavior[E_GL_OES_standard_derivatives]         = EBhDisable;
  186|  1.03k|    extensionBehavior[E_GL_EXT_frag_depth]                   = EBhDisable;
  187|  1.03k|    extensionBehavior[E_GL_OES_EGL_image_external]           = EBhDisable;
  188|  1.03k|    extensionBehavior[E_GL_OES_EGL_image_external_essl3]     = EBhDisable;
  189|  1.03k|    extensionBehavior[E_GL_EXT_YUV_target]                   = EBhDisable;
  190|  1.03k|    extensionBehavior[E_GL_EXT_shader_texture_lod]           = EBhDisable;
  191|  1.03k|    extensionBehavior[E_GL_EXT_shadow_samplers]              = EBhDisable;
  192|  1.03k|    extensionBehavior[E_GL_ARB_texture_rectangle]            = EBhDisable;
  193|  1.03k|    extensionBehavior[E_GL_3DL_array_objects]                = EBhDisable;
  194|  1.03k|    extensionBehavior[E_GL_ARB_shading_language_420pack]     = EBhDisable;
  195|  1.03k|    extensionBehavior[E_GL_ARB_texture_gather]               = EBhDisable;
  196|  1.03k|    extensionBehavior[E_GL_ARB_gpu_shader5]                  = EBhDisable;
  197|  1.03k|    extensionBehavior[E_GL_ARB_separate_shader_objects]      = EBhDisable;
  198|  1.03k|    extensionBehavior[E_GL_ARB_compute_shader]               = EBhDisable;
  199|  1.03k|    extensionBehavior[E_GL_ARB_tessellation_shader]          = EBhDisable;
  200|  1.03k|    extensionBehavior[E_GL_ARB_enhanced_layouts]             = EBhDisable;
  201|  1.03k|    extensionBehavior[E_GL_ARB_texture_cube_map_array]       = EBhDisable;
  202|  1.03k|    extensionBehavior[E_GL_ARB_texture_multisample]          = EBhDisable;
  203|  1.03k|    extensionBehavior[E_GL_ARB_shader_texture_lod]           = EBhDisable;
  204|  1.03k|    extensionBehavior[E_GL_ARB_explicit_attrib_location]     = EBhDisable;
  205|  1.03k|    extensionBehavior[E_GL_ARB_explicit_uniform_location]    = EBhDisable;
  206|  1.03k|    extensionBehavior[E_GL_ARB_shader_image_load_store]      = EBhDisable;
  207|  1.03k|    extensionBehavior[E_GL_ARB_shader_atomic_counters]       = EBhDisable;
  208|  1.03k|    extensionBehavior[E_GL_ARB_shader_atomic_counter_ops]    = EBhDisable;
  209|  1.03k|    extensionBehavior[E_GL_ARB_shader_draw_parameters]       = EBhDisable;
  210|  1.03k|    extensionBehavior[E_GL_ARB_shader_group_vote]            = EBhDisable;
  211|  1.03k|    extensionBehavior[E_GL_ARB_derivative_control]           = EBhDisable;
  212|  1.03k|    extensionBehavior[E_GL_ARB_shader_texture_image_samples] = EBhDisable;
  213|  1.03k|    extensionBehavior[E_GL_ARB_viewport_array]               = EBhDisable;
  214|  1.03k|    extensionBehavior[E_GL_ARB_gpu_shader_int64]             = EBhDisable;
  215|  1.03k|    extensionBehavior[E_GL_ARB_gpu_shader_fp64]              = EBhDisable;
  216|  1.03k|    extensionBehavior[E_GL_ARB_shader_ballot]                = EBhDisable;
  217|  1.03k|    extensionBehavior[E_GL_ARB_sparse_texture2]              = EBhDisable;
  218|  1.03k|    extensionBehavior[E_GL_ARB_sparse_texture_clamp]         = EBhDisable;
  219|  1.03k|    extensionBehavior[E_GL_ARB_shader_stencil_export]        = EBhDisable;
  220|       |//    extensionBehavior[E_GL_ARB_cull_distance]                = EBhDisable;    // present for 4.5, but need extension control over block members
  221|  1.03k|    extensionBehavior[E_GL_ARB_post_depth_coverage]          = EBhDisable;
  222|  1.03k|    extensionBehavior[E_GL_ARB_shader_viewport_layer_array]  = EBhDisable;
  223|  1.03k|    extensionBehavior[E_GL_ARB_fragment_shader_interlock]    = EBhDisable;
  224|  1.03k|    extensionBehavior[E_GL_ARB_shader_clock]                 = EBhDisable;
  225|  1.03k|    extensionBehavior[E_GL_ARB_uniform_buffer_object]        = EBhDisable;
  226|  1.03k|    extensionBehavior[E_GL_ARB_sample_shading]               = EBhDisable;
  227|  1.03k|    extensionBehavior[E_GL_ARB_shader_bit_encoding]          = EBhDisable;
  228|  1.03k|    extensionBehavior[E_GL_ARB_shader_image_size]            = EBhDisable;
  229|  1.03k|    extensionBehavior[E_GL_ARB_shader_storage_buffer_object] = EBhDisable;
  230|  1.03k|    extensionBehavior[E_GL_ARB_shading_language_packing]     = EBhDisable;
  231|  1.03k|    extensionBehavior[E_GL_ARB_texture_query_lod]            = EBhDisable;
  232|  1.03k|    extensionBehavior[E_GL_ARB_vertex_attrib_64bit]          = EBhDisable;
  233|  1.03k|    extensionBehavior[E_GL_NV_gpu_shader5]                   = EBhDisable;
  234|  1.03k|    extensionBehavior[E_GL_ARB_draw_instanced]               = EBhDisable;
  235|  1.03k|    extensionBehavior[E_GL_ARB_bindless_texture]             = EBhDisable;
  236|  1.03k|    extensionBehavior[E_GL_ARB_fragment_coord_conventions]   = EBhDisable;
  237|  1.03k|    extensionBehavior[E_GL_ARB_conservative_depth]           = EBhDisable;
  238|       |
  239|       |
  240|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
  241|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
  242|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_arithmetic]       = EBhDisable;
  243|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_ballot]           = EBhDisable;
  244|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle]          = EBhDisable;
  245|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable;
  246|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_rotate]           = EBhDisable;
  247|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_clustered]        = EBhDisable;
  248|  1.03k|    extensionBehavior[E_GL_KHR_shader_subgroup_quad]             = EBhDisable;
  249|  1.03k|    extensionBehavior[E_GL_KHR_memory_scope_semantics]           = EBhDisable;
  250|       |
  251|  1.03k|    extensionBehavior[E_GL_EXT_shader_atomic_int64]              = EBhDisable;
  252|       |
  253|  1.03k|    extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
  254|  1.03k|    extensionBehavior[E_GL_EXT_shader_image_load_formatted]             = EBhDisable;
  255|  1.03k|    extensionBehavior[E_GL_EXT_post_depth_coverage]                     = EBhDisable;
  256|  1.03k|    extensionBehavior[E_GL_EXT_control_flow_attributes]                 = EBhDisable;
  257|  1.03k|    extensionBehavior[E_GL_EXT_nonuniform_qualifier]                    = EBhDisable;
  258|  1.03k|    extensionBehavior[E_GL_EXT_samplerless_texture_functions]           = EBhDisable;
  259|  1.03k|    extensionBehavior[E_GL_EXT_scalar_block_layout]                     = EBhDisable;
  260|  1.03k|    extensionBehavior[E_GL_EXT_fragment_invocation_density]             = EBhDisable;
  261|  1.03k|    extensionBehavior[E_GL_EXT_buffer_reference]                        = EBhDisable;
  262|  1.03k|    extensionBehavior[E_GL_EXT_buffer_reference2]                       = EBhDisable;
  263|  1.03k|    extensionBehavior[E_GL_EXT_buffer_reference_uvec2]                  = EBhDisable;
  264|  1.03k|    extensionBehavior[E_GL_EXT_demote_to_helper_invocation]             = EBhDisable;
  265|  1.03k|    extensionBehavior[E_GL_EXT_debug_printf]                            = EBhDisable;
  266|       |
  267|  1.03k|    extensionBehavior[E_GL_EXT_shader_16bit_storage]                    = EBhDisable;
  268|  1.03k|    extensionBehavior[E_GL_EXT_shader_8bit_storage]                     = EBhDisable;
  269|  1.03k|    extensionBehavior[E_GL_EXT_subgroup_uniform_control_flow]           = EBhDisable;
  270|  1.03k|    extensionBehavior[E_GL_EXT_maximal_reconvergence]                   = EBhDisable;
  271|       |
  272|  1.03k|    extensionBehavior[E_GL_EXT_fragment_shader_barycentric]             = EBhDisable;
  273|  1.03k|    extensionBehavior[E_GL_EXT_expect_assume]                           = EBhDisable;
  274|       |
  275|  1.03k|    extensionBehavior[E_GL_EXT_control_flow_attributes2]                = EBhDisable;
  276|  1.03k|    extensionBehavior[E_GL_EXT_function_control_attributes]             = EBhDisable;
  277|  1.03k|    extensionBehavior[E_GL_EXT_spec_constant_composites]                = EBhDisable;
  278|  1.03k|    extensionBehavior[E_GL_EXT_abort]                                   = EBhDisable;
  279|  1.03k|    extensionBehavior[E_GL_EXT_split_barrier]                           = EBhDisable;
  280|       |
  281|  1.03k|    extensionBehavior[E_GL_KHR_cooperative_matrix]                      = EBhDisable;
  282|  1.03k|    extensionBehavior[E_GL_NV_cooperative_vector]                       = EBhDisable;
  283|       |
  284|       |    // #line and #include
  285|  1.03k|    extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
  286|  1.03k|    extensionBehavior[E_GL_GOOGLE_include_directive]                 = EBhDisable;
  287|  1.03k|    extensionBehavior[E_GL_ARB_shading_language_include]             = EBhDisable;
  288|       |
  289|  1.03k|    extensionBehavior[E_GL_AMD_shader_ballot]                        = EBhDisable;
  290|  1.03k|    extensionBehavior[E_GL_AMD_shader_trinary_minmax]                = EBhDisable;
  291|  1.03k|    extensionBehavior[E_GL_AMD_shader_explicit_vertex_parameter]     = EBhDisable;
  292|  1.03k|    extensionBehavior[E_GL_AMD_gcn_shader]                           = EBhDisable;
  293|  1.03k|    extensionBehavior[E_GL_AMD_gpu_shader_half_float]                = EBhDisable;
  294|  1.03k|    extensionBehavior[E_GL_AMD_texture_gather_bias_lod]              = EBhDisable;
  295|  1.03k|    extensionBehavior[E_GL_AMD_gpu_shader_int16]                     = EBhDisable;
  296|  1.03k|    extensionBehavior[E_GL_AMD_shader_image_load_store_lod]          = EBhDisable;
  297|  1.03k|    extensionBehavior[E_GL_AMD_shader_fragment_mask]                 = EBhDisable;
  298|  1.03k|    extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch]          = EBhDisable;
  299|  1.03k|    extensionBehavior[E_GL_AMD_shader_early_and_late_fragment_tests] = EBhDisable;
  300|       |
  301|  1.03k|    extensionBehavior[E_GL_INTEL_shader_integer_functions2]          = EBhDisable;
  302|       |
  303|  1.03k|    extensionBehavior[E_GL_NV_sample_mask_override_coverage]         = EBhDisable;
  304|  1.03k|    extensionBehavior[E_SPV_NV_geometry_shader_passthrough]          = EBhDisable;
  305|  1.03k|    extensionBehavior[E_GL_NV_viewport_array2]                       = EBhDisable;
  306|  1.03k|    extensionBehavior[E_GL_NV_stereo_view_rendering]                 = EBhDisable;
  307|  1.03k|    extensionBehavior[E_GL_NVX_multiview_per_view_attributes]        = EBhDisable;
  308|  1.03k|    extensionBehavior[E_GL_NV_shader_atomic_int64]                   = EBhDisable;
  309|  1.03k|    extensionBehavior[E_GL_NV_conservative_raster_underestimation]   = EBhDisable;
  310|  1.03k|    extensionBehavior[E_GL_NV_shader_noperspective_interpolation]    = EBhDisable;
  311|  1.03k|    extensionBehavior[E_GL_NV_shader_subgroup_partitioned]           = EBhDisable;
  312|  1.03k|    extensionBehavior[E_GL_NV_shading_rate_image]                    = EBhDisable;
  313|  1.03k|    extensionBehavior[E_GL_NV_ray_tracing]                           = EBhDisable;
  314|  1.03k|    extensionBehavior[E_GL_NV_ray_tracing_motion_blur]               = EBhDisable;
  315|  1.03k|    extensionBehavior[E_GL_NV_fragment_shader_barycentric]           = EBhDisable;
  316|  1.03k|    extensionBehavior[E_GL_KHR_compute_shader_derivatives]           = EBhDisable;
  317|  1.03k|    extensionBehavior[E_GL_NV_compute_shader_derivatives]            = EBhDisable;
  318|  1.03k|    extensionBehavior[E_GL_NV_shader_texture_footprint]              = EBhDisable;
  319|  1.03k|    extensionBehavior[E_GL_NV_mesh_shader]                           = EBhDisable;
  320|  1.03k|    extensionBehavior[E_GL_NV_cooperative_matrix]                    = EBhDisable;
  321|  1.03k|    extensionBehavior[E_GL_NV_shader_sm_builtins]                    = EBhDisable;
  322|  1.03k|    extensionBehavior[E_GL_NV_integer_cooperative_matrix]            = EBhDisable;
  323|  1.03k|    extensionBehavior[E_GL_NV_shader_invocation_reorder]             = EBhDisable;
  324|  1.03k|    extensionBehavior[E_GL_NV_displacement_micromap]                 = EBhDisable;
  325|  1.03k|    extensionBehavior[E_GL_NV_shader_atomic_fp16_vector]             = EBhDisable;
  326|  1.03k|    extensionBehavior[E_GL_NV_cooperative_matrix2]                   = EBhDisable;
  327|  1.03k|    extensionBehavior[E_GL_NV_cooperative_matrix_decode_vector]      = EBhDisable;
  328|  1.03k|    extensionBehavior[E_GL_NV_cluster_acceleration_structure]        = EBhDisable;
  329|  1.03k|    extensionBehavior[E_GL_NV_linear_swept_spheres]                  = EBhDisable;
  330|  1.03k|    extensionBehavior[E_GL_NV_desktop_lowp_mediump]                  = EBhDisable;
  331|  1.03k|    extensionBehavior[E_GL_NV_push_constant_bank]                    = EBhDisable;
  332|  1.03k|    extensionBehavior[E_GL_NV_explicit_typecast]                     = EBhDisable;
  333|       |
  334|       |    // ARM
  335|  1.03k|    extensionBehavior[E_GL_ARM_shader_core_builtins]                 = EBhDisable;
  336|  1.03k|    extensionBehavior[E_GL_ARM_tensors]                              = EBhDisable;
  337|  1.03k|    extensionBehavior[E_GL_ARM_tensors_bfloat16]                     = EBhDisable;
  338|  1.03k|    extensionBehavior[E_GL_ARM_tensors_float_e5m2]                   = EBhDisable;
  339|  1.03k|    extensionBehavior[E_GL_ARM_tensors_float_e4m3]                   = EBhDisable;
  340|       |
  341|       |    // QCOM
  342|  1.03k|    extensionBehavior[E_GL_QCOM_image_processing]                    = EBhDisable;
  343|  1.03k|    extensionBehavior[E_GL_QCOM_image_processing2]                   = EBhDisable;
  344|  1.03k|    extensionBehavior[E_GL_QCOM_image_processing3]                   = EBhDisable;
  345|  1.03k|    extensionBehavior[E_GL_QCOM_tile_shading]                        = EBhDisable;
  346|  1.03k|    extensionBehavior[E_GL_QCOM_cooperative_matrix_conversion]       = EBhDisable;
  347|  1.03k|    extensionBehavior[E_GL_QCOM_multiple_wait_queues]                = EBhDisable;
  348|       |
  349|       |    // AEP
  350|  1.03k|    extensionBehavior[E_GL_ANDROID_extension_pack_es31a]             = EBhDisable;
  351|  1.03k|    extensionBehavior[E_GL_KHR_blend_equation_advanced]              = EBhDisable;
  352|  1.03k|    extensionBehavior[E_GL_OES_sample_variables]                     = EBhDisable;
  353|  1.03k|    extensionBehavior[E_GL_OES_shader_image_atomic]                  = EBhDisable;
  354|  1.03k|    extensionBehavior[E_GL_OES_shader_multisample_interpolation]     = EBhDisable;
  355|  1.03k|    extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisable;
  356|  1.03k|    extensionBehavior[E_GL_EXT_geometry_shader]                      = EBhDisable;
  357|  1.03k|    extensionBehavior[E_GL_EXT_geometry_point_size]                  = EBhDisable;
  358|  1.03k|    extensionBehavior[E_GL_EXT_gpu_shader5]                          = EBhDisable;
  359|  1.03k|    extensionBehavior[E_GL_EXT_primitive_bounding_box]               = EBhDisable;
  360|  1.03k|    extensionBehavior[E_GL_EXT_shader_io_blocks]                     = EBhDisable;
  361|  1.03k|    extensionBehavior[E_GL_EXT_tessellation_shader]                  = EBhDisable;
  362|  1.03k|    extensionBehavior[E_GL_EXT_tessellation_point_size]              = EBhDisable;
  363|  1.03k|    extensionBehavior[E_GL_EXT_texture_buffer]                       = EBhDisable;
  364|  1.03k|    extensionBehavior[E_GL_EXT_texture_cube_map_array]               = EBhDisable;
  365|  1.03k|    extensionBehavior[E_GL_EXT_null_initializer]                     = EBhDisable;
  366|  1.03k|    extensionBehavior[E_GL_EXT_descriptor_heap]                      = EBhDisable;
  367|  1.03k|    extensionBehavior[E_GL_EXT_structured_descriptor_heap]           = EBhDisable;
  368|       |
  369|       |    // OES matching AEP
  370|  1.03k|    extensionBehavior[E_GL_OES_geometry_shader]          = EBhDisable;
  371|  1.03k|    extensionBehavior[E_GL_OES_geometry_point_size]      = EBhDisable;
  372|  1.03k|    extensionBehavior[E_GL_OES_gpu_shader5]              = EBhDisable;
  373|  1.03k|    extensionBehavior[E_GL_OES_primitive_bounding_box]   = EBhDisable;
  374|  1.03k|    extensionBehavior[E_GL_OES_shader_io_blocks]         = EBhDisable;
  375|  1.03k|    extensionBehavior[E_GL_OES_tessellation_shader]      = EBhDisable;
  376|  1.03k|    extensionBehavior[E_GL_OES_tessellation_point_size]  = EBhDisable;
  377|  1.03k|    extensionBehavior[E_GL_OES_texture_buffer]           = EBhDisable;
  378|  1.03k|    extensionBehavior[E_GL_OES_texture_cube_map_array]   = EBhDisable;
  379|  1.03k|    extensionBehavior[E_GL_EXT_shader_integer_mix]       = EBhDisable;
  380|       |
  381|       |    // EXT extensions
  382|  1.03k|    extensionBehavior[E_GL_EXT_device_group]                = EBhDisable;
  383|  1.03k|    extensionBehavior[E_GL_EXT_multiview]                   = EBhDisable;
  384|  1.03k|    extensionBehavior[E_GL_EXT_shader_realtime_clock]       = EBhDisable;
  385|  1.03k|    extensionBehavior[E_GL_EXT_ray_tracing]                 = EBhDisable;
  386|  1.03k|    extensionBehavior[E_GL_EXT_ray_query]                   = EBhDisable;
  387|  1.03k|    extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
  388|  1.03k|    extensionBehavior[E_GL_EXT_ray_cull_mask]               = EBhDisable;
  389|  1.03k|    extensionBehavior[E_GL_EXT_blend_func_extended]         = EBhDisable;
  390|  1.03k|    extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
  391|  1.03k|    extensionBehavior[E_GL_EXT_fragment_shading_rate]       = EBhDisable;
  392|  1.03k|    extensionBehavior[E_GL_EXT_shader_image_int64]          = EBhDisable;
  393|  1.03k|    extensionBehavior[E_GL_EXT_terminate_invocation]        = EBhDisable;
  394|  1.03k|    extensionBehavior[E_GL_EXT_shared_memory_block]         = EBhDisable;
  395|  1.03k|    extensionBehavior[E_GL_EXT_spirv_intrinsics]            = EBhDisable;
  396|  1.03k|    extensionBehavior[E_GL_EXT_mesh_shader]                 = EBhDisable;
  397|  1.03k|    extensionBehavior[E_GL_EXT_opacity_micromap]            = EBhDisable;
  398|  1.03k|    extensionBehavior[E_GL_EXT_opacity_micromap_ray_query_mode] = EBhDisable;
  399|  1.03k|    extensionBehavior[E_GL_EXT_shader_quad_control]         = EBhDisable;
  400|  1.03k|    extensionBehavior[E_GL_EXT_ray_tracing_position_fetch]  = EBhDisable;
  401|  1.03k|    extensionBehavior[E_GL_EXT_shader_tile_image]           = EBhDisable;
  402|  1.03k|    extensionBehavior[E_GL_EXT_texture_shadow_lod]          = EBhDisable;
  403|  1.03k|    extensionBehavior[E_GL_EXT_draw_instanced]              = EBhDisable;
  404|  1.03k|    extensionBehavior[E_GL_EXT_texture_array]               = EBhDisable;
  405|  1.03k|    extensionBehavior[E_GL_EXT_texture_offset_non_const]    = EBhDisable;
  406|  1.03k|    extensionBehavior[E_GL_EXT_nontemporal_keyword]         = EBhDisable;
  407|  1.03k|    extensionBehavior[E_GL_EXT_bfloat16]                    = EBhDisable;
  408|  1.03k|    extensionBehavior[E_GL_EXT_float_e4m3]                  = EBhDisable;
  409|  1.03k|    extensionBehavior[E_GL_EXT_float_e5m2]                  = EBhDisable;
  410|  1.03k|    extensionBehavior[E_GL_EXT_uniform_buffer_unsized_array] = EBhDisable;
  411|  1.03k|    extensionBehavior[E_GL_EXT_shader_64bit_indexing]       = EBhDisable;
  412|  1.03k|    extensionBehavior[E_GL_EXT_conservative_depth]          = EBhDisable;
  413|  1.03k|    extensionBehavior[E_GL_EXT_long_vector]                 = EBhDisable;
  414|  1.03k|    extensionBehavior[E_GL_EXT_float_e2m1]                  = EBhDisable;
  415|  1.03k|    extensionBehavior[E_GL_EXT_float_e3m2]                  = EBhDisable;
  416|  1.03k|    extensionBehavior[E_GL_EXT_float_e2m3]                  = EBhDisable;
  417|  1.03k|    extensionBehavior[E_GL_EXT_float_ue8m0]                 = EBhDisable;
  418|  1.03k|    extensionBehavior[E_GL_EXT_float_mxint8]                = EBhDisable;
  419|  1.03k|    extensionBehavior[E_GL_EXT_optional_input_attachment_index] = EBhDisable;
  420|  1.03k|    extensionBehavior[E_GL_EXT_cooperative_matrix_maintenance1] = EBhDisable;
  421|       |
  422|       |    // OVR extensions
  423|  1.03k|    extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
  424|  1.03k|    extensionBehavior[E_GL_OVR_multiview2]               = EBhDisable;
  425|       |
  426|       |    // explicit types
  427|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types]         = EBhDisable;
  428|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int8]    = EBhDisable;
  429|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int16]   = EBhDisable;
  430|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int32]   = EBhDisable;
  431|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int64]   = EBhDisable;
  432|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float16] = EBhDisable;
  433|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float32] = EBhDisable;
  434|  1.03k|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float64] = EBhDisable;
  435|       |
  436|       |    // subgroup extended types
  437|  1.03k|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int8]    = EBhDisable;
  438|  1.03k|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int16]   = EBhDisable;
  439|  1.03k|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int64]   = EBhDisable;
  440|  1.03k|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable;
  441|  1.03k|    extensionBehavior[E_GL_EXT_shader_atomic_float]                    = EBhDisable;
  442|  1.03k|    extensionBehavior[E_GL_EXT_shader_atomic_float2]                   = EBhDisable;
  443|       |
  444|  1.03k|    extensionBehavior[E_GL_EXT_integer_dot_product]                    = EBhDisable;
  445|       |
  446|  1.03k|    extensionBehavior[E_GL_EXT_shader_invocation_reorder]              = EBhDisable;
  447|       |
  448|       |    // Record extensions not for spv.
  449|  1.03k|    spvUnsupportedExt.push_back(E_GL_ARB_bindless_texture);
  450|  1.03k|}
_ZN7glslang14TParseVersions11getPreambleERNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  455|  1.03k|{
  456|  1.03k|    if (isEsProfile()) {
  ------------------
  |  Branch (456:9): [True: 514, False: 519]
  ------------------
  457|    514|        preamble =
  458|    514|            "#define GL_ES 1\n"
  459|    514|            "#define GL_FRAGMENT_PRECISION_HIGH 1\n"
  460|    514|            "#define GL_OES_texture_3D 1\n"
  461|    514|            "#define GL_OES_standard_derivatives 1\n"
  462|    514|            "#define GL_EXT_frag_depth 1\n"
  463|    514|            "#define GL_OES_EGL_image_external 1\n"
  464|    514|            "#define GL_OES_EGL_image_external_essl3 1\n"
  465|    514|            "#define GL_EXT_YUV_target 1\n"
  466|    514|            "#define GL_EXT_shader_texture_lod 1\n"
  467|    514|            "#define GL_EXT_shadow_samplers 1\n"
  468|    514|            "#define GL_EXT_fragment_shading_rate 1\n"
  469|    514|            "#define GL_EXT_conservative_depth 1\n"
  470|       |
  471|       |            // AEP
  472|    514|            "#define GL_ANDROID_extension_pack_es31a 1\n"
  473|    514|            "#define GL_OES_sample_variables 1\n"
  474|    514|            "#define GL_OES_shader_image_atomic 1\n"
  475|    514|            "#define GL_OES_shader_multisample_interpolation 1\n"
  476|    514|            "#define GL_OES_texture_storage_multisample_2d_array 1\n"
  477|    514|            "#define GL_EXT_geometry_shader 1\n"
  478|    514|            "#define GL_EXT_geometry_point_size 1\n"
  479|    514|            "#define GL_EXT_gpu_shader5 1\n"
  480|    514|            "#define GL_EXT_primitive_bounding_box 1\n"
  481|    514|            "#define GL_EXT_shader_io_blocks 1\n"
  482|    514|            "#define GL_EXT_tessellation_shader 1\n"
  483|    514|            "#define GL_EXT_tessellation_point_size 1\n"
  484|    514|            "#define GL_EXT_texture_buffer 1\n"
  485|    514|            "#define GL_EXT_texture_cube_map_array 1\n"
  486|    514|            "#define GL_EXT_shader_implicit_conversions 1\n"
  487|    514|            "#define GL_EXT_shader_integer_mix 1\n"
  488|    514|            "#define GL_EXT_blend_func_extended 1\n"
  489|    514|            "#define GL_EXT_descriptor_heap 1\n"
  490|    514|            "#define GL_EXT_structured_descriptor_heap 1\n"
  491|    514|            "#define GL_EXT_split_barrier 1\n"
  492|       |
  493|       |            // OES matching AEP
  494|    514|            "#define GL_OES_geometry_shader 1\n"
  495|    514|            "#define GL_OES_geometry_point_size 1\n"
  496|    514|            "#define GL_OES_gpu_shader5 1\n"
  497|    514|            "#define GL_OES_primitive_bounding_box 1\n"
  498|    514|            "#define GL_OES_shader_io_blocks 1\n"
  499|    514|            "#define GL_OES_tessellation_shader 1\n"
  500|    514|            "#define GL_OES_tessellation_point_size 1\n"
  501|    514|            "#define GL_OES_texture_buffer 1\n"
  502|    514|            "#define GL_OES_texture_cube_map_array 1\n"
  503|    514|            "#define GL_EXT_shader_non_constant_global_initializers 1\n"
  504|       |
  505|    514|            "#define GL_QCOM_image_processing 1\n"
  506|    514|            "#define GL_QCOM_image_processing2 1\n"
  507|    514|            "#define GL_QCOM_image_processing3 1\n"
  508|    514|            "#define GL_QCOM_tile_shading 1\n"
  509|    514|            "#define GL_QCOM_cooperative_matrix_conversion 1\n"
  510|    514|            "#define GL_QCOM_multiple_wait_queues 1\n"
  511|    514|            ;
  512|       |
  513|    514|            if (version >= 300) {
  ------------------
  |  Branch (513:17): [True: 494, False: 20]
  ------------------
  514|    494|                preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
  515|    494|            }
  516|    514|            if (version >= 310) {
  ------------------
  |  Branch (516:17): [True: 494, False: 20]
  ------------------
  517|    494|                preamble += "#define GL_EXT_null_initializer 1\n";
  518|    494|                preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n";
  519|    494|                preamble += "#define GL_EXT_maximal_reconvergence 1\n";
  520|    494|            }
  521|       |
  522|    519|    } else { // !isEsProfile()
  523|    519|        preamble =
  524|    519|            "#define GL_ARB_texture_rectangle 1\n"
  525|    519|            "#define GL_ARB_shading_language_420pack 1\n"
  526|    519|            "#define GL_ARB_texture_gather 1\n"
  527|    519|            "#define GL_ARB_gpu_shader5 1\n"
  528|    519|            "#define GL_ARB_separate_shader_objects 1\n"
  529|    519|            "#define GL_ARB_compute_shader 1\n"
  530|    519|            "#define GL_ARB_tessellation_shader 1\n"
  531|    519|            "#define GL_ARB_enhanced_layouts 1\n"
  532|    519|            "#define GL_ARB_texture_cube_map_array 1\n"
  533|    519|            "#define GL_ARB_texture_multisample 1\n"
  534|    519|            "#define GL_ARB_shader_texture_lod 1\n"
  535|    519|            "#define GL_ARB_explicit_attrib_location 1\n"
  536|    519|            "#define GL_ARB_explicit_uniform_location 1\n"
  537|    519|            "#define GL_ARB_shader_image_load_store 1\n"
  538|    519|            "#define GL_ARB_shader_atomic_counters 1\n"
  539|    519|            "#define GL_ARB_shader_draw_parameters 1\n"
  540|    519|            "#define GL_ARB_shader_group_vote 1\n"
  541|    519|            "#define GL_ARB_derivative_control 1\n"
  542|    519|            "#define GL_ARB_shader_texture_image_samples 1\n"
  543|    519|            "#define GL_ARB_viewport_array 1\n"
  544|    519|            "#define GL_ARB_gpu_shader_int64 1\n"
  545|    519|            "#define GL_ARB_gpu_shader_fp64 1\n"
  546|    519|            "#define GL_ARB_shader_ballot 1\n"
  547|    519|            "#define GL_ARB_sparse_texture2 1\n"
  548|    519|            "#define GL_ARB_sparse_texture_clamp 1\n"
  549|    519|            "#define GL_ARB_shader_stencil_export 1\n"
  550|    519|            "#define GL_ARB_sample_shading 1\n"
  551|    519|            "#define GL_ARB_shader_image_size 1\n"
  552|    519|            "#define GL_ARB_shading_language_packing 1\n"
  553|       |//            "#define GL_ARB_cull_distance 1\n"    // present for 4.5, but need extension control over block members
  554|    519|            "#define GL_ARB_post_depth_coverage 1\n"
  555|    519|            "#define GL_ARB_fragment_shader_interlock 1\n"
  556|    519|            "#define GL_ARB_uniform_buffer_object 1\n"
  557|    519|            "#define GL_ARB_shader_bit_encoding 1\n"
  558|    519|            "#define GL_ARB_shader_storage_buffer_object 1\n"
  559|    519|            "#define GL_ARB_texture_query_lod 1\n"
  560|    519|            "#define GL_ARB_vertex_attrib_64bit 1\n"
  561|    519|            "#define GL_NV_gpu_shader5 1\n"
  562|    519|            "#define GL_ARB_draw_instanced 1\n"
  563|    519|            "#define GL_ARB_fragment_coord_conventions 1\n"
  564|    519|            "#define GL_ARB_conservative_depth 1\n"
  565|       |
  566|    519|            "#define GL_EXT_shader_non_constant_global_initializers 1\n"
  567|    519|            "#define GL_EXT_shader_image_load_formatted 1\n"
  568|    519|            "#define GL_EXT_post_depth_coverage 1\n"
  569|    519|            "#define GL_EXT_control_flow_attributes 1\n"
  570|    519|            "#define GL_EXT_nonuniform_qualifier 1\n"
  571|    519|            "#define GL_EXT_shader_16bit_storage 1\n"
  572|    519|            "#define GL_EXT_shader_8bit_storage 1\n"
  573|    519|            "#define GL_EXT_samplerless_texture_functions 1\n"
  574|    519|            "#define GL_EXT_scalar_block_layout 1\n"
  575|    519|            "#define GL_EXT_fragment_invocation_density 1\n"
  576|    519|            "#define GL_EXT_buffer_reference 1\n"
  577|    519|            "#define GL_EXT_buffer_reference2 1\n"
  578|    519|            "#define GL_EXT_buffer_reference_uvec2 1\n"
  579|    519|            "#define GL_EXT_demote_to_helper_invocation 1\n"
  580|    519|            "#define GL_EXT_debug_printf 1\n"
  581|    519|            "#define GL_EXT_fragment_shading_rate 1\n"
  582|    519|            "#define GL_EXT_shared_memory_block 1\n"
  583|    519|            "#define GL_EXT_shader_integer_mix 1\n"
  584|    519|            "#define GL_EXT_spec_constant_composites 1\n"
  585|    519|            "#define GL_EXT_abort 1\n"
  586|    519|            "#define GL_EXT_split_barrier 1\n"
  587|    519|            "#define GL_EXT_cooperative_matrix_maintenance1 1\n"
  588|       |
  589|       |            // GL_KHR_shader_subgroup
  590|    519|            "#define GL_KHR_shader_subgroup_basic 1\n"
  591|    519|            "#define GL_KHR_shader_subgroup_vote 1\n"
  592|    519|            "#define GL_KHR_shader_subgroup_arithmetic 1\n"
  593|    519|            "#define GL_KHR_shader_subgroup_ballot 1\n"
  594|    519|            "#define GL_KHR_shader_subgroup_shuffle 1\n"
  595|    519|            "#define GL_KHR_shader_subgroup_shuffle_relative 1\n"
  596|    519|            "#define GL_KHR_shader_subgroup_clustered 1\n"
  597|    519|            "#define GL_KHR_shader_subgroup_quad 1\n"
  598|       |
  599|    519|            "#define GL_KHR_cooperative_matrix 1\n"
  600|       |
  601|    519|            "#define GL_EXT_shader_image_int64 1\n"
  602|    519|            "#define GL_EXT_shader_atomic_int64 1\n"
  603|    519|            "#define GL_EXT_shader_realtime_clock 1\n"
  604|    519|            "#define GL_EXT_ray_tracing 1\n"
  605|    519|            "#define GL_EXT_ray_query 1\n"
  606|    519|            "#define GL_EXT_ray_flags_primitive_culling 1\n"
  607|    519|            "#define GL_EXT_ray_cull_mask 1\n"
  608|    519|            "#define GL_EXT_ray_tracing_position_fetch 1\n"
  609|    519|            "#define GL_EXT_spirv_intrinsics 1\n"
  610|    519|            "#define GL_EXT_mesh_shader 1\n"
  611|       |
  612|    519|            "#define GL_AMD_shader_ballot 1\n"
  613|    519|            "#define GL_AMD_shader_trinary_minmax 1\n"
  614|    519|            "#define GL_AMD_shader_explicit_vertex_parameter 1\n"
  615|    519|            "#define GL_AMD_gcn_shader 1\n"
  616|    519|            "#define GL_AMD_gpu_shader_half_float 1\n"
  617|    519|            "#define GL_AMD_texture_gather_bias_lod 1\n"
  618|    519|            "#define GL_AMD_gpu_shader_int16 1\n"
  619|    519|            "#define GL_AMD_shader_image_load_store_lod 1\n"
  620|    519|            "#define GL_AMD_shader_fragment_mask 1\n"
  621|    519|            "#define GL_AMD_gpu_shader_half_float_fetch 1\n"
  622|       |
  623|    519|            "#define GL_INTEL_shader_integer_functions2 1\n"
  624|       |
  625|    519|            "#define GL_NV_sample_mask_override_coverage 1\n"
  626|    519|            "#define GL_NV_geometry_shader_passthrough 1\n"
  627|    519|            "#define GL_NV_viewport_array2 1\n"
  628|    519|            "#define GL_NV_shader_atomic_int64 1\n"
  629|    519|            "#define GL_NV_conservative_raster_underestimation 1\n"
  630|    519|            "#define GL_NV_shader_subgroup_partitioned 1\n"
  631|    519|            "#define GL_NV_shading_rate_image 1\n"
  632|    519|            "#define GL_NV_ray_tracing 1\n"
  633|    519|            "#define GL_NV_ray_tracing_motion_blur 1\n"
  634|    519|            "#define GL_NV_fragment_shader_barycentric 1\n"
  635|    519|            "#define GL_KHR_compute_shader_derivatives 1\n"
  636|    519|            "#define GL_NV_compute_shader_derivatives 1\n"
  637|    519|            "#define GL_NV_shader_texture_footprint 1\n"
  638|    519|            "#define GL_NV_mesh_shader 1\n"
  639|    519|            "#define GL_NV_cooperative_matrix 1\n"
  640|    519|            "#define GL_NV_integer_cooperative_matrix 1\n"
  641|    519|            "#define GL_NV_shader_invocation_reorder 1\n"
  642|    519|            "#define GL_NV_cooperative_matrix2 1\n"
  643|    519|            "#define GL_NV_cooperative_matrix_decode_vector 1\n"
  644|    519|            "#define GL_NV_desktop_lowp_mediump 1\n"
  645|    519|            "#define GL_NV_explicit_typecast 1\n"
  646|       |
  647|    519|            "#define GL_QCOM_image_processing 1\n"
  648|    519|            "#define GL_QCOM_image_processing2 1\n"
  649|    519|            "#define GL_QCOM_image_processing3 1\n"
  650|    519|            "#define GL_QCOM_tile_shading 1\n"
  651|    519|            "#define GL_QCOM_cooperative_matrix_conversion 1\n"
  652|    519|            "#define GL_QCOM_multiple_wait_queues 1\n"
  653|       |
  654|    519|            "#define GL_EXT_shader_explicit_arithmetic_types 1\n"
  655|    519|            "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n"
  656|    519|            "#define GL_EXT_shader_explicit_arithmetic_types_int16 1\n"
  657|    519|            "#define GL_EXT_shader_explicit_arithmetic_types_int32 1\n"
  658|    519|            "#define GL_EXT_shader_explicit_arithmetic_types_int64 1\n"
  659|    519|            "#define GL_EXT_shader_explicit_arithmetic_types_float16 1\n"
  660|    519|            "#define GL_EXT_shader_explicit_arithmetic_types_float32 1\n"
  661|    519|            "#define GL_EXT_shader_explicit_arithmetic_types_float64 1\n"
  662|       |
  663|    519|            "#define GL_EXT_shader_subgroup_extended_types_int8 1\n"
  664|    519|            "#define GL_EXT_shader_subgroup_extended_types_int16 1\n"
  665|    519|            "#define GL_EXT_shader_subgroup_extended_types_int64 1\n"
  666|    519|            "#define GL_EXT_shader_subgroup_extended_types_float16 1\n"
  667|       |
  668|    519|            "#define GL_EXT_shader_atomic_float 1\n"
  669|    519|            "#define GL_EXT_shader_atomic_float2 1\n"
  670|       |
  671|    519|            "#define GL_EXT_fragment_shader_barycentric 1\n"
  672|    519|            "#define GL_EXT_shader_quad_control 1\n"
  673|    519|            "#define GL_EXT_texture_array 1\n"
  674|       |
  675|    519|            "#define GL_EXT_control_flow_attributes2 1\n"
  676|    519|            "#define GL_EXT_function_control_attributes 1\n"
  677|       |
  678|    519|            "#define GL_EXT_integer_dot_product 1\n"
  679|    519|            "#define GL_EXT_bfloat16 1\n"
  680|    519|            "#define GL_EXT_float_e5m2 1\n"
  681|    519|            "#define GL_EXT_float_e4m3 1\n"
  682|    519|            "#define GL_EXT_uniform_buffer_unsized_array 1\n"
  683|    519|            "#define GL_EXT_shader_64bit_indexing 1\n"
  684|    519|            "#define GL_EXT_float_e2m1 1\n"
  685|    519|            "#define GL_EXT_float_e3m2 1\n"
  686|    519|            "#define GL_EXT_float_e2m3 1\n"
  687|    519|            "#define GL_EXT_float_ue8m0 1\n"
  688|    519|            "#define GL_EXT_float_mxint8 1\n"
  689|       |
  690|    519|            "#define GL_EXT_shader_invocation_reorder 1\n"
  691|    519|            "#define GL_EXT_descriptor_heap 1\n"
  692|    519|            "#define GL_EXT_structured_descriptor_heap 1\n"
  693|    519|            ;
  694|       |
  695|    519|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (695:13): [True: 122, False: 397]
  ------------------
  696|    122|            preamble += "#define GL_ARB_bindless_texture 1\n";
  697|    122|        }
  698|       |
  699|    519|        if (version >= 150) {
  ------------------
  |  Branch (699:13): [True: 519, False: 0]
  ------------------
  700|       |            // define GL_core_profile and GL_compatibility_profile
  701|    519|            preamble += "#define GL_core_profile 1\n";
  702|       |
  703|    519|            if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (703:17): [True: 0, False: 519]
  ------------------
  704|      0|                preamble += "#define GL_compatibility_profile 1\n";
  705|    519|        }
  706|    519|        if (version >= 140) {
  ------------------
  |  Branch (706:13): [True: 519, False: 0]
  ------------------
  707|    519|            preamble += "#define GL_EXT_null_initializer 1\n";
  708|    519|            preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n";
  709|    519|            preamble += "#define GL_EXT_maximal_reconvergence 1\n";
  710|    519|        }
  711|    519|        if (version >= 130) {
  ------------------
  |  Branch (711:13): [True: 519, False: 0]
  ------------------
  712|    519|            preamble +="#define GL_FRAGMENT_PRECISION_HIGH 1\n";
  713|    519|        }
  714|       |
  715|    519|        if (version >= 460) {
  ------------------
  |  Branch (715:13): [True: 121, False: 398]
  ------------------
  716|    121|            preamble +=
  717|    121|                "#define GL_ARM_tensors 1\n"
  718|    121|                "#define GL_ARM_tensors_bfloat16 1\n"
  719|    121|                "#define GL_ARM_tensors_float_e5m2 1\n"
  720|    121|                "#define GL_ARM_tensors_float_e4m3 1\n"
  721|    121|                ;
  722|    121|        }
  723|    519|    }
  724|       |
  725|  1.03k|    if ((!isEsProfile() && version >= 460) ||
  ------------------
  |  Branch (725:10): [True: 519, False: 514]
  |  Branch (725:28): [True: 121, False: 398]
  ------------------
  726|    912|        (isEsProfile() && version >= 320)) {
  ------------------
  |  Branch (726:10): [True: 514, False: 398]
  |  Branch (726:27): [True: 3, False: 511]
  ------------------
  727|    124|        preamble += "#define GL_EXT_nontemporal_keyword 1\n";
  728|    124|    }
  729|       |
  730|  1.03k|    if ((!isEsProfile() && version >= 140) ||
  ------------------
  |  Branch (730:10): [True: 519, False: 514]
  |  Branch (730:28): [True: 519, False: 0]
  ------------------
  731|  1.01k|        (isEsProfile() && version >= 310)) {
  ------------------
  |  Branch (731:10): [True: 514, False: 0]
  |  Branch (731:27): [True: 494, False: 20]
  ------------------
  732|  1.01k|        preamble +=
  733|  1.01k|            "#define GL_EXT_device_group 1\n"
  734|  1.01k|            "#define GL_EXT_multiview 1\n"
  735|  1.01k|            "#define GL_NV_shader_sm_builtins 1\n"
  736|  1.01k|            ;
  737|  1.01k|    }
  738|       |
  739|  1.03k|    if ((!isEsProfile() && version >= 130) ||
  ------------------
  |  Branch (739:10): [True: 519, False: 514]
  |  Branch (739:28): [True: 519, False: 0]
  ------------------
  740|  1.01k|        (isEsProfile() && version >= 300)) {
  ------------------
  |  Branch (740:10): [True: 514, False: 0]
  |  Branch (740:27): [True: 494, False: 20]
  ------------------
  741|  1.01k|        preamble += "#define GL_EXT_texture_offset_non_const 1\n";
  742|  1.01k|    }
  743|       |
  744|  1.03k|    if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (744:9): [True: 1.01k, False: 20]
  ------------------
  745|  1.01k|        preamble +=
  746|  1.01k|            "#define GL_OVR_multiview 1\n"
  747|  1.01k|            "#define GL_OVR_multiview2 1\n"
  748|  1.01k|            ;
  749|  1.01k|    }
  750|       |
  751|  1.03k|    if ((!isEsProfile() && version >= 140) ||
  ------------------
  |  Branch (751:10): [True: 519, False: 514]
  |  Branch (751:28): [True: 519, False: 0]
  ------------------
  752|  1.01k|        (isEsProfile() && version >= 300)) {
  ------------------
  |  Branch (752:10): [True: 514, False: 0]
  |  Branch (752:27): [True: 494, False: 20]
  ------------------
  753|  1.01k|        preamble += "#define GL_EXT_optional_input_attachment_index 1\n";
  754|  1.01k|    }
  755|       |
  756|       |    // #line and #include
  757|  1.03k|    preamble +=
  758|  1.03k|            "#define GL_GOOGLE_cpp_style_line_directive 1\n"
  759|  1.03k|            "#define GL_GOOGLE_include_directive 1\n"
  760|  1.03k|            "#define GL_KHR_blend_equation_advanced 1\n"
  761|  1.03k|            ;
  762|       |
  763|       |    // other general extensions
  764|  1.03k|    preamble +=
  765|  1.03k|            "#define GL_EXT_terminate_invocation 1\n"
  766|  1.03k|            ;
  767|       |
  768|       |    // #define VULKAN XXXX
  769|  1.03k|    const int numberBufSize = 12;
  770|  1.03k|    char numberBuf[numberBufSize];
  771|  1.03k|    if (spvVersion.vulkanGlsl > 0) {
  ------------------
  |  Branch (771:9): [True: 17, False: 1.01k]
  ------------------
  772|     17|        preamble += "#define VULKAN ";
  773|     17|        snprintf(numberBuf, numberBufSize, "%d", spvVersion.vulkanGlsl);
  774|     17|        preamble += numberBuf;
  775|     17|        preamble += "\n";
  776|     17|    }
  777|       |
  778|       |    // #define GL_SPIRV XXXX
  779|  1.03k|    if (spvVersion.openGl > 0) {
  ------------------
  |  Branch (779:9): [True: 891, False: 142]
  ------------------
  780|    891|        preamble += "#define GL_SPIRV ";
  781|    891|        snprintf(numberBuf, numberBufSize, "%d", spvVersion.openGl);
  782|    891|        preamble += numberBuf;
  783|    891|        preamble += "\n";
  784|    891|    }
  785|       |
  786|       |    // GL_EXT_spirv_intrinsics
  787|  1.03k|    if (!isEsProfile()) {
  ------------------
  |  Branch (787:9): [True: 519, False: 514]
  ------------------
  788|    519|        switch (language) {
  789|    519|        case EShLangVertex:         preamble += "#define GL_VERTEX_SHADER 1 \n";                    break;
  ------------------
  |  Branch (789:9): [True: 519, False: 0]
  ------------------
  790|      0|        case EShLangTessControl:    preamble += "#define GL_TESSELLATION_CONTROL_SHADER 1 \n";      break;
  ------------------
  |  Branch (790:9): [True: 0, False: 519]
  ------------------
  791|      0|        case EShLangTessEvaluation: preamble += "#define GL_TESSELLATION_EVALUATION_SHADER 1 \n";   break;
  ------------------
  |  Branch (791:9): [True: 0, False: 519]
  ------------------
  792|      0|        case EShLangGeometry:       preamble += "#define GL_GEOMETRY_SHADER 1 \n";                  break;
  ------------------
  |  Branch (792:9): [True: 0, False: 519]
  ------------------
  793|      0|        case EShLangFragment:       preamble += "#define GL_FRAGMENT_SHADER 1 \n";                  break;
  ------------------
  |  Branch (793:9): [True: 0, False: 519]
  ------------------
  794|      0|        case EShLangCompute:        preamble += "#define GL_COMPUTE_SHADER 1 \n";                   break;
  ------------------
  |  Branch (794:9): [True: 0, False: 519]
  ------------------
  795|      0|        case EShLangRayGen:         preamble += "#define GL_RAY_GENERATION_SHADER_EXT 1 \n";        break;
  ------------------
  |  Branch (795:9): [True: 0, False: 519]
  ------------------
  796|      0|        case EShLangIntersect:      preamble += "#define GL_INTERSECTION_SHADER_EXT 1 \n";          break;
  ------------------
  |  Branch (796:9): [True: 0, False: 519]
  ------------------
  797|      0|        case EShLangAnyHit:         preamble += "#define GL_ANY_HIT_SHADER_EXT 1 \n";               break;
  ------------------
  |  Branch (797:9): [True: 0, False: 519]
  ------------------
  798|      0|        case EShLangClosestHit:     preamble += "#define GL_CLOSEST_HIT_SHADER_EXT 1 \n";           break;
  ------------------
  |  Branch (798:9): [True: 0, False: 519]
  ------------------
  799|      0|        case EShLangMiss:           preamble += "#define GL_MISS_SHADER_EXT 1 \n";                  break;
  ------------------
  |  Branch (799:9): [True: 0, False: 519]
  ------------------
  800|      0|        case EShLangCallable:       preamble += "#define GL_CALLABLE_SHADER_EXT 1 \n";              break;
  ------------------
  |  Branch (800:9): [True: 0, False: 519]
  ------------------
  801|      0|        case EShLangTask:           preamble += "#define GL_TASK_SHADER_EXT 1 \n";                  break;
  ------------------
  |  Branch (801:9): [True: 0, False: 519]
  ------------------
  802|      0|        case EShLangMesh:           preamble += "#define GL_MESH_SHADER_EXT 1 \n";                  break;
  ------------------
  |  Branch (802:9): [True: 0, False: 519]
  ------------------
  803|      0|        default:                                                                                    break;
  ------------------
  |  Branch (803:9): [True: 0, False: 519]
  ------------------
  804|    519|        }
  805|    519|    }
  806|  1.03k|}
_ZN7glslang14TParseVersions12requireStageERKNS_10TSourceLocE15EShLanguageMaskPKc:
  840|  14.4k|{
  841|  14.4k|    if (((1 << language) & languageMask) == 0)
  ------------------
  |  Branch (841:9): [True: 0, False: 14.4k]
  ------------------
  842|      0|        error(loc, "not supported in this stage:", featureDesc, StageName(language));
  843|  14.4k|}
_ZN7glslang14TParseVersions12requireStageERKNS_10TSourceLocE11EShLanguagePKc:
  848|  2.23k|{
  849|  2.23k|    requireStage(loc, static_cast<EShLanguageMask>(1 << stage), featureDesc);
  850|  2.23k|}
_ZN7glslang14TParseVersions14requireProfileERKNS_10TSourceLocEiPKc:
  862|   523k|{
  863|   523k|    if (! (profile & profileMask))
  ------------------
  |  Branch (863:9): [True: 23, False: 523k]
  ------------------
  864|     23|        error(loc, "not supported with this profile:", featureDesc, ProfileName(profile));
  865|   523k|}
_ZN7glslang14TParseVersions15profileRequiresERKNS_10TSourceLocEiiiPKPKcS5_:
  886|  15.6M|{
  887|  15.6M|    if (profile & profileMask) {
  ------------------
  |  Branch (887:9): [True: 3.27M, False: 12.3M]
  ------------------
  888|  3.27M|        bool okay = minVersion > 0 && version >= minVersion;
  ------------------
  |  Branch (888:21): [True: 3.27M, False: 13]
  |  Branch (888:39): [True: 3.27M, False: 30]
  ------------------
  889|  3.27M|        for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (889:25): [True: 4.10k, False: 3.27M]
  ------------------
  890|  4.10k|            switch (getExtensionBehavior(extensions[i])) {
  891|      0|            case EBhWarn:
  ------------------
  |  Branch (891:13): [True: 0, False: 4.10k]
  ------------------
  892|      0|                infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
  893|      0|                [[fallthrough]];
  894|      0|            case EBhRequire:
  ------------------
  |  Branch (894:13): [True: 0, False: 4.10k]
  ------------------
  895|      0|            case EBhEnable:
  ------------------
  |  Branch (895:13): [True: 0, False: 4.10k]
  ------------------
  896|      0|                okay = true;
  897|      0|                break;
  898|  4.10k|            default: break; // some compilers want this
  ------------------
  |  Branch (898:13): [True: 4.10k, False: 0]
  ------------------
  899|  4.10k|            }
  900|  4.10k|        }
  901|  3.27M|        if (! okay)
  ------------------
  |  Branch (901:13): [True: 43, False: 3.27M]
  ------------------
  902|     43|            error(loc, "not supported for this version or the enabled extensions", featureDesc, "");
  903|  3.27M|    }
  904|  15.6M|}
_ZN7glslang14TParseVersions15profileRequiresERKNS_10TSourceLocEiiPKcS5_:
  909|  15.6M|{
  910|  15.6M|    profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc);
  ------------------
  |  Branch (910:51): [True: 439k, False: 15.2M]
  ------------------
  911|  15.6M|}
_ZN7glslang14TParseVersions24checkExtensionsRequestedERKNS_10TSourceLocEiPKPKcS5_:
  955|  4.41k|{
  956|       |    // First, see if any of the extensions are enabled
  957|  8.85k|    for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (957:21): [True: 4.43k, False: 4.41k]
  ------------------
  958|  4.43k|        TExtensionBehavior behavior = getExtensionBehavior(extensions[i]);
  959|  4.43k|        if (behavior == EBhEnable || behavior == EBhRequire)
  ------------------
  |  Branch (959:13): [True: 0, False: 4.43k]
  |  Branch (959:38): [True: 0, False: 4.43k]
  ------------------
  960|      0|            return true;
  961|  4.43k|    }
  962|       |
  963|       |    // See if any extensions want to give a warning on use; give warnings for all such extensions
  964|  4.41k|    bool warned = false;
  965|  8.85k|    for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (965:21): [True: 4.43k, False: 4.41k]
  ------------------
  966|  4.43k|        TExtensionBehavior behavior = getExtensionBehavior(extensions[i]);
  967|  4.43k|        if (behavior == EBhDisable && relaxedErrors()) {
  ------------------
  |  Branch (967:13): [True: 36, False: 4.40k]
  |  Branch (967:39): [True: 30, False: 6]
  ------------------
  968|     30|            infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc,
  969|     30|                                  messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
  970|     30|            behavior = EBhWarn;
  971|     30|        }
  972|  4.43k|        if (behavior == EBhWarn) {
  ------------------
  |  Branch (972:13): [True: 30, False: 4.40k]
  ------------------
  973|     30|            infoSink.info.message(EPrefixWarning,
  974|     30|                                  ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(),
  975|     30|                                  loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
  976|     30|            warned = true;
  977|     30|        }
  978|  4.43k|    }
  979|  4.41k|    if (warned)
  ------------------
  |  Branch (979:9): [True: 10, False: 4.40k]
  ------------------
  980|     10|        return true;
  981|  4.40k|    return false;
  982|  4.41k|}
_ZN7glslang14TParseVersions17requireExtensionsERKNS_10TSourceLocEiPKPKcS5_:
  990|     12|{
  991|     12|    if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc))
  ------------------
  |  Branch (991:9): [True: 10, False: 2]
  ------------------
  992|     10|        return;
  993|       |
  994|       |    // If we get this far, give errors explaining what extensions are needed
  995|      2|    if (numExtensions == 1)
  ------------------
  |  Branch (995:9): [True: 0, False: 2]
  ------------------
  996|      0|        error(loc, "required extension not requested:", featureDesc, extensions[0]);
  997|      2|    else {
  998|      2|        error(loc, "required extension not requested:", featureDesc, "Possible extensions include:");
  999|      8|        for (int i = 0; i < numExtensions; ++i)
  ------------------
  |  Branch (999:25): [True: 6, False: 2]
  ------------------
 1000|      6|            infoSink.info.message(EPrefixNone, extensions[i]);
 1001|      2|    }
 1002|      2|}
_ZN7glslang14TParseVersions20getExtensionBehaviorEPKc:
 1025|  2.52M|{
 1026|  2.52M|    auto iter = extensionBehavior.find(TString(extension));
 1027|  2.52M|    if (iter == extensionBehavior.end())
  ------------------
  |  Branch (1027:9): [True: 2.52M, False: 153]
  ------------------
 1028|  2.52M|        return EBhMissing;
 1029|    153|    else
 1030|    153|        return iter->second;
 1031|  2.52M|}
_ZN7glslang14TParseVersions17extensionTurnedOnEPKc:
 1035|  2.51M|{
 1036|  2.51M|      switch (getExtensionBehavior(extension)) {
 1037|      0|      case EBhEnable:
  ------------------
  |  Branch (1037:7): [True: 0, False: 2.51M]
  ------------------
 1038|      0|      case EBhRequire:
  ------------------
  |  Branch (1038:7): [True: 0, False: 2.51M]
  ------------------
 1039|      0|      case EBhWarn:
  ------------------
  |  Branch (1039:7): [True: 0, False: 2.51M]
  ------------------
 1040|      0|          return true;
 1041|  2.51M|      default:
  ------------------
  |  Branch (1041:7): [True: 2.51M, False: 0]
  ------------------
 1042|  2.51M|          break;
 1043|  2.51M|      }
 1044|  2.51M|      return false;
 1045|  2.51M|}
_ZN7glslang14TParseVersions18extensionsTurnedOnEiPKPKc:
 1048|   395k|{
 1049|  1.17M|    for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (1049:21): [True: 777k, False: 395k]
  ------------------
 1050|   777k|        if (extensionTurnedOn(extensions[i]))
  ------------------
  |  Branch (1050:13): [True: 0, False: 777k]
  ------------------
 1051|      0|            return true;
 1052|   777k|    }
 1053|   395k|    return false;
 1054|   395k|}
_ZN7glslang14TParseVersions23updateExtensionBehaviorEiPKcS2_:
 1060|      3|{
 1061|       |    // Translate from text string of extension's behavior to an enum.
 1062|      3|    TExtensionBehavior behavior = EBhDisable;
 1063|      3|    if (! strcmp("require", behaviorString))
  ------------------
  |  Branch (1063:9): [True: 0, False: 3]
  ------------------
 1064|      0|        behavior = EBhRequire;
 1065|      3|    else if (! strcmp("enable", behaviorString))
  ------------------
  |  Branch (1065:14): [True: 3, False: 0]
  ------------------
 1066|      3|        behavior = EBhEnable;
 1067|      0|    else if (! strcmp("disable", behaviorString))
  ------------------
  |  Branch (1067:14): [True: 0, False: 0]
  ------------------
 1068|      0|        behavior = EBhDisable;
 1069|      0|    else if (! strcmp("warn", behaviorString))
  ------------------
  |  Branch (1069:14): [True: 0, False: 0]
  ------------------
 1070|      0|        behavior = EBhWarn;
 1071|      0|    else {
 1072|      0|        error(getCurrentLoc(), "behavior not supported:", "#extension", behaviorString);
 1073|      0|        return;
 1074|      0|    }
 1075|      3|    bool on = behavior != EBhDisable;
 1076|       |
 1077|       |    // check if extension is used with correct shader stage
 1078|      3|    checkExtensionStage(getCurrentLoc(), extension);
 1079|       |
 1080|       |    // check if extension has additional requirements
 1081|      3|    extensionRequires(getCurrentLoc(), extension, behaviorString);
 1082|       |
 1083|       |    // update the requested extension
 1084|      3|    updateExtensionBehavior(extension, behavior);
 1085|       |
 1086|       |    // see if need to propagate to implicitly modified things
 1087|      3|    if (strcmp(extension, "GL_ANDROID_extension_pack_es31a") == 0) {
  ------------------
  |  Branch (1087:9): [True: 0, False: 3]
  ------------------
 1088|       |        // to everything in AEP
 1089|      0|        updateExtensionBehavior(line, "GL_KHR_blend_equation_advanced", behaviorString);
 1090|      0|        updateExtensionBehavior(line, "GL_OES_sample_variables", behaviorString);
 1091|      0|        updateExtensionBehavior(line, "GL_OES_shader_image_atomic", behaviorString);
 1092|      0|        updateExtensionBehavior(line, "GL_OES_shader_multisample_interpolation", behaviorString);
 1093|      0|        updateExtensionBehavior(line, "GL_OES_texture_storage_multisample_2d_array", behaviorString);
 1094|      0|        updateExtensionBehavior(line, "GL_EXT_geometry_shader", behaviorString);
 1095|      0|        updateExtensionBehavior(line, "GL_EXT_gpu_shader5", behaviorString);
 1096|      0|        updateExtensionBehavior(line, "GL_EXT_primitive_bounding_box", behaviorString);
 1097|      0|        updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString);
 1098|      0|        updateExtensionBehavior(line, "GL_EXT_tessellation_shader", behaviorString);
 1099|      0|        updateExtensionBehavior(line, "GL_EXT_texture_buffer", behaviorString);
 1100|      0|        updateExtensionBehavior(line, "GL_EXT_texture_cube_map_array", behaviorString);
 1101|      0|    }
 1102|       |    // geometry to io_blocks
 1103|      3|    else if (strcmp(extension, "GL_EXT_geometry_shader") == 0)
  ------------------
  |  Branch (1103:14): [True: 0, False: 3]
  ------------------
 1104|      0|        updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString);
 1105|      3|    else if (strcmp(extension, "GL_OES_geometry_shader") == 0)
  ------------------
  |  Branch (1105:14): [True: 0, False: 3]
  ------------------
 1106|      0|        updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
 1107|       |    // tessellation to io_blocks
 1108|      3|    else if (strcmp(extension, "GL_EXT_tessellation_shader") == 0)
  ------------------
  |  Branch (1108:14): [True: 0, False: 3]
  ------------------
 1109|      0|        updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString);
 1110|      3|    else if (strcmp(extension, "GL_OES_tessellation_shader") == 0)
  ------------------
  |  Branch (1110:14): [True: 0, False: 3]
  ------------------
 1111|      0|        updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
 1112|      3|    else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0)
  ------------------
  |  Branch (1112:14): [True: 0, False: 3]
  ------------------
 1113|      0|        updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
 1114|      3|    else if (strcmp(extension, "GL_ARB_shading_language_include") == 0)
  ------------------
  |  Branch (1114:14): [True: 0, False: 3]
  ------------------
 1115|      0|        updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
 1116|       |    // subgroup_* to subgroup_basic
 1117|      3|    else if (strcmp(extension, "GL_KHR_shader_subgroup_vote") == 0)
  ------------------
  |  Branch (1117:14): [True: 0, False: 3]
  ------------------
 1118|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1119|      3|    else if (strcmp(extension, "GL_KHR_shader_subgroup_arithmetic") == 0)
  ------------------
  |  Branch (1119:14): [True: 0, False: 3]
  ------------------
 1120|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1121|      3|    else if (strcmp(extension, "GL_KHR_shader_subgroup_ballot") == 0)
  ------------------
  |  Branch (1121:14): [True: 0, False: 3]
  ------------------
 1122|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1123|      3|    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle") == 0)
  ------------------
  |  Branch (1123:14): [True: 0, False: 3]
  ------------------
 1124|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1125|      3|    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle_relative") == 0)
  ------------------
  |  Branch (1125:14): [True: 0, False: 3]
  ------------------
 1126|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1127|      3|    else if (strcmp(extension, "GL_KHR_shader_subgroup_clustered") == 0)
  ------------------
  |  Branch (1127:14): [True: 0, False: 3]
  ------------------
 1128|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1129|      3|    else if (strcmp(extension, "GL_KHR_shader_subgroup_quad") == 0)
  ------------------
  |  Branch (1129:14): [True: 0, False: 3]
  ------------------
 1130|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1131|      3|    else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
  ------------------
  |  Branch (1131:14): [True: 0, False: 3]
  ------------------
 1132|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1133|      3|    else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0 ||
  ------------------
  |  Branch (1133:14): [True: 0, False: 3]
  ------------------
 1134|      3|             strcmp(extension, "GL_EXT_buffer_reference_uvec2") == 0)
  ------------------
  |  Branch (1134:14): [True: 0, False: 3]
  ------------------
 1135|      0|        updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
 1136|      3|    else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
  ------------------
  |  Branch (1136:14): [True: 0, False: 3]
  ------------------
 1137|      0|        updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
 1138|      3|    else if (strcmp(extension, "GL_NV_cooperative_matrix2") == 0)
  ------------------
  |  Branch (1138:14): [True: 0, False: 3]
  ------------------
 1139|      0|        updateExtensionBehavior(line, "GL_KHR_cooperative_matrix", behaviorString);
 1140|       |    // subgroup extended types to explicit types
 1141|      3|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int8") == 0)
  ------------------
  |  Branch (1141:14): [True: 0, False: 3]
  ------------------
 1142|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int8", behaviorString);
 1143|      3|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int16") == 0)
  ------------------
  |  Branch (1143:14): [True: 0, False: 3]
  ------------------
 1144|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int16", behaviorString);
 1145|      3|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int64") == 0)
  ------------------
  |  Branch (1145:14): [True: 0, False: 3]
  ------------------
 1146|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int64", behaviorString);
 1147|      3|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_float16") == 0)
  ------------------
  |  Branch (1147:14): [True: 0, False: 3]
  ------------------
 1148|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_float16", behaviorString);
 1149|       |
 1150|       |    // see if we need to update the numeric features
 1151|      3|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types") == 0)
  ------------------
  |  Branch (1151:14): [True: 2, False: 1]
  ------------------
 1152|      2|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types, on);
 1153|      1|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int8") == 0)
  ------------------
  |  Branch (1153:14): [True: 0, False: 1]
  ------------------
 1154|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int8, on);
 1155|      1|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int16") == 0)
  ------------------
  |  Branch (1155:14): [True: 0, False: 1]
  ------------------
 1156|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int16, on);
 1157|      1|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int32") == 0)
  ------------------
  |  Branch (1157:14): [True: 0, False: 1]
  ------------------
 1158|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int32, on);
 1159|      1|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int64") == 0)
  ------------------
  |  Branch (1159:14): [True: 0, False: 1]
  ------------------
 1160|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int64, on);
 1161|      1|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float16") == 0)
  ------------------
  |  Branch (1161:14): [True: 0, False: 1]
  ------------------
 1162|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float16, on);
 1163|      1|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float32") == 0)
  ------------------
  |  Branch (1163:14): [True: 0, False: 1]
  ------------------
 1164|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float32, on);
 1165|      1|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float64") == 0)
  ------------------
  |  Branch (1165:14): [True: 0, False: 1]
  ------------------
 1166|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float64, on);
 1167|      1|    else if (strcmp(extension, "GL_EXT_shader_implicit_conversions") == 0)
  ------------------
  |  Branch (1167:14): [True: 0, False: 1]
  ------------------
 1168|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_implicit_conversions, on);
 1169|      1|    else if (strcmp(extension, "GL_ARB_gpu_shader_fp64") == 0)
  ------------------
  |  Branch (1169:14): [True: 0, False: 1]
  ------------------
 1170|      0|        intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_fp64, on);
 1171|      1|    else if (strcmp(extension, "GL_AMD_gpu_shader_int16") == 0)
  ------------------
  |  Branch (1171:14): [True: 0, False: 1]
  ------------------
 1172|      0|        intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_int16, on);
 1173|      1|    else if (strcmp(extension, "GL_AMD_gpu_shader_half_float") == 0)
  ------------------
  |  Branch (1173:14): [True: 0, False: 1]
  ------------------
 1174|      0|        intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_half_float, on);
 1175|      1|    else if (strcmp(extension, "GL_NV_gpu_shader5") == 0) {
  ------------------
  |  Branch (1175:14): [True: 0, False: 1]
  ------------------
 1176|      0|        intermediate.updateNumericFeature(TNumericFeatures::nv_gpu_shader5_types, on);
 1177|      0|    }
 1178|      3|}
_ZN7glslang14TParseVersions23updateExtensionBehaviorEPKcNS_18TExtensionBehaviorE:
 1181|      3|{
 1182|       |    // Update the current behavior
 1183|      3|    if (strcmp(extension, "all") == 0) {
  ------------------
  |  Branch (1183:9): [True: 0, False: 3]
  ------------------
 1184|       |        // special case for the 'all' extension; apply it to every extension present
 1185|      0|        if (behavior == EBhRequire || behavior == EBhEnable) {
  ------------------
  |  Branch (1185:13): [True: 0, False: 0]
  |  Branch (1185:39): [True: 0, False: 0]
  ------------------
 1186|      0|            error(getCurrentLoc(), "extension 'all' cannot have 'require' or 'enable' behavior", "#extension", "");
 1187|      0|            return;
 1188|      0|        } else {
 1189|      0|            for (auto iter = extensionBehavior.begin(); iter != extensionBehavior.end(); ++iter)
  ------------------
  |  Branch (1189:57): [True: 0, False: 0]
  ------------------
 1190|      0|                iter->second = behavior;
 1191|      0|        }
 1192|      3|    } else {
 1193|       |        // Do the update for this single extension
 1194|      3|        auto iter = extensionBehavior.find(TString(extension));
 1195|      3|        if (iter == extensionBehavior.end()) {
  ------------------
  |  Branch (1195:13): [True: 1, False: 2]
  ------------------
 1196|      1|            switch (behavior) {
 1197|      0|            case EBhRequire:
  ------------------
  |  Branch (1197:13): [True: 0, False: 1]
  ------------------
 1198|      0|                error(getCurrentLoc(), "extension not supported:", "#extension", extension);
 1199|      0|                break;
 1200|      1|            case EBhEnable:
  ------------------
  |  Branch (1200:13): [True: 1, False: 0]
  ------------------
 1201|      1|            case EBhWarn:
  ------------------
  |  Branch (1201:13): [True: 0, False: 1]
  ------------------
 1202|      1|            case EBhDisable:
  ------------------
  |  Branch (1202:13): [True: 0, False: 1]
  ------------------
 1203|      1|                warn(getCurrentLoc(), "extension not supported:", "#extension", extension);
 1204|      1|                break;
 1205|      0|            default:
  ------------------
  |  Branch (1205:13): [True: 0, False: 1]
  ------------------
 1206|      0|                assert(0 && "unexpected behavior");
 1207|      1|            }
 1208|       |
 1209|      1|            return;
 1210|      2|        } else {
 1211|      2|            if (iter->second == EBhDisablePartial)
  ------------------
  |  Branch (1211:17): [True: 0, False: 2]
  ------------------
 1212|      0|                warn(getCurrentLoc(), "extension is only partially supported:", "#extension", extension);
 1213|      2|            if (behavior != EBhDisable)
  ------------------
  |  Branch (1213:17): [True: 2, False: 0]
  ------------------
 1214|      2|                intermediate.addRequestedExtension(extension);
 1215|      2|            iter->second = behavior;
 1216|      2|        }
 1217|      3|    }
 1218|      3|}
_ZN7glslang14TParseVersions19checkExtensionStageERKNS_10TSourceLocEPKc:
 1222|      3|{
 1223|       |    // GL_NV_mesh_shader extension is only allowed in task/mesh shaders
 1224|      3|    if (strcmp(extension, "GL_NV_mesh_shader") == 0) {
  ------------------
  |  Branch (1224:9): [True: 0, False: 3]
  ------------------
 1225|      0|        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
 1226|      0|                     "#extension GL_NV_mesh_shader");
 1227|      0|        profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_NV_mesh_shader");
 1228|      0|        profileRequires(loc, EEsProfile, 320, nullptr, "#extension GL_NV_mesh_shader");
 1229|      0|        if (extensionTurnedOn(E_GL_EXT_mesh_shader)) {
  ------------------
  |  Branch (1229:13): [True: 0, False: 0]
  ------------------
 1230|      0|            error(loc, "GL_EXT_mesh_shader is already turned on, and not allowed with", "#extension", extension);
 1231|      0|        }
 1232|      0|    }
 1233|      3|    else if (strcmp(extension, "GL_EXT_mesh_shader") == 0) {
  ------------------
  |  Branch (1233:14): [True: 0, False: 3]
  ------------------
 1234|      0|        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
 1235|      0|                     "#extension GL_EXT_mesh_shader");
 1236|      0|        profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_EXT_mesh_shader");
 1237|      0|        profileRequires(loc, EEsProfile, 320, nullptr, "#extension GL_EXT_mesh_shader");
 1238|      0|        if (extensionTurnedOn(E_GL_NV_mesh_shader)) {
  ------------------
  |  Branch (1238:13): [True: 0, False: 0]
  ------------------
 1239|      0|            error(loc, "GL_NV_mesh_shader is already turned on, and not allowed with", "#extension", extension);
 1240|      0|        }
 1241|      0|    }
 1242|      3|}
_ZN7glslang14TParseVersions17extensionRequiresERKNS_10TSourceLocEPKcS5_:
 1246|      3|{
 1247|      3|    bool isEnabled = false;
 1248|      3|    if (!strcmp("require", behaviorString))
  ------------------
  |  Branch (1248:9): [True: 0, False: 3]
  ------------------
 1249|      0|        isEnabled = true;
 1250|      3|    else if (!strcmp("enable", behaviorString))
  ------------------
  |  Branch (1250:14): [True: 3, False: 0]
  ------------------
 1251|      3|        isEnabled = true;
 1252|       |
 1253|      3|    if (isEnabled) {
  ------------------
  |  Branch (1253:9): [True: 3, False: 0]
  ------------------
 1254|      3|        unsigned int minSpvVersion = 0;
 1255|      3|        auto iter = extensionMinSpv.find(TString(extension));
 1256|      3|        if (iter != extensionMinSpv.end())
  ------------------
  |  Branch (1256:13): [True: 0, False: 3]
  ------------------
 1257|      0|            minSpvVersion = iter->second;
 1258|      3|        requireSpv(loc, extension, minSpvVersion);
 1259|      3|    }
 1260|       |
 1261|      3|    if (spvVersion.spv != 0){
  ------------------
  |  Branch (1261:9): [True: 0, False: 3]
  ------------------
 1262|      0|        for (auto ext : spvUnsupportedExt){
  ------------------
  |  Branch (1262:23): [True: 0, False: 0]
  ------------------
 1263|      0|            if (strcmp(extension, ext.c_str()) == 0)
  ------------------
  |  Branch (1263:17): [True: 0, False: 0]
  ------------------
 1264|      0|                error(loc, "not allowed when using generating SPIR-V codes", extension, "");
 1265|      0|        }
 1266|      0|    }
 1267|      3|}
_ZN7glslang14TParseVersions16fullIntegerCheckERKNS_10TSourceLocEPKc:
 1271|  5.70M|{
 1272|  5.70M|    profileRequires(loc, ENoProfile, 130, nullptr, op);
 1273|  5.70M|    profileRequires(loc, EEsProfile, 300, nullptr, op);
 1274|  5.70M|}
_ZN7glslang14TParseVersions11doubleCheckERKNS_10TSourceLocEPKc:
 1278|      1|{
 1279|       |
 1280|       |    //requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1281|      1|    if (language == EShLangVertex) {
  ------------------
  |  Branch (1281:9): [True: 1, False: 0]
  ------------------
 1282|      1|        const char* const f64_Extensions[] = {E_GL_ARB_gpu_shader_fp64, E_GL_ARB_vertex_attrib_64bit};
 1283|      1|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, 2, f64_Extensions, op);
 1284|      1|    } else
 1285|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader_fp64, op);
 1286|      1|}
_ZN7glslang14TParseVersions12float16CheckERKNS_10TSourceLocEPKcb:
 1290|  90.2k|{
 1291|  90.2k|    if (!builtIn) {
  ------------------
  |  Branch (1291:9): [True: 2, False: 90.2k]
  ------------------
 1292|      2|        const char* const extensions[] = {
 1293|      2|                                           E_GL_AMD_gpu_shader_half_float,
 1294|      2|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1295|      2|                                           E_GL_EXT_shader_explicit_arithmetic_types_float16};
 1296|      2|        requireExtensions(loc, std::size(extensions), extensions, op);
 1297|      2|    }
 1298|  90.2k|}
_ZN7glslang14TParseVersions24float16ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1374|  3.10M|{
 1375|  3.10M|    if (!builtIn) {
  ------------------
  |  Branch (1375:9): [True: 0, False: 3.10M]
  ------------------
 1376|      0|        const char* const extensions[] = {
 1377|      0|                                           E_GL_AMD_gpu_shader_half_float,
 1378|      0|                                           E_GL_EXT_shader_16bit_storage,
 1379|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1380|      0|                                           E_GL_NV_gpu_shader5,
 1381|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_float16};
 1382|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1383|      0|    }
 1384|  3.10M|}
_ZN7glslang14TParseVersions25bfloat16ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1387|  47.2k|{
 1388|  47.2k|    if (!builtIn) {
  ------------------
  |  Branch (1388:9): [True: 0, False: 47.2k]
  ------------------
 1389|      0|        const char* const extensions[] = {
 1390|      0|                                           E_GL_EXT_bfloat16,
 1391|      0|                                         };
 1392|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1393|      0|    }
 1394|  47.2k|}
_ZN7glslang14TParseVersions26floate5m2ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1397|  30.0k|{
 1398|  30.0k|    if (!builtIn) {
  ------------------
  |  Branch (1398:9): [True: 0, False: 30.0k]
  ------------------
 1399|      0|        const char* const extensions[] = {
 1400|      0|                                           E_GL_EXT_float_e5m2,
 1401|      0|                                         };
 1402|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1403|      0|    }
 1404|  30.0k|}
_ZN7glslang14TParseVersions26floate4m3ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1407|  30.0k|{
 1408|  30.0k|    if (!builtIn) {
  ------------------
  |  Branch (1408:9): [True: 0, False: 30.0k]
  ------------------
 1409|      0|        const char* const extensions[] = {
 1410|      0|                                           E_GL_EXT_float_e4m3,
 1411|      0|                                         };
 1412|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1413|      0|    }
 1414|  30.0k|}
_ZN7glslang14TParseVersions26floate2m1ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1417|  17.1k|{
 1418|  17.1k|    if (!builtIn) {
  ------------------
  |  Branch (1418:9): [True: 0, False: 17.1k]
  ------------------
 1419|      0|        const char* const extensions[] = {
 1420|      0|                                           E_GL_EXT_float_e2m1,
 1421|      0|                                         };
 1422|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1423|      0|    }
 1424|  17.1k|}
_ZN7glslang14TParseVersions26floate3m2ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1427|  14.3k|{
 1428|  14.3k|    if (!builtIn) {
  ------------------
  |  Branch (1428:9): [True: 0, False: 14.3k]
  ------------------
 1429|      0|        const char* const extensions[] = {
 1430|      0|                                           E_GL_EXT_float_e3m2,
 1431|      0|                                         };
 1432|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1433|      0|    }
 1434|  14.3k|}
_ZN7glslang14TParseVersions26floate2m3ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1437|  14.3k|{
 1438|  14.3k|    if (!builtIn) {
  ------------------
  |  Branch (1438:9): [True: 0, False: 14.3k]
  ------------------
 1439|      0|        const char* const extensions[] = {
 1440|      0|                                           E_GL_EXT_float_e2m3,
 1441|      0|                                         };
 1442|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1443|      0|    }
 1444|  14.3k|}
_ZN7glslang14TParseVersions27floatue8m0ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1447|  22.9k|{
 1448|  22.9k|    if (!builtIn) {
  ------------------
  |  Branch (1448:9): [True: 0, False: 22.9k]
  ------------------
 1449|      0|        const char* const extensions[] = {
 1450|      0|                                           E_GL_EXT_float_ue8m0,
 1451|      0|                                         };
 1452|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1453|      0|    }
 1454|  22.9k|}
_ZN7glslang14TParseVersions28floatmxint8ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1457|  22.9k|{
 1458|  22.9k|    if (!builtIn) {
  ------------------
  |  Branch (1458:9): [True: 0, False: 22.9k]
  ------------------
 1459|      0|        const char* const extensions[] = {
 1460|      0|                                           E_GL_EXT_float_mxint8,
 1461|      0|                                         };
 1462|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1463|      0|    }
 1464|  22.9k|}
_ZN7glslang14TParseVersions20explicitFloat32CheckERKNS_10TSourceLocEPKcb:
 1468|  39.0k|{
 1469|  39.0k|    if (!builtIn) {
  ------------------
  |  Branch (1469:9): [True: 0, False: 39.0k]
  ------------------
 1470|      0|        const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types,
 1471|      0|                                          E_GL_NV_gpu_shader5,
 1472|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_float32};
 1473|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1474|      0|    }
 1475|  39.0k|}
_ZN7glslang14TParseVersions20explicitFloat64CheckERKNS_10TSourceLocEPKcb:
 1479|   664k|{
 1480|   664k|    if (!builtIn) {
  ------------------
  |  Branch (1480:9): [True: 0, False: 664k]
  ------------------
 1481|      0|        const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types,
 1482|      0|                                           E_GL_NV_gpu_shader5,
 1483|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_float64};
 1484|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1485|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1486|      0|        if(extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) && extensionTurnedOn(E_GL_NV_gpu_shader5))
  ------------------
  |  Branch (1486:12): [True: 0, False: 0]
  |  Branch (1486:59): [True: 0, False: 0]
  ------------------
 1487|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op);
 1488|      0|        else
 1489|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
 1490|      0|    }
 1491|   664k|}
_ZN7glslang14TParseVersions18float16OpaqueCheckERKNS_10TSourceLocEPKcb:
 1505|   776k|{
 1506|   776k|    if (! builtIn) {
  ------------------
  |  Branch (1506:9): [True: 0, False: 776k]
  ------------------
 1507|      0|        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float_fetch, op);
 1508|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1509|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
 1510|      0|    }
 1511|   776k|}
_ZN7glslang14TParseVersions22int16ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1526|  2.62M|{
 1527|  2.62M|    if (! builtIn) {
  ------------------
  |  Branch (1527:9): [True: 0, False: 2.62M]
  ------------------
 1528|      0|    	const char* const extensions[] = {
 1529|      0|                                           E_GL_AMD_gpu_shader_int16,
 1530|      0|                                           E_GL_EXT_shader_16bit_storage,
 1531|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1532|      0|                                           E_GL_NV_gpu_shader5,
 1533|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int16};
 1534|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1535|      0|    }
 1536|  2.62M|}
_ZN7glslang14TParseVersions21int8ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1539|  2.30M|{
 1540|  2.30M|    if (! builtIn) {
  ------------------
  |  Branch (1540:9): [True: 0, False: 2.30M]
  ------------------
 1541|      0|    	const char* const extensions[] = {
 1542|      0|                                           E_GL_EXT_shader_8bit_storage,
 1543|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1544|      0|                                           E_GL_NV_gpu_shader5,
 1545|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int8};
 1546|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1547|      0|    }
 1548|  2.30M|}
_ZN7glslang14TParseVersions18explicitInt32CheckERKNS_10TSourceLocEPKcb:
 1552|   106k|{
 1553|   106k|    if (! builtIn) {
  ------------------
  |  Branch (1553:9): [True: 0, False: 106k]
  ------------------
 1554|      0|        const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types,
 1555|      0|                                           E_GL_NV_gpu_shader5,
 1556|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int32};
 1557|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1558|      0|    }
 1559|   106k|}
_ZN7glslang14TParseVersions10int64CheckERKNS_10TSourceLocEPKcb:
 1563|  3.72M|{
 1564|  3.72M|    if (! builtIn) {
  ------------------
  |  Branch (1564:9): [True: 0, False: 3.72M]
  ------------------
 1565|      0|        const char* const extensions[] = {E_GL_ARB_gpu_shader_int64,
 1566|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1567|      0|                                           E_GL_NV_gpu_shader5,
 1568|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int64};
 1569|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1570|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1571|      0|        if (extensionTurnedOn(E_GL_NV_gpu_shader5))
  ------------------
  |  Branch (1571:13): [True: 0, False: 0]
  ------------------
 1572|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op);
 1573|      0|        else
 1574|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
 1575|      0|    }
 1576|  3.72M|}
_ZN7glslang14TParseVersions15fcoopmatCheckNVERKNS_10TSourceLocEPKcb:
 1579|  9.32k|{
 1580|  9.32k|    if (!builtIn) {
  ------------------
  |  Branch (1580:9): [True: 0, False: 9.32k]
  ------------------
 1581|      0|        const char* const extensions[] = {E_GL_NV_cooperative_matrix};
 1582|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1583|      0|    }
 1584|  9.32k|}
_ZN7glslang14TParseVersions17intcoopmatCheckNVERKNS_10TSourceLocEPKcb:
 1587|  24.8k|{
 1588|  24.8k|    if (!builtIn) {
  ------------------
  |  Branch (1588:9): [True: 0, False: 24.8k]
  ------------------
 1589|      0|        const char* const extensions[] = {E_GL_NV_integer_cooperative_matrix};
 1590|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1591|      0|    }
 1592|  24.8k|}
_ZN7glslang14TParseVersions12coopmatCheckERKNS_10TSourceLocEPKcb:
 1595|  96.3k|{
 1596|  96.3k|    if (!builtIn) {
  ------------------
  |  Branch (1596:9): [True: 0, False: 96.3k]
  ------------------
 1597|      0|        const char* const extensions[] = {E_GL_KHR_cooperative_matrix};
 1598|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1599|      0|    }
 1600|  96.3k|}
_ZN7glslang14TParseVersions21tensorLayoutViewCheckERKNS_10TSourceLocEPKcb:
 1611|  43.0k|{
 1612|  43.0k|    if (!builtIn) {
  ------------------
  |  Branch (1612:9): [True: 0, False: 43.0k]
  ------------------
 1613|      0|        const char* const extensions[] = {E_GL_NV_cooperative_matrix2};
 1614|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1615|      0|    }
 1616|  43.0k|}
_ZN7glslang14TParseVersions12coopvecCheckERKNS_10TSourceLocEPKcb:
 1619|   352k|{
 1620|   352k|    if (!builtIn) {
  ------------------
  |  Branch (1620:9): [True: 0, False: 352k]
  ------------------
 1621|      0|        const char* const extensions[] = {E_GL_NV_cooperative_vector};
 1622|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1623|      0|    }
 1624|   352k|}
_ZN7glslang14TParseVersions14tensorCheckARMERKNS_10TSourceLocEPKcb:
 1635|  27.0k|{
 1636|  27.0k|    if (!builtIn) {
  ------------------
  |  Branch (1636:9): [True: 0, False: 27.0k]
  ------------------
 1637|      0|        const char* const extensions[] = {E_GL_ARM_tensors};
 1638|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1639|      0|    }
 1640|  27.0k|}
_ZN7glslang14TParseVersions15longVectorCheckERKNS_10TSourceLocEPKcb:
 1643|   415k|{
 1644|   415k|    if (!builtIn) {
  ------------------
  |  Branch (1644:9): [True: 0, False: 415k]
  ------------------
 1645|      0|        const char* const extensions[] = {E_GL_EXT_long_vector};
 1646|      0|        requireExtensions(loc, std::size(extensions), extensions, op);
 1647|      0|    }
 1648|   415k|}
_ZN7glslang14TParseVersions13vulkanRemovedERKNS_10TSourceLocEPKc:
 1659|  7.68k|{
 1660|  7.68k|    if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (1660:9): [True: 0, False: 7.68k]
  |  Branch (1660:34): [True: 0, False: 0]
  ------------------
 1661|      0|        error(loc, "not allowed when using GLSL for Vulkan", op, "");
 1662|  7.68k|}
_ZN7glslang14TParseVersions10requireSpvERKNS_10TSourceLocEPKcj:
 1678|      3|{
 1679|      3|    if (spvVersion.spv < version)
  ------------------
  |  Branch (1679:9): [True: 0, False: 3]
  ------------------
 1680|      0|        error(loc, "not supported for current targeted SPIR-V version", op, "");
 1681|      3|}

_ZNK7glslang13TParseContext17attributeFromNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  101|      2|{
  102|      2|    if (name == "branch" || name == "dont_flatten")
  ------------------
  |  Branch (102:9): [True: 0, False: 2]
  |  Branch (102:29): [True: 0, False: 2]
  ------------------
  103|      0|        return EatBranch;
  104|      2|    else if (name == "flatten")
  ------------------
  |  Branch (104:14): [True: 0, False: 2]
  ------------------
  105|      0|        return EatFlatten;
  106|      2|    else if (name == "unroll")
  ------------------
  |  Branch (106:14): [True: 0, False: 2]
  ------------------
  107|      0|        return EatUnroll;
  108|      2|    else if (name == "loop" || name == "dont_unroll")
  ------------------
  |  Branch (108:14): [True: 0, False: 2]
  |  Branch (108:32): [True: 0, False: 2]
  ------------------
  109|      0|        return EatLoop;
  110|      2|    else if (name == "dependency_infinite")
  ------------------
  |  Branch (110:14): [True: 0, False: 2]
  ------------------
  111|      0|        return EatDependencyInfinite;
  112|      2|    else if (name == "dependency_length")
  ------------------
  |  Branch (112:14): [True: 0, False: 2]
  ------------------
  113|      0|        return EatDependencyLength;
  114|      2|    else if (name == "min_iterations")
  ------------------
  |  Branch (114:14): [True: 0, False: 2]
  ------------------
  115|      0|        return EatMinIterations;
  116|      2|    else if (name == "max_iterations")
  ------------------
  |  Branch (116:14): [True: 0, False: 2]
  ------------------
  117|      0|        return EatMaxIterations;
  118|      2|    else if (name == "iteration_multiple")
  ------------------
  |  Branch (118:14): [True: 0, False: 2]
  ------------------
  119|      0|        return EatIterationMultiple;
  120|      2|    else if (name == "peel_count")
  ------------------
  |  Branch (120:14): [True: 0, False: 2]
  ------------------
  121|      0|        return EatPeelCount;
  122|      2|    else if (name == "partial_count")
  ------------------
  |  Branch (122:14): [True: 0, False: 2]
  ------------------
  123|      0|        return EatPartialCount;
  124|      2|    else if (name == "subgroup_uniform_control_flow")
  ------------------
  |  Branch (124:14): [True: 0, False: 2]
  ------------------
  125|      0|        return EatSubgroupUniformControlFlow;
  126|      2|    else if (name == "export")
  ------------------
  |  Branch (126:14): [True: 0, False: 2]
  ------------------
  127|      0|        return EatExport;
  128|      2|    else if (name == "maximally_reconverges")
  ------------------
  |  Branch (128:14): [True: 0, False: 2]
  ------------------
  129|      0|        return EatMaximallyReconverges;
  130|      2|    else if (name == "inline")
  ------------------
  |  Branch (130:14): [True: 0, False: 2]
  ------------------
  131|      0|        return EatInline;
  132|      2|    else if (name == "noinline")
  ------------------
  |  Branch (132:14): [True: 0, False: 2]
  ------------------
  133|      0|        return EatNoInline;
  134|      2|    else if (name == "multiple_wait_queuesQCOM")
  ------------------
  |  Branch (134:14): [True: 0, False: 2]
  ------------------
  135|      0|        return EatMultipleWaitQueuesQCOM;
  136|      2|    else
  137|      2|        return EatNone;
  138|      2|}
_ZNK7glslang13TParseContext14makeAttributesERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  142|      2|{
  143|      2|    TAttributes *attributes = nullptr;
  144|      2|    attributes = NewPoolObject(attributes);
  145|      2|    TAttributeArgs args = { attributeFromName(identifier), nullptr };
  146|      2|    attributes->push_back(args);
  147|      2|    return attributes;
  148|      2|}

_Z7yyparsePN7glslang13TParseContextE:
 5637|  13.1k|{
 5638|       |/* Lookahead token kind.  */
 5639|  13.1k|int yychar;
 5640|       |
 5641|       |
 5642|       |/* The semantic value of the lookahead symbol.  */
 5643|       |/* Default value used for initialization, for pacifying older GCCs
 5644|       |   or non-GCC compilers.  */
 5645|  13.1k|YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
  ------------------
  |  |  958|  13.1k|# define YY_INITIAL_VALUE(Value) Value
  ------------------
 5646|  13.1k|YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
  ------------------
  |  |  958|  13.1k|# define YY_INITIAL_VALUE(Value) Value
  ------------------
 5647|       |
 5648|       |    /* Number of syntax errors so far.  */
 5649|  13.1k|    int yynerrs = 0;
 5650|       |
 5651|  13.1k|    yy_state_fast_t yystate = 0;
 5652|       |    /* Number of tokens to shift before error messages enabled.  */
 5653|  13.1k|    int yyerrstatus = 0;
 5654|       |
 5655|       |    /* Refer to the stacks through separate pointers, to allow yyoverflow
 5656|       |       to reallocate them elsewhere.  */
 5657|       |
 5658|       |    /* Their size.  */
 5659|  13.1k|    YYPTRDIFF_T yystacksize = YYINITDEPTH;
  ------------------
  |  |  865|  13.1k|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
                  YYPTRDIFF_T yystacksize = YYINITDEPTH;
  ------------------
  |  | 5321|  13.1k|# define YYINITDEPTH 200
  ------------------
 5660|       |
 5661|       |    /* The state stack: array, bottom, top.  */
 5662|  13.1k|    yy_state_t yyssa[YYINITDEPTH];
 5663|  13.1k|    yy_state_t *yyss = yyssa;
 5664|  13.1k|    yy_state_t *yyssp = yyss;
 5665|       |
 5666|       |    /* The semantic value stack: array, bottom, top.  */
 5667|  13.1k|    YYSTYPE yyvsa[YYINITDEPTH];
 5668|  13.1k|    YYSTYPE *yyvs = yyvsa;
 5669|  13.1k|    YYSTYPE *yyvsp = yyvs;
 5670|       |
 5671|  13.1k|  int yyn;
 5672|       |  /* The return value of yyparse.  */
 5673|  13.1k|  int yyresult;
 5674|       |  /* Lookahead symbol kind.  */
 5675|  13.1k|  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
 5676|       |  /* The variables used to return semantic value and location from the
 5677|       |     action routines.  */
 5678|  13.1k|  YYSTYPE yyval;
 5679|       |
 5680|       |  /* Buffer for error messages, and its allocated size.  */
 5681|  13.1k|  char yymsgbuf[128];
 5682|  13.1k|  char *yymsg = yymsgbuf;
 5683|  13.1k|  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
  ------------------
  |  |  865|  13.1k|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5684|       |
 5685|  13.1k|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 5686|       |
 5687|       |  /* The number of symbols on the RHS of the reduced rule.
 5688|       |     Keep to zero when no symbol should be popped.  */
 5689|  13.1k|  int yylen = 0;
 5690|       |
 5691|  13.1k|  YYDPRINTF ((stderr, "Starting parse\n"));
  ------------------
  |  | 5199|  13.1k|# define YYDPRINTF(Args)                        \
  |  | 5200|  13.1k|do {                                            \
  |  | 5201|  13.1k|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (5201:7): [True: 0, False: 13.1k]
  |  |  ------------------
  |  | 5202|  13.1k|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5203|  13.1k|} while (0)
  |  |  ------------------
  |  |  |  Branch (5203:10): [Folded, False: 13.1k]
  |  |  ------------------
  ------------------
 5692|       |
 5693|  13.1k|  yychar = YYEMPTY; /* Cause a token to be read.  */
 5694|       |
 5695|  13.1k|  goto yysetstate;
 5696|       |
 5697|       |
 5698|       |/*------------------------------------------------------------.
 5699|       || yynewstate -- push a new state, which is found in yystate.  |
 5700|       |`------------------------------------------------------------*/
 5701|   432M|yynewstate:
 5702|       |  /* In all cases, when you get here, the value and location stacks
 5703|       |     have just been pushed.  So pushing a state here evens the stacks.  */
 5704|   432M|  yyssp++;
 5705|       |
 5706|       |
 5707|       |/*--------------------------------------------------------------------.
 5708|       || yysetstate -- set current state (the top of the stack) to yystate.  |
 5709|       |`--------------------------------------------------------------------*/
 5710|   432M|yysetstate:
 5711|   432M|  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
  ------------------
  |  | 5199|   432M|# define YYDPRINTF(Args)                        \
  |  | 5200|   432M|do {                                            \
  |  | 5201|   432M|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (5201:7): [True: 0, False: 432M]
  |  |  ------------------
  |  | 5202|   432M|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5203|   432M|} while (0)
  |  |  ------------------
  |  |  |  Branch (5203:10): [Folded, False: 432M]
  |  |  ------------------
  ------------------
 5712|   432M|  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
  ------------------
  |  |  981|   432M|#define YY_ASSERT(E) ((void) (0 && (E)))
  |  |  ------------------
  |  |  |  Branch (981:31): [Folded, False: 432M]
  |  |  |  Branch (981:37): [True: 0, False: 0]
  |  |  |  Branch (981:37): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5713|   432M|  YY_IGNORE_USELESS_CAST_BEGIN
 5714|   432M|  *yyssp = YY_CAST (yy_state_t, yystate);
  ------------------
  |  |  100|   432M|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
 5715|   432M|  YY_IGNORE_USELESS_CAST_END
 5716|   432M|  YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 5271|   432M|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 5272|   432M|do {                                                            \
  |  | 5273|   432M|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (5273:7): [True: 0, False: 432M]
  |  |  ------------------
  |  | 5274|   432M|    yy_stack_print ((Bottom), (Top));                           \
  |  | 5275|   432M|} while (0)
  |  |  ------------------
  |  |  |  Branch (5275:10): [Folded, False: 432M]
  |  |  ------------------
  ------------------
 5717|       |
 5718|   432M|  if (yyss + yystacksize - 1 <= yyssp)
  ------------------
  |  Branch (5718:7): [True: 0, False: 432M]
  ------------------
 5719|       |#if !defined yyoverflow && !defined YYSTACK_RELOCATE
 5720|       |    YYNOMEM;
 5721|       |#else
 5722|      0|    {
 5723|       |      /* Get the current used size of the three stacks, in elements.  */
 5724|      0|      YYPTRDIFF_T yysize = yyssp - yyss + 1;
  ------------------
  |  |  865|      0|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5725|       |
 5726|       |# if defined yyoverflow
 5727|       |      {
 5728|       |        /* Give user a chance to reallocate the stack.  Use copies of
 5729|       |           these so that the &'s don't force the real ones into
 5730|       |           memory.  */
 5731|       |        yy_state_t *yyss1 = yyss;
 5732|       |        YYSTYPE *yyvs1 = yyvs;
 5733|       |
 5734|       |        /* Each stack pointer address is followed by the size of the
 5735|       |           data in use in that stack, in bytes.  This used to be a
 5736|       |           conditional around just the two extra args, but that might
 5737|       |           be undefined if yyoverflow is a macro.  */
 5738|       |        yyoverflow (YY_("memory exhausted"),
 5739|       |                    &yyss1, yysize * YYSIZEOF (*yyssp),
 5740|       |                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
 5741|       |                    &yystacksize);
 5742|       |        yyss = yyss1;
 5743|       |        yyvs = yyvs1;
 5744|       |      }
 5745|       |# else /* defined YYSTACK_RELOCATE */
 5746|       |      /* Extend the stack our own way.  */
 5747|      0|      if (YYMAXDEPTH <= yystacksize)
  ------------------
  |  | 5332|      0|# define YYMAXDEPTH 10000
  ------------------
  |  Branch (5747:11): [True: 0, False: 0]
  ------------------
 5748|      0|        YYNOMEM;
  ------------------
  |  | 5164|      0|#define YYNOMEM         goto yyexhaustedlab
  ------------------
 5749|      0|      yystacksize *= 2;
 5750|      0|      if (YYMAXDEPTH < yystacksize)
  ------------------
  |  | 5332|      0|# define YYMAXDEPTH 10000
  ------------------
  |  Branch (5750:11): [True: 0, False: 0]
  ------------------
 5751|      0|        yystacksize = YYMAXDEPTH;
  ------------------
  |  | 5332|      0|# define YYMAXDEPTH 10000
  ------------------
 5752|       |
 5753|      0|      {
 5754|      0|        yy_state_t *yyss1 = yyss;
 5755|      0|        union yyalloc *yyptr =
 5756|      0|          YY_CAST (union yyalloc *,
  ------------------
  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
 5757|      0|                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
 5758|      0|        if (! yyptr)
  ------------------
  |  Branch (5758:13): [True: 0, False: 0]
  ------------------
 5759|      0|          YYNOMEM;
  ------------------
  |  | 5164|      0|#define YYNOMEM         goto yyexhaustedlab
  ------------------
 5760|      0|        YYSTACK_RELOCATE (yyss_alloc, yyss);
  ------------------
  |  | 1078|      0|    do                                                                  \
  |  | 1079|      0|      {                                                                 \
  |  | 1080|      0|        YYPTRDIFF_T yynewbytes;                                         \
  |  |  ------------------
  |  |  |  |  865|      0|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  |  |  ------------------
  |  | 1081|      0|        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
  |  |  ------------------
  |  |  |  | 1096|      0|      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1082|      0|        Stack = &yyptr->Stack_alloc;                                    \
  |  | 1083|      0|        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
  |  |  ------------------
  |  |  |  |  898|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
  |  |  ------------------
  |  |  |  | 1062|      0|# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  898|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1084|      0|        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
  |  |  ------------------
  |  |  |  |  898|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1085|      0|      }                                                                 \
  |  | 1086|      0|    while (0)
  |  |  ------------------
  |  |  |  Branch (1086:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5761|      0|        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
  ------------------
  |  | 1078|      0|    do                                                                  \
  |  | 1079|      0|      {                                                                 \
  |  | 1080|      0|        YYPTRDIFF_T yynewbytes;                                         \
  |  |  ------------------
  |  |  |  |  865|      0|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  |  |  ------------------
  |  | 1081|      0|        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
  |  |  ------------------
  |  |  |  | 1096|      0|      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1082|      0|        Stack = &yyptr->Stack_alloc;                                    \
  |  | 1083|      0|        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
  |  |  ------------------
  |  |  |  |  898|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
  |  |  ------------------
  |  |  |  | 1062|      0|# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  898|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1084|      0|        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
  |  |  ------------------
  |  |  |  |  898|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1085|      0|      }                                                                 \
  |  | 1086|      0|    while (0)
  |  |  ------------------
  |  |  |  Branch (1086:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5762|      0|#  undef YYSTACK_RELOCATE
 5763|      0|        if (yyss1 != yyssa)
  ------------------
  |  Branch (5763:13): [True: 0, False: 0]
  ------------------
 5764|      0|          YYSTACK_FREE (yyss1);
  ------------------
  |  | 1023|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1042|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
 5765|      0|      }
 5766|      0|# endif
 5767|       |
 5768|      0|      yyssp = yyss + yysize - 1;
 5769|      0|      yyvsp = yyvs + yysize - 1;
 5770|       |
 5771|      0|      YY_IGNORE_USELESS_CAST_BEGIN
 5772|      0|      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
  ------------------
  |  | 5199|      0|# define YYDPRINTF(Args)                        \
  |  | 5200|      0|do {                                            \
  |  | 5201|      0|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (5201:7): [True: 0, False: 0]
  |  |  ------------------
  |  | 5202|      0|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5203|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (5203:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5773|      0|                  YY_CAST (long, yystacksize)));
 5774|      0|      YY_IGNORE_USELESS_CAST_END
 5775|       |
 5776|      0|      if (yyss + yystacksize - 1 <= yyssp)
  ------------------
  |  Branch (5776:11): [True: 0, False: 0]
  ------------------
 5777|      0|        YYABORT;
  ------------------
  |  | 5162|      0|#define YYABORT         goto yyabortlab
  ------------------
 5778|      0|    }
 5779|   432M|#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 5780|       |
 5781|       |
 5782|   432M|  if (yystate == YYFINAL)
  ------------------
  |  | 1111|   432M|#define YYFINAL  496
  ------------------
  |  Branch (5782:7): [True: 11.9k, False: 432M]
  ------------------
 5783|  11.9k|    YYACCEPT;
  ------------------
  |  | 5161|  11.9k|#define YYACCEPT        goto yyacceptlab
  ------------------
 5784|       |
 5785|   432M|  goto yybackup;
 5786|       |
 5787|       |
 5788|       |/*-----------.
 5789|       || yybackup.  |
 5790|       |`-----------*/
 5791|   432M|yybackup:
 5792|       |  /* Do appropriate processing given the current state.  Read a
 5793|       |     lookahead token if we need one and don't already have one.  */
 5794|       |
 5795|       |  /* First try to decide what to do without reference to lookahead token.  */
 5796|   432M|  yyn = yypact[yystate];
 5797|   432M|  if (yypact_value_is_default (yyn))
  ------------------
  |  | 1490|   432M|  ((Yyn) == YYPACT_NINF)
  |  |  ------------------
  |  |  |  | 1487|   432M|#define YYPACT_NINF (-901)
  |  |  ------------------
  |  |  |  Branch (1490:3): [True: 181M, False: 250M]
  |  |  ------------------
  ------------------
 5798|   181M|    goto yydefault;
 5799|       |
 5800|       |  /* Not known => get a lookahead token if don't already have one.  */
 5801|       |
 5802|       |  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
 5803|   250M|  if (yychar == YYEMPTY)
  ------------------
  |  Branch (5803:7): [True: 117M, False: 133M]
  ------------------
 5804|   117M|    {
 5805|   117M|      YYDPRINTF ((stderr, "Reading a token\n"));
  ------------------
  |  | 5199|   117M|# define YYDPRINTF(Args)                        \
  |  | 5200|   117M|do {                                            \
  |  | 5201|   117M|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (5201:7): [True: 0, False: 117M]
  |  |  ------------------
  |  | 5202|   117M|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5203|   117M|} while (0)
  |  |  ------------------
  |  |  |  Branch (5203:10): [Folded, False: 117M]
  |  |  ------------------
  ------------------
 5806|   117M|      yychar = yylex (&yylval, parseContext);
  ------------------
  |  |  783|   117M|#define parseContext (*pParseContext)
  ------------------
 5807|   117M|    }
 5808|       |
 5809|   250M|  if (yychar <= YYEOF)
  ------------------
  |  Branch (5809:7): [True: 12.6k, False: 250M]
  ------------------
 5810|  12.6k|    {
 5811|  12.6k|      yychar = YYEOF;
 5812|  12.6k|      yytoken = YYSYMBOL_YYEOF;
 5813|  12.6k|      YYDPRINTF ((stderr, "Now at end of input.\n"));
  ------------------
  |  | 5199|  12.6k|# define YYDPRINTF(Args)                        \
  |  | 5200|  12.6k|do {                                            \
  |  | 5201|  12.6k|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (5201:7): [True: 0, False: 12.6k]
  |  |  ------------------
  |  | 5202|  12.6k|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5203|  12.6k|} while (0)
  |  |  ------------------
  |  |  |  Branch (5203:10): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
 5814|  12.6k|    }
 5815|   250M|  else if (yychar == YYerror)
  ------------------
  |  Branch (5815:12): [True: 0, False: 250M]
  ------------------
 5816|      0|    {
 5817|       |      /* The scanner already issued an error message, process directly
 5818|       |         to error recovery.  But do not keep the error token as
 5819|       |         lookahead, it is too special and may lead us to an endless
 5820|       |         loop in error recovery. */
 5821|      0|      yychar = YYUNDEF;
 5822|      0|      yytoken = YYSYMBOL_YYerror;
 5823|      0|      goto yyerrlab1;
 5824|      0|    }
 5825|   250M|  else
 5826|   250M|    {
 5827|   250M|      yytoken = YYTRANSLATE (yychar);
  ------------------
  |  | 1131|   250M|  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
  |  |  ------------------
  |  |  |  | 1125|   250M|#define YYMAXUTOK   769
  |  |  ------------------
  |  |  |  Branch (1131:4): [True: 250M, False: 0]
  |  |  |  Branch (1131:18): [True: 250M, False: 0]
  |  |  ------------------
  |  | 1132|   250M|   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
  |  |  ------------------
  |  |  |  |  100|   250M|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  |  | 1133|   250M|   : YYSYMBOL_YYUNDEF)
  ------------------
 5828|   250M|      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
  ------------------
  |  | 5208|   250M|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 5209|   250M|do {                                                                      \
  |  | 5210|   250M|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (5210:7): [True: 0, False: 250M]
  |  |  ------------------
  |  | 5211|   250M|    {                                                                     \
  |  | 5212|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5213|      0|      yy_symbol_print (stderr,                                            \
  |  | 5214|      0|                  Kind, Value, pParseContext); \
  |  | 5215|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5216|      0|    }                                                                     \
  |  | 5217|   250M|} while (0)
  |  |  ------------------
  |  |  |  Branch (5217:10): [Folded, False: 250M]
  |  |  ------------------
  ------------------
 5829|   250M|    }
 5830|       |
 5831|       |  /* If the proper action on seeing token YYTOKEN is to reduce or to
 5832|       |     detect an error, take that action.  */
 5833|   250M|  yyn += yytoken;
 5834|   250M|  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
  ------------------
  |  | 1113|   250M|#define YYLAST   15602
  ------------------
  |  Branch (5834:7): [True: 1.50k, False: 250M]
  |  Branch (5834:18): [True: 0, False: 250M]
  |  Branch (5834:34): [True: 133M, False: 117M]
  ------------------
 5835|   133M|    goto yydefault;
 5836|   117M|  yyn = yytable[yyn];
 5837|   117M|  if (yyn <= 0)
  ------------------
  |  Branch (5837:7): [True: 3, False: 117M]
  ------------------
 5838|      3|    {
 5839|      3|      if (yytable_value_is_error (yyn))
  ------------------
  |  | 1495|      3|  0
  |  |  ------------------
  |  |  |  Branch (1495:3): [Folded, False: 3]
  |  |  ------------------
  ------------------
 5840|      0|        goto yyerrlab;
 5841|      3|      yyn = -yyn;
 5842|      3|      goto yyreduce;
 5843|      3|    }
 5844|       |
 5845|       |  /* Count tokens shifted since error; after three, turn off error
 5846|       |     status.  */
 5847|   117M|  if (yyerrstatus)
  ------------------
  |  Branch (5847:7): [True: 0, False: 117M]
  ------------------
 5848|      0|    yyerrstatus--;
 5849|       |
 5850|       |  /* Shift the lookahead token.  */
 5851|   117M|  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
  ------------------
  |  | 5208|   117M|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 5209|   117M|do {                                                                      \
  |  | 5210|   117M|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (5210:7): [True: 0, False: 117M]
  |  |  ------------------
  |  | 5211|   117M|    {                                                                     \
  |  | 5212|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5213|      0|      yy_symbol_print (stderr,                                            \
  |  | 5214|      0|                  Kind, Value, pParseContext); \
  |  | 5215|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5216|      0|    }                                                                     \
  |  | 5217|   117M|} while (0)
  |  |  ------------------
  |  |  |  Branch (5217:10): [Folded, False: 117M]
  |  |  ------------------
  ------------------
 5852|   117M|  yystate = yyn;
 5853|   117M|  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
 5854|   117M|  *++yyvsp = yylval;
 5855|   117M|  YY_IGNORE_MAYBE_UNINITIALIZED_END
 5856|       |
 5857|       |  /* Discard the shifted token.  */
 5858|   117M|  yychar = YYEMPTY;
 5859|   117M|  goto yynewstate;
 5860|       |
 5861|       |
 5862|       |/*-----------------------------------------------------------.
 5863|       || yydefault -- do the default action for the current state.  |
 5864|       |`-----------------------------------------------------------*/
 5865|   314M|yydefault:
 5866|   314M|  yyn = yydefact[yystate];
 5867|   314M|  if (yyn == 0)
  ------------------
  |  Branch (5867:7): [True: 1.23k, False: 314M]
  ------------------
 5868|  1.23k|    goto yyerrlab;
 5869|   314M|  goto yyreduce;
 5870|       |
 5871|       |
 5872|       |/*-----------------------------.
 5873|       || yyreduce -- do a reduction.  |
 5874|       |`-----------------------------*/
 5875|   314M|yyreduce:
 5876|       |  /* yyn is the number of a rule to reduce with.  */
 5877|   314M|  yylen = yyr2[yyn];
 5878|       |
 5879|       |  /* If YYLEN is nonzero, implement the default value of the action:
 5880|       |     '$$ = $1'.
 5881|       |
 5882|       |     Otherwise, the following line sets YYVAL to garbage.
 5883|       |     This behavior is undocumented and Bison
 5884|       |     users should not rely upon it.  Assigning to YYVAL
 5885|       |     unconditionally makes the parser a bit smaller, and it avoids a
 5886|       |     GCC warning that YYVAL may be used uninitialized.  */
 5887|   314M|  yyval = yyvsp[1-yylen];
 5888|       |
 5889|       |
 5890|   314M|  YY_REDUCE_PRINT (yyn);
  ------------------
  |  | 5302|   314M|# define YY_REDUCE_PRINT(Rule)          \
  |  | 5303|   314M|do {                                    \
  |  | 5304|   314M|  if (yydebug)                          \
  |  |  ------------------
  |  |  |  Branch (5304:7): [True: 0, False: 314M]
  |  |  ------------------
  |  | 5305|   314M|    yy_reduce_print (yyssp, yyvsp, Rule, pParseContext); \
  |  | 5306|   314M|} while (0)
  |  |  ------------------
  |  |  |  Branch (5306:10): [Folded, False: 314M]
  |  |  ------------------
  ------------------
 5891|   314M|  switch (yyn)
 5892|   314M|    {
 5893|      8|  case 2: /* variable_identifier: IDENTIFIER  */
  ------------------
  |  Branch (5893:3): [True: 8, False: 314M]
  ------------------
 5894|      8|#line 371 "MachineIndependent/glslang.y"
 5895|      8|                 {
 5896|      8|        (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
  ------------------
  |  |  783|      8|#define parseContext (*pParseContext)
  ------------------
 5897|      8|    }
 5898|      8|#line 5899 "MachineIndependent/glslang_tab.cpp"
 5899|      8|    break;
 5900|       |
 5901|      8|  case 3: /* primary_expression: variable_identifier  */
  ------------------
  |  Branch (5901:3): [True: 8, False: 314M]
  ------------------
 5902|      8|#line 377 "MachineIndependent/glslang.y"
 5903|      8|                          {
 5904|      8|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 5905|      8|    }
 5906|      8|#line 5907 "MachineIndependent/glslang_tab.cpp"
 5907|      8|    break;
 5908|       |
 5909|      0|  case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN  */
  ------------------
  |  Branch (5909:3): [True: 0, False: 314M]
  ------------------
 5910|      0|#line 380 "MachineIndependent/glslang.y"
 5911|      0|                                        {
 5912|      0|        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
 5913|      0|        if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
  ------------------
  |  Branch (5913:13): [True: 0, False: 0]
  ------------------
 5914|      0|            (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
 5915|      0|    }
 5916|      0|#line 5917 "MachineIndependent/glslang_tab.cpp"
 5917|      0|    break;
 5918|       |
 5919|      1|  case 5: /* primary_expression: FLOATCONSTANT  */
  ------------------
  |  Branch (5919:3): [True: 1, False: 314M]
  ------------------
 5920|      1|#line 385 "MachineIndependent/glslang.y"
 5921|      1|                    {
 5922|      1|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 5923|      1|    }
 5924|      1|#line 5925 "MachineIndependent/glslang_tab.cpp"
 5925|      1|    break;
 5926|       |
 5927|   273k|  case 6: /* primary_expression: INTCONSTANT  */
  ------------------
  |  Branch (5927:3): [True: 273k, False: 314M]
  ------------------
 5928|   273k|#line 388 "MachineIndependent/glslang.y"
 5929|   273k|                  {
 5930|   273k|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|   273k|#define parseContext (*pParseContext)
  ------------------
 5931|   273k|    }
 5932|   273k|#line 5933 "MachineIndependent/glslang_tab.cpp"
 5933|   273k|    break;
 5934|       |
 5935|  28.4k|  case 7: /* primary_expression: UINTCONSTANT  */
  ------------------
  |  Branch (5935:3): [True: 28.4k, False: 314M]
  ------------------
 5936|  28.4k|#line 391 "MachineIndependent/glslang.y"
 5937|  28.4k|                   {
 5938|  28.4k|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
  ------------------
  |  |  783|  28.4k|#define parseContext (*pParseContext)
  ------------------
 5939|  28.4k|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|  28.4k|#define parseContext (*pParseContext)
  ------------------
 5940|  28.4k|    }
 5941|  28.4k|#line 5942 "MachineIndependent/glslang_tab.cpp"
 5942|  28.4k|    break;
 5943|       |
 5944|      1|  case 8: /* primary_expression: BOOLCONSTANT  */
  ------------------
  |  Branch (5944:3): [True: 1, False: 314M]
  ------------------
 5945|      1|#line 395 "MachineIndependent/glslang.y"
 5946|      1|                   {
 5947|      1|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 5948|      1|    }
 5949|      1|#line 5950 "MachineIndependent/glslang_tab.cpp"
 5950|      1|    break;
 5951|       |
 5952|      0|  case 9: /* primary_expression: STRING_LITERAL  */
  ------------------
  |  Branch (5952:3): [True: 0, False: 314M]
  ------------------
 5953|      0|#line 398 "MachineIndependent/glslang.y"
 5954|      0|                     {
 5955|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5956|      0|    }
 5957|      0|#line 5958 "MachineIndependent/glslang_tab.cpp"
 5958|      0|    break;
 5959|       |
 5960|      0|  case 10: /* primary_expression: INT32CONSTANT  */
  ------------------
  |  Branch (5960:3): [True: 0, False: 314M]
  ------------------
 5961|      0|#line 401 "MachineIndependent/glslang.y"
 5962|      0|                    {
 5963|      0|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5964|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5965|      0|    }
 5966|      0|#line 5967 "MachineIndependent/glslang_tab.cpp"
 5967|      0|    break;
 5968|       |
 5969|      0|  case 11: /* primary_expression: UINT32CONSTANT  */
  ------------------
  |  Branch (5969:3): [True: 0, False: 314M]
  ------------------
 5970|      0|#line 405 "MachineIndependent/glslang.y"
 5971|      0|                     {
 5972|      0|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5973|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5974|      0|    }
 5975|      0|#line 5976 "MachineIndependent/glslang_tab.cpp"
 5976|      0|    break;
 5977|       |
 5978|      0|  case 12: /* primary_expression: INT64CONSTANT  */
  ------------------
  |  Branch (5978:3): [True: 0, False: 314M]
  ------------------
 5979|      0|#line 409 "MachineIndependent/glslang.y"
 5980|      0|                    {
 5981|      0|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5982|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5983|      0|    }
 5984|      0|#line 5985 "MachineIndependent/glslang_tab.cpp"
 5985|      0|    break;
 5986|       |
 5987|      0|  case 13: /* primary_expression: UINT64CONSTANT  */
  ------------------
  |  Branch (5987:3): [True: 0, False: 314M]
  ------------------
 5988|      0|#line 413 "MachineIndependent/glslang.y"
 5989|      0|                     {
 5990|      0|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5991|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 5992|      0|    }
 5993|      0|#line 5994 "MachineIndependent/glslang_tab.cpp"
 5994|      0|    break;
 5995|       |
 5996|      0|  case 14: /* primary_expression: INT16CONSTANT  */
  ------------------
  |  Branch (5996:3): [True: 0, False: 314M]
  ------------------
 5997|      0|#line 417 "MachineIndependent/glslang.y"
 5998|      0|                    {
 5999|      0|        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6000|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6001|      0|    }
 6002|      0|#line 6003 "MachineIndependent/glslang_tab.cpp"
 6003|      0|    break;
 6004|       |
 6005|      0|  case 15: /* primary_expression: UINT16CONSTANT  */
  ------------------
  |  Branch (6005:3): [True: 0, False: 314M]
  ------------------
 6006|      0|#line 421 "MachineIndependent/glslang.y"
 6007|      0|                     {
 6008|      0|        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6009|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6010|      0|    }
 6011|      0|#line 6012 "MachineIndependent/glslang_tab.cpp"
 6012|      0|    break;
 6013|       |
 6014|      0|  case 16: /* primary_expression: DOUBLECONSTANT  */
  ------------------
  |  Branch (6014:3): [True: 0, False: 314M]
  ------------------
 6015|      0|#line 425 "MachineIndependent/glslang.y"
 6016|      0|                     {
 6017|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6018|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6018:13): [True: 0, False: 0]
  ------------------
 6019|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6020|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6021|      0|    }
 6022|      0|#line 6023 "MachineIndependent/glslang_tab.cpp"
 6023|      0|    break;
 6024|       |
 6025|      0|  case 17: /* primary_expression: FLOAT16CONSTANT  */
  ------------------
  |  Branch (6025:3): [True: 0, False: 314M]
  ------------------
 6026|      0|#line 431 "MachineIndependent/glslang.y"
 6027|      0|                      {
 6028|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6029|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6030|      0|    }
 6031|      0|#line 6032 "MachineIndependent/glslang_tab.cpp"
 6032|      0|    break;
 6033|       |
 6034|      0|  case 18: /* primary_expression: FLOATE2M1CONSTANT  */
  ------------------
  |  Branch (6034:3): [True: 0, False: 314M]
  ------------------
 6035|      0|#line 435 "MachineIndependent/glslang.y"
 6036|      0|                        {
 6037|      0|        parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6038|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatE2M1, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6039|      0|    }
 6040|      0|#line 6041 "MachineIndependent/glslang_tab.cpp"
 6041|      0|    break;
 6042|       |
 6043|      0|  case 19: /* primary_expression: FLOATE3M2CONSTANT  */
  ------------------
  |  Branch (6043:3): [True: 0, False: 314M]
  ------------------
 6044|      0|#line 439 "MachineIndependent/glslang.y"
 6045|      0|                        {
 6046|      0|        parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6047|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatE3M2, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6048|      0|    }
 6049|      0|#line 6050 "MachineIndependent/glslang_tab.cpp"
 6050|      0|    break;
 6051|       |
 6052|      0|  case 20: /* primary_expression: FLOATE2M3CONSTANT  */
  ------------------
  |  Branch (6052:3): [True: 0, False: 314M]
  ------------------
 6053|      0|#line 443 "MachineIndependent/glslang.y"
 6054|      0|                        {
 6055|      0|        parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6056|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatE2M3, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6057|      0|    }
 6058|      0|#line 6059 "MachineIndependent/glslang_tab.cpp"
 6059|      0|    break;
 6060|       |
 6061|      0|  case 21: /* primary_expression: FLOATUE8M0CONSTANT  */
  ------------------
  |  Branch (6061:3): [True: 0, False: 314M]
  ------------------
 6062|      0|#line 447 "MachineIndependent/glslang.y"
 6063|      0|                         {
 6064|      0|        parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6065|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatUE8M0, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6066|      0|    }
 6067|      0|#line 6068 "MachineIndependent/glslang_tab.cpp"
 6068|      0|    break;
 6069|       |
 6070|      0|  case 22: /* primary_expression: FLOATMXINT8CONSTANT  */
  ------------------
  |  Branch (6070:3): [True: 0, False: 314M]
  ------------------
 6071|      0|#line 451 "MachineIndependent/glslang.y"
 6072|      0|                          {
 6073|      0|        parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6074|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatMXINT8, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6075|      0|    }
 6076|      0|#line 6077 "MachineIndependent/glslang_tab.cpp"
 6077|      0|    break;
 6078|       |
 6079|   302k|  case 23: /* postfix_expression: primary_expression  */
  ------------------
  |  Branch (6079:3): [True: 302k, False: 314M]
  ------------------
 6080|   302k|#line 458 "MachineIndependent/glslang.y"
 6081|   302k|                         {
 6082|   302k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6083|   302k|    }
 6084|   302k|#line 6085 "MachineIndependent/glslang_tab.cpp"
 6085|   302k|    break;
 6086|       |
 6087|      0|  case 24: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET  */
  ------------------
  |  Branch (6087:3): [True: 0, False: 314M]
  ------------------
 6088|      0|#line 461 "MachineIndependent/glslang.y"
 6089|      0|                                                                       {
 6090|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6091|      0|    }
 6092|      0|#line 6093 "MachineIndependent/glslang_tab.cpp"
 6093|      0|    break;
 6094|       |
 6095|  4.40k|  case 25: /* postfix_expression: function_call  */
  ------------------
  |  Branch (6095:3): [True: 4.40k, False: 314M]
  ------------------
 6096|  4.40k|#line 464 "MachineIndependent/glslang.y"
 6097|  4.40k|                    {
 6098|  4.40k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6099|  4.40k|    }
 6100|  4.40k|#line 6101 "MachineIndependent/glslang_tab.cpp"
 6101|  4.40k|    break;
 6102|       |
 6103|      0|  case 26: /* postfix_expression: postfix_expression DOT IDENTIFIER  */
  ------------------
  |  Branch (6103:3): [True: 0, False: 314M]
  ------------------
 6104|      0|#line 467 "MachineIndependent/glslang.y"
 6105|      0|                                        {
 6106|      0|        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6107|      0|    }
 6108|      0|#line 6109 "MachineIndependent/glslang_tab.cpp"
 6109|      0|    break;
 6110|       |
 6111|      0|  case 27: /* postfix_expression: postfix_expression INC_OP  */
  ------------------
  |  Branch (6111:3): [True: 0, False: 314M]
  ------------------
 6112|      0|#line 470 "MachineIndependent/glslang.y"
 6113|      0|                                {
 6114|      0|        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6115|      0|        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6116|      0|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6117|      0|    }
 6118|      0|#line 6119 "MachineIndependent/glslang_tab.cpp"
 6119|      0|    break;
 6120|       |
 6121|      1|  case 28: /* postfix_expression: postfix_expression DEC_OP  */
  ------------------
  |  Branch (6121:3): [True: 1, False: 314M]
  ------------------
 6122|      1|#line 475 "MachineIndependent/glslang.y"
 6123|      1|                                {
 6124|      1|        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 6125|      1|        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 6126|      1|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 6127|      1|    }
 6128|      1|#line 6129 "MachineIndependent/glslang_tab.cpp"
 6129|      1|    break;
 6130|       |
 6131|      0|  case 29: /* integer_expression: expression  */
  ------------------
  |  Branch (6131:3): [True: 0, False: 314M]
  ------------------
 6132|      0|#line 483 "MachineIndependent/glslang.y"
 6133|      0|                 {
 6134|      0|        parseContext.arrayIndexCheck((yyvsp[0].interm.intermTypedNode), "[]");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6135|      0|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6136|      0|    }
 6137|      0|#line 6138 "MachineIndependent/glslang_tab.cpp"
 6138|      0|    break;
 6139|       |
 6140|  4.40k|  case 30: /* function_call: function_call_or_method  */
  ------------------
  |  Branch (6140:3): [True: 4.40k, False: 314M]
  ------------------
 6141|  4.40k|#line 490 "MachineIndependent/glslang.y"
 6142|  4.40k|                              {
 6143|  4.40k|        (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
  ------------------
  |  |  783|  4.40k|#define parseContext (*pParseContext)
  ------------------
 6144|  4.40k|        delete (yyvsp[0].interm).function;
 6145|  4.40k|    }
 6146|  4.40k|#line 6147 "MachineIndependent/glslang_tab.cpp"
 6147|  4.40k|    break;
 6148|       |
 6149|  4.40k|  case 31: /* function_call_or_method: function_call_generic  */
  ------------------
  |  Branch (6149:3): [True: 4.40k, False: 314M]
  ------------------
 6150|  4.40k|#line 497 "MachineIndependent/glslang.y"
 6151|  4.40k|                            {
 6152|  4.40k|        (yyval.interm) = (yyvsp[0].interm);
 6153|  4.40k|    }
 6154|  4.40k|#line 6155 "MachineIndependent/glslang_tab.cpp"
 6155|  4.40k|    break;
 6156|       |
 6157|  4.40k|  case 32: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN  */
  ------------------
  |  Branch (6157:3): [True: 4.40k, False: 314M]
  ------------------
 6158|  4.40k|#line 503 "MachineIndependent/glslang.y"
 6159|  4.40k|                                                       {
 6160|  4.40k|        (yyval.interm) = (yyvsp[-1].interm);
 6161|  4.40k|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6162|  4.40k|    }
 6163|  4.40k|#line 6164 "MachineIndependent/glslang_tab.cpp"
 6164|  4.40k|    break;
 6165|       |
 6166|      0|  case 33: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN  */
  ------------------
  |  Branch (6166:3): [True: 0, False: 314M]
  ------------------
 6167|      0|#line 507 "MachineIndependent/glslang.y"
 6168|      0|                                                     {
 6169|      0|        (yyval.interm) = (yyvsp[-1].interm);
 6170|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6171|      0|    }
 6172|      0|#line 6173 "MachineIndependent/glslang_tab.cpp"
 6173|      0|    break;
 6174|       |
 6175|      0|  case 34: /* function_call_header_no_parameters: function_call_header VOID  */
  ------------------
  |  Branch (6175:3): [True: 0, False: 314M]
  ------------------
 6176|      0|#line 514 "MachineIndependent/glslang.y"
 6177|      0|                                {
 6178|      0|        (yyval.interm) = (yyvsp[-1].interm);
 6179|      0|    }
 6180|      0|#line 6181 "MachineIndependent/glslang_tab.cpp"
 6181|      0|    break;
 6182|       |
 6183|      0|  case 35: /* function_call_header_no_parameters: function_call_header  */
  ------------------
  |  Branch (6183:3): [True: 0, False: 314M]
  ------------------
 6184|      0|#line 517 "MachineIndependent/glslang.y"
 6185|      0|                           {
 6186|      0|        (yyval.interm) = (yyvsp[0].interm);
 6187|      0|    }
 6188|      0|#line 6189 "MachineIndependent/glslang_tab.cpp"
 6189|      0|    break;
 6190|       |
 6191|  4.40k|  case 36: /* function_call_header_with_parameters: function_call_header assignment_expression  */
  ------------------
  |  Branch (6191:3): [True: 4.40k, False: 314M]
  ------------------
 6192|  4.40k|#line 523 "MachineIndependent/glslang.y"
 6193|  4.40k|                                                 {
 6194|  4.40k|        if (parseContext.spvVersion.vulkan > 0
  ------------------
  |  |  783|  4.40k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6194:13): [True: 159, False: 4.24k]
  ------------------
 6195|    159|            && parseContext.spvVersion.vulkanRelaxed
  ------------------
  |  |  783|    159|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6195:16): [True: 0, False: 159]
  ------------------
 6196|      0|            && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque())
  ------------------
  |  Branch (6196:16): [True: 0, False: 0]
  ------------------
 6197|      0|        {
 6198|      0|            (yyval.interm).intermNode = parseContext.vkRelaxedRemapFunctionArgument((yyval.interm).loc, (yyvsp[-1].interm).function, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6199|      0|            (yyval.interm).function = (yyvsp[-1].interm).function;
 6200|      0|        }
 6201|  4.40k|        else
 6202|  4.40k|        {
 6203|  4.40k|            TParameter param = { 0, new TType, {} };
 6204|  4.40k|            param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
 6205|       |
 6206|  4.40k|            (yyvsp[-1].interm).function->addParameter(param);
 6207|  4.40k|            (yyval.interm).function = (yyvsp[-1].interm).function;
 6208|  4.40k|            (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
 6209|  4.40k|        }
 6210|  4.40k|    }
 6211|  4.40k|#line 6212 "MachineIndependent/glslang_tab.cpp"
 6212|  4.40k|    break;
 6213|       |
 6214|  8.80k|  case 37: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression  */
  ------------------
  |  Branch (6214:3): [True: 8.80k, False: 314M]
  ------------------
 6215|  8.80k|#line 541 "MachineIndependent/glslang.y"
 6216|  8.80k|                                                                       {
 6217|  8.80k|        if (parseContext.spvVersion.vulkan > 0
  ------------------
  |  |  783|  8.80k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6217:13): [True: 318, False: 8.48k]
  ------------------
 6218|    318|            && parseContext.spvVersion.vulkanRelaxed
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6218:16): [True: 0, False: 318]
  ------------------
 6219|      0|            && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque())
  ------------------
  |  Branch (6219:16): [True: 0, False: 0]
  ------------------
 6220|      0|        {
 6221|      0|            TIntermNode* remappedNode = parseContext.vkRelaxedRemapFunctionArgument((yyvsp[-1].lex).loc, (yyvsp[-2].interm).function, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6222|      0|            if (remappedNode == (yyvsp[0].interm.intermTypedNode))
  ------------------
  |  Branch (6222:17): [True: 0, False: 0]
  ------------------
 6223|      0|                (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6224|      0|            else
 6225|      0|                (yyval.interm).intermNode = parseContext.intermediate.mergeAggregate((yyvsp[-2].interm).intermNode, remappedNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6226|      0|            (yyval.interm).function = (yyvsp[-2].interm).function;
 6227|      0|        }
 6228|  8.80k|        else
 6229|  8.80k|        {
 6230|  8.80k|            TParameter param = { 0, new TType, {} };
 6231|  8.80k|            param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
 6232|       |
 6233|  8.80k|            (yyvsp[-2].interm).function->addParameter(param);
 6234|  8.80k|            (yyval.interm).function = (yyvsp[-2].interm).function;
 6235|  8.80k|            (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|  8.80k|#define parseContext (*pParseContext)
  ------------------
 6236|  8.80k|        }
 6237|  8.80k|    }
 6238|  8.80k|#line 6239 "MachineIndependent/glslang_tab.cpp"
 6239|  8.80k|    break;
 6240|       |
 6241|  4.40k|  case 38: /* function_call_header: function_identifier LEFT_PAREN  */
  ------------------
  |  Branch (6241:3): [True: 4.40k, False: 314M]
  ------------------
 6242|  4.40k|#line 566 "MachineIndependent/glslang.y"
 6243|  4.40k|                                     {
 6244|  4.40k|        (yyval.interm) = (yyvsp[-1].interm);
 6245|  4.40k|    }
 6246|  4.40k|#line 6247 "MachineIndependent/glslang_tab.cpp"
 6247|  4.40k|    break;
 6248|       |
 6249|  4.40k|  case 39: /* function_identifier: type_specifier  */
  ------------------
  |  Branch (6249:3): [True: 4.40k, False: 314M]
  ------------------
 6250|  4.40k|#line 574 "MachineIndependent/glslang.y"
 6251|  4.40k|                     {
 6252|       |        // Constructor
 6253|  4.40k|        (yyval.interm).intermNode = 0;
 6254|  4.40k|        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
  ------------------
  |  |  783|  4.40k|#define parseContext (*pParseContext)
  ------------------
 6255|  4.40k|    }
 6256|  4.40k|#line 6257 "MachineIndependent/glslang_tab.cpp"
 6257|  4.40k|    break;
 6258|       |
 6259|      3|  case 40: /* function_identifier: postfix_expression  */
  ------------------
  |  Branch (6259:3): [True: 3, False: 314M]
  ------------------
 6260|      3|#line 579 "MachineIndependent/glslang.y"
 6261|      3|                         {
 6262|       |        //
 6263|       |        // Should be a method or subroutine call, but we haven't recognized the arguments yet.
 6264|       |        //
 6265|      3|        (yyval.interm).function = 0;
 6266|      3|        (yyval.interm).intermNode = 0;
 6267|       |
 6268|      3|        TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode();
 6269|      3|        if (method) {
  ------------------
  |  Branch (6269:13): [True: 0, False: 3]
  ------------------
 6270|      0|            (yyval.interm).function = new TFunction(&method->getMethodName(), method->getType(), EOpArrayLength);
 6271|      0|            (yyval.interm).intermNode = method->getObject();
 6272|      3|        } else {
 6273|      3|            TIntermSymbol* symbol = (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode();
 6274|      3|            if (symbol) {
  ------------------
  |  Branch (6274:17): [True: 3, False: 0]
  ------------------
 6275|      3|                parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName());
  ------------------
  |  |  783|      3|#define parseContext (*pParseContext)
  ------------------
 6276|      3|                TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid));
 6277|      3|                (yyval.interm).function = function;
 6278|      3|            } else
 6279|      0|                parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "function call, method, or subroutine call expected", "", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6280|      3|        }
 6281|       |
 6282|      3|        if ((yyval.interm).function == 0) {
  ------------------
  |  Branch (6282:13): [True: 0, False: 3]
  ------------------
 6283|       |            // error recover
 6284|      0|            TString* empty = NewPoolTString("");
 6285|      0|            (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
 6286|      0|        }
 6287|      3|    }
 6288|      3|#line 6289 "MachineIndependent/glslang_tab.cpp"
 6289|      3|    break;
 6290|       |
 6291|      0|  case 41: /* function_identifier: non_uniform_qualifier  */
  ------------------
  |  Branch (6291:3): [True: 0, False: 314M]
  ------------------
 6292|      0|#line 606 "MachineIndependent/glslang.y"
 6293|      0|                            {
 6294|       |        // Constructor
 6295|      0|        (yyval.interm).intermNode = 0;
 6296|      0|        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6297|      0|    }
 6298|      0|#line 6299 "MachineIndependent/glslang_tab.cpp"
 6299|      0|    break;
 6300|       |
 6301|   306k|  case 42: /* unary_expression: postfix_expression  */
  ------------------
  |  Branch (6301:3): [True: 306k, False: 314M]
  ------------------
 6302|   306k|#line 614 "MachineIndependent/glslang.y"
 6303|   306k|                         {
 6304|   306k|        parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|   306k|#define parseContext (*pParseContext)
  ------------------
 6305|   306k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6306|   306k|        if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
  ------------------
  |  Branch (6306:28): [True: 0, False: 306k]
  ------------------
 6307|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6308|   306k|    }
 6309|   306k|#line 6310 "MachineIndependent/glslang_tab.cpp"
 6310|   306k|    break;
 6311|       |
 6312|      0|  case 43: /* unary_expression: INC_OP unary_expression  */
  ------------------
  |  Branch (6312:3): [True: 0, False: 314M]
  ------------------
 6313|      0|#line 620 "MachineIndependent/glslang.y"
 6314|      0|                              {
 6315|      0|        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6316|      0|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6317|      0|    }
 6318|      0|#line 6319 "MachineIndependent/glslang_tab.cpp"
 6319|      0|    break;
 6320|       |
 6321|      2|  case 44: /* unary_expression: DEC_OP unary_expression  */
  ------------------
  |  Branch (6321:3): [True: 2, False: 314M]
  ------------------
 6322|      2|#line 624 "MachineIndependent/glslang.y"
 6323|      2|                              {
 6324|      2|        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6325|      2|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6326|      2|    }
 6327|      2|#line 6328 "MachineIndependent/glslang_tab.cpp"
 6328|      2|    break;
 6329|       |
 6330|    896|  case 45: /* unary_expression: unary_operator unary_expression  */
  ------------------
  |  Branch (6330:3): [True: 896, False: 314M]
  ------------------
 6331|    896|#line 628 "MachineIndependent/glslang.y"
 6332|    896|                                      {
 6333|    896|        if ((yyvsp[-1].interm).op != EOpNull) {
  ------------------
  |  Branch (6333:13): [True: 896, False: 0]
  ------------------
 6334|    896|            char errorOp[2] = {0, 0};
 6335|    896|            switch((yyvsp[-1].interm).op) {
 6336|    895|            case EOpNegative:   errorOp[0] = '-'; break;
  ------------------
  |  Branch (6336:13): [True: 895, False: 1]
  ------------------
 6337|      0|            case EOpLogicalNot: errorOp[0] = '!'; break;
  ------------------
  |  Branch (6337:13): [True: 0, False: 896]
  ------------------
 6338|      1|            case EOpBitwiseNot: errorOp[0] = '~'; break;
  ------------------
  |  Branch (6338:13): [True: 1, False: 895]
  ------------------
 6339|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (6339:13): [True: 0, False: 896]
  ------------------
 6340|    896|            }
 6341|    896|            (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].interm).loc, errorOp, (yyvsp[-1].interm).op, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|    896|#define parseContext (*pParseContext)
  ------------------
 6342|    896|        } else {
 6343|      0|            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6344|      0|            if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
  ------------------
  |  Branch (6344:17): [True: 0, False: 0]
  ------------------
 6345|      0|                (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
 6346|      0|        }
 6347|    896|    }
 6348|    896|#line 6349 "MachineIndependent/glslang_tab.cpp"
 6349|    896|    break;
 6350|       |
 6351|    896|  case 46: /* unary_expression: LEFT_PAREN type_specifier_nonarray RIGHT_PAREN unary_expression  */
  ------------------
  |  Branch (6351:3): [True: 0, False: 314M]
  ------------------
 6352|      0|#line 644 "MachineIndependent/glslang.y"
 6353|      0|                                                                      {
 6354|      0|        (yyval.interm.intermTypedNode) = parseContext.handleTypeCast((yyvsp[-3].lex).loc, new TType((yyvsp[-2].interm.type)), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6355|      0|    }
 6356|      0|#line 6357 "MachineIndependent/glslang_tab.cpp"
 6357|      0|    break;
 6358|       |
 6359|      2|  case 47: /* unary_operator: PLUS  */
  ------------------
  |  Branch (6359:3): [True: 2, False: 314M]
  ------------------
 6360|      2|#line 651 "MachineIndependent/glslang.y"
 6361|      2|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
 6362|      2|#line 6363 "MachineIndependent/glslang_tab.cpp"
 6363|      2|    break;
 6364|       |
 6365|    896|  case 48: /* unary_operator: DASH  */
  ------------------
  |  Branch (6365:3): [True: 896, False: 314M]
  ------------------
 6366|    896|#line 652 "MachineIndependent/glslang.y"
 6367|    896|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
 6368|    896|#line 6369 "MachineIndependent/glslang_tab.cpp"
 6369|    896|    break;
 6370|       |
 6371|      1|  case 49: /* unary_operator: BANG  */
  ------------------
  |  Branch (6371:3): [True: 1, False: 314M]
  ------------------
 6372|      1|#line 653 "MachineIndependent/glslang.y"
 6373|      1|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
 6374|      1|#line 6375 "MachineIndependent/glslang_tab.cpp"
 6375|      1|    break;
 6376|       |
 6377|      1|  case 50: /* unary_operator: TILDE  */
  ------------------
  |  Branch (6377:3): [True: 1, False: 314M]
  ------------------
 6378|      1|#line 654 "MachineIndependent/glslang.y"
 6379|      1|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
 6380|      1|              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 6381|      1|#line 6382 "MachineIndependent/glslang_tab.cpp"
 6382|      1|    break;
 6383|       |
 6384|   289k|  case 51: /* multiplicative_expression: unary_expression  */
  ------------------
  |  Branch (6384:3): [True: 289k, False: 314M]
  ------------------
 6385|   289k|#line 660 "MachineIndependent/glslang.y"
 6386|   289k|                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6387|   289k|#line 6388 "MachineIndependent/glslang_tab.cpp"
 6388|   289k|    break;
 6389|       |
 6390|      3|  case 52: /* multiplicative_expression: multiplicative_expression STAR unary_expression  */
  ------------------
  |  Branch (6390:3): [True: 3, False: 314M]
  ------------------
 6391|      3|#line 661 "MachineIndependent/glslang.y"
 6392|      3|                                                      {
 6393|      3|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      3|#define parseContext (*pParseContext)
  ------------------
 6394|      3|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6394:13): [True: 0, False: 3]
  ------------------
 6395|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6396|      3|    }
 6397|      3|#line 6398 "MachineIndependent/glslang_tab.cpp"
 6398|      3|    break;
 6399|       |
 6400|      0|  case 53: /* multiplicative_expression: multiplicative_expression SLASH unary_expression  */
  ------------------
  |  Branch (6400:3): [True: 0, False: 314M]
  ------------------
 6401|      0|#line 666 "MachineIndependent/glslang.y"
 6402|      0|                                                       {
 6403|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6404|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6404:13): [True: 0, False: 0]
  ------------------
 6405|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6406|      0|    }
 6407|      0|#line 6408 "MachineIndependent/glslang_tab.cpp"
 6408|      0|    break;
 6409|       |
 6410|      0|  case 54: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression  */
  ------------------
  |  Branch (6410:3): [True: 0, False: 314M]
  ------------------
 6411|      0|#line 671 "MachineIndependent/glslang.y"
 6412|      0|                                                         {
 6413|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6414|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6415|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6415:13): [True: 0, False: 0]
  ------------------
 6416|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6417|      0|    }
 6418|      0|#line 6419 "MachineIndependent/glslang_tab.cpp"
 6419|      0|    break;
 6420|       |
 6421|   289k|  case 55: /* additive_expression: multiplicative_expression  */
  ------------------
  |  Branch (6421:3): [True: 289k, False: 314M]
  ------------------
 6422|   289k|#line 680 "MachineIndependent/glslang.y"
 6423|   289k|                                { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6424|   289k|#line 6425 "MachineIndependent/glslang_tab.cpp"
 6425|   289k|    break;
 6426|       |
 6427|      0|  case 56: /* additive_expression: additive_expression PLUS multiplicative_expression  */
  ------------------
  |  Branch (6427:3): [True: 0, False: 314M]
  ------------------
 6428|      0|#line 681 "MachineIndependent/glslang.y"
 6429|      0|                                                         {
 6430|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6431|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6431:13): [True: 0, False: 0]
  ------------------
 6432|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6433|      0|    }
 6434|      0|#line 6435 "MachineIndependent/glslang_tab.cpp"
 6435|      0|    break;
 6436|       |
 6437|      0|  case 57: /* additive_expression: additive_expression DASH multiplicative_expression  */
  ------------------
  |  Branch (6437:3): [True: 0, False: 314M]
  ------------------
 6438|      0|#line 686 "MachineIndependent/glslang.y"
 6439|      0|                                                         {
 6440|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6441|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6441:13): [True: 0, False: 0]
  ------------------
 6442|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6443|      0|    }
 6444|      0|#line 6445 "MachineIndependent/glslang_tab.cpp"
 6445|      0|    break;
 6446|       |
 6447|   289k|  case 58: /* shift_expression: additive_expression  */
  ------------------
  |  Branch (6447:3): [True: 289k, False: 314M]
  ------------------
 6448|   289k|#line 694 "MachineIndependent/glslang.y"
 6449|   289k|                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6450|   289k|#line 6451 "MachineIndependent/glslang_tab.cpp"
 6451|   289k|    break;
 6452|       |
 6453|      0|  case 59: /* shift_expression: shift_expression LEFT_OP additive_expression  */
  ------------------
  |  Branch (6453:3): [True: 0, False: 314M]
  ------------------
 6454|      0|#line 695 "MachineIndependent/glslang.y"
 6455|      0|                                                   {
 6456|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6457|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6458|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6458:13): [True: 0, False: 0]
  ------------------
 6459|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6460|      0|    }
 6461|      0|#line 6462 "MachineIndependent/glslang_tab.cpp"
 6462|      0|    break;
 6463|       |
 6464|      0|  case 60: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
  ------------------
  |  Branch (6464:3): [True: 0, False: 314M]
  ------------------
 6465|      0|#line 701 "MachineIndependent/glslang.y"
 6466|      0|                                                    {
 6467|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6468|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6469|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6469:13): [True: 0, False: 0]
  ------------------
 6470|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6471|      0|    }
 6472|      0|#line 6473 "MachineIndependent/glslang_tab.cpp"
 6473|      0|    break;
 6474|       |
 6475|   289k|  case 61: /* relational_expression: shift_expression  */
  ------------------
  |  Branch (6475:3): [True: 289k, False: 314M]
  ------------------
 6476|   289k|#line 710 "MachineIndependent/glslang.y"
 6477|   289k|                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6478|   289k|#line 6479 "MachineIndependent/glslang_tab.cpp"
 6479|   289k|    break;
 6480|       |
 6481|      0|  case 62: /* relational_expression: relational_expression LEFT_ANGLE shift_expression  */
  ------------------
  |  Branch (6481:3): [True: 0, False: 314M]
  ------------------
 6482|      0|#line 711 "MachineIndependent/glslang.y"
 6483|      0|                                                        {
 6484|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6485|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6485:13): [True: 0, False: 0]
  ------------------
 6486|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6487|      0|    }
 6488|      0|#line 6489 "MachineIndependent/glslang_tab.cpp"
 6489|      0|    break;
 6490|       |
 6491|      0|  case 63: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression  */
  ------------------
  |  Branch (6491:3): [True: 0, False: 314M]
  ------------------
 6492|      0|#line 716 "MachineIndependent/glslang.y"
 6493|      0|                                                          {
 6494|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6495|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6495:13): [True: 0, False: 0]
  ------------------
 6496|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6497|      0|    }
 6498|      0|#line 6499 "MachineIndependent/glslang_tab.cpp"
 6499|      0|    break;
 6500|       |
 6501|      0|  case 64: /* relational_expression: relational_expression LE_OP shift_expression  */
  ------------------
  |  Branch (6501:3): [True: 0, False: 314M]
  ------------------
 6502|      0|#line 721 "MachineIndependent/glslang.y"
 6503|      0|                                                    {
 6504|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6505|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6505:13): [True: 0, False: 0]
  ------------------
 6506|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6507|      0|    }
 6508|      0|#line 6509 "MachineIndependent/glslang_tab.cpp"
 6509|      0|    break;
 6510|       |
 6511|      0|  case 65: /* relational_expression: relational_expression GE_OP shift_expression  */
  ------------------
  |  Branch (6511:3): [True: 0, False: 314M]
  ------------------
 6512|      0|#line 726 "MachineIndependent/glslang.y"
 6513|      0|                                                    {
 6514|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6515|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6515:13): [True: 0, False: 0]
  ------------------
 6516|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6517|      0|    }
 6518|      0|#line 6519 "MachineIndependent/glslang_tab.cpp"
 6519|      0|    break;
 6520|       |
 6521|   289k|  case 66: /* equality_expression: relational_expression  */
  ------------------
  |  Branch (6521:3): [True: 289k, False: 314M]
  ------------------
 6522|   289k|#line 734 "MachineIndependent/glslang.y"
 6523|   289k|                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6524|   289k|#line 6525 "MachineIndependent/glslang_tab.cpp"
 6525|   289k|    break;
 6526|       |
 6527|      0|  case 67: /* equality_expression: equality_expression EQ_OP relational_expression  */
  ------------------
  |  Branch (6527:3): [True: 0, False: 314M]
  ------------------
 6528|      0|#line 735 "MachineIndependent/glslang.y"
 6529|      0|                                                       {
 6530|      0|        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6531|      0|        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6532|      0|        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6533|      0|        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6534|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "==", EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6535|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6535:13): [True: 0, False: 0]
  ------------------
 6536|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6537|      0|    }
 6538|      0|#line 6539 "MachineIndependent/glslang_tab.cpp"
 6539|      0|    break;
 6540|       |
 6541|      0|  case 68: /* equality_expression: equality_expression NE_OP relational_expression  */
  ------------------
  |  Branch (6541:3): [True: 0, False: 314M]
  ------------------
 6542|      0|#line 744 "MachineIndependent/glslang.y"
 6543|      0|                                                      {
 6544|      0|        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6545|      0|        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6546|      0|        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6547|      0|        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6548|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "!=", EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6549|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6549:13): [True: 0, False: 0]
  ------------------
 6550|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6551|      0|    }
 6552|      0|#line 6553 "MachineIndependent/glslang_tab.cpp"
 6553|      0|    break;
 6554|       |
 6555|   289k|  case 69: /* and_expression: equality_expression  */
  ------------------
  |  Branch (6555:3): [True: 289k, False: 314M]
  ------------------
 6556|   289k|#line 756 "MachineIndependent/glslang.y"
 6557|   289k|                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6558|   289k|#line 6559 "MachineIndependent/glslang_tab.cpp"
 6559|   289k|    break;
 6560|       |
 6561|      0|  case 70: /* and_expression: and_expression AMPERSAND equality_expression  */
  ------------------
  |  Branch (6561:3): [True: 0, False: 314M]
  ------------------
 6562|      0|#line 757 "MachineIndependent/glslang.y"
 6563|      0|                                                   {
 6564|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6565|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6566|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6566:13): [True: 0, False: 0]
  ------------------
 6567|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6568|      0|    }
 6569|      0|#line 6570 "MachineIndependent/glslang_tab.cpp"
 6570|      0|    break;
 6571|       |
 6572|   289k|  case 71: /* exclusive_or_expression: and_expression  */
  ------------------
  |  Branch (6572:3): [True: 289k, False: 314M]
  ------------------
 6573|   289k|#line 766 "MachineIndependent/glslang.y"
 6574|   289k|                     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6575|   289k|#line 6576 "MachineIndependent/glslang_tab.cpp"
 6576|   289k|    break;
 6577|       |
 6578|      0|  case 72: /* exclusive_or_expression: exclusive_or_expression CARET and_expression  */
  ------------------
  |  Branch (6578:3): [True: 0, False: 314M]
  ------------------
 6579|      0|#line 767 "MachineIndependent/glslang.y"
 6580|      0|                                                   {
 6581|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6582|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6583|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6583:13): [True: 0, False: 0]
  ------------------
 6584|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6585|      0|    }
 6586|      0|#line 6587 "MachineIndependent/glslang_tab.cpp"
 6587|      0|    break;
 6588|       |
 6589|   289k|  case 73: /* inclusive_or_expression: exclusive_or_expression  */
  ------------------
  |  Branch (6589:3): [True: 289k, False: 314M]
  ------------------
 6590|   289k|#line 776 "MachineIndependent/glslang.y"
 6591|   289k|                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6592|   289k|#line 6593 "MachineIndependent/glslang_tab.cpp"
 6593|   289k|    break;
 6594|       |
 6595|      0|  case 74: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression  */
  ------------------
  |  Branch (6595:3): [True: 0, False: 314M]
  ------------------
 6596|      0|#line 777 "MachineIndependent/glslang.y"
 6597|      0|                                                                   {
 6598|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6599|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6600|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6600:13): [True: 0, False: 0]
  ------------------
 6601|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6602|      0|    }
 6603|      0|#line 6604 "MachineIndependent/glslang_tab.cpp"
 6604|      0|    break;
 6605|       |
 6606|   289k|  case 75: /* logical_and_expression: inclusive_or_expression  */
  ------------------
  |  Branch (6606:3): [True: 289k, False: 314M]
  ------------------
 6607|   289k|#line 786 "MachineIndependent/glslang.y"
 6608|   289k|                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6609|   289k|#line 6610 "MachineIndependent/glslang_tab.cpp"
 6610|   289k|    break;
 6611|       |
 6612|      0|  case 76: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
  ------------------
  |  Branch (6612:3): [True: 0, False: 314M]
  ------------------
 6613|      0|#line 787 "MachineIndependent/glslang.y"
 6614|      0|                                                            {
 6615|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6616|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6616:13): [True: 0, False: 0]
  ------------------
 6617|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6618|      0|    }
 6619|      0|#line 6620 "MachineIndependent/glslang_tab.cpp"
 6620|      0|    break;
 6621|       |
 6622|   289k|  case 77: /* logical_xor_expression: logical_and_expression  */
  ------------------
  |  Branch (6622:3): [True: 289k, False: 314M]
  ------------------
 6623|   289k|#line 795 "MachineIndependent/glslang.y"
 6624|   289k|                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6625|   289k|#line 6626 "MachineIndependent/glslang_tab.cpp"
 6626|   289k|    break;
 6627|       |
 6628|      0|  case 78: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression  */
  ------------------
  |  Branch (6628:3): [True: 0, False: 314M]
  ------------------
 6629|      0|#line 796 "MachineIndependent/glslang.y"
 6630|      0|                                                            {
 6631|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6632|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6632:13): [True: 0, False: 0]
  ------------------
 6633|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6634|      0|    }
 6635|      0|#line 6636 "MachineIndependent/glslang_tab.cpp"
 6636|      0|    break;
 6637|       |
 6638|   289k|  case 79: /* logical_or_expression: logical_xor_expression  */
  ------------------
  |  Branch (6638:3): [True: 289k, False: 314M]
  ------------------
 6639|   289k|#line 804 "MachineIndependent/glslang.y"
 6640|   289k|                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6641|   289k|#line 6642 "MachineIndependent/glslang_tab.cpp"
 6642|   289k|    break;
 6643|       |
 6644|      0|  case 80: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression  */
  ------------------
  |  Branch (6644:3): [True: 0, False: 314M]
  ------------------
 6645|      0|#line 805 "MachineIndependent/glslang.y"
 6646|      0|                                                          {
 6647|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6648|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6648:13): [True: 0, False: 0]
  ------------------
 6649|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6650|      0|    }
 6651|      0|#line 6652 "MachineIndependent/glslang_tab.cpp"
 6652|      0|    break;
 6653|       |
 6654|   289k|  case 81: /* conditional_expression: logical_or_expression  */
  ------------------
  |  Branch (6654:3): [True: 289k, False: 314M]
  ------------------
 6655|   289k|#line 813 "MachineIndependent/glslang.y"
 6656|   289k|                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6657|   289k|#line 6658 "MachineIndependent/glslang_tab.cpp"
 6658|   289k|    break;
 6659|       |
 6660|      2|  case 82: /* $@1: %empty  */
  ------------------
  |  Branch (6660:3): [True: 2, False: 314M]
  ------------------
 6661|      2|#line 814 "MachineIndependent/glslang.y"
 6662|      2|                                     {
 6663|      2|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6664|      2|    }
 6665|      2|#line 6666 "MachineIndependent/glslang_tab.cpp"
 6666|      2|    break;
 6667|       |
 6668|      2|  case 83: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression  */
  ------------------
  |  Branch (6668:3): [True: 2, False: 314M]
  ------------------
 6669|      2|#line 817 "MachineIndependent/glslang.y"
 6670|      2|                                             {
 6671|      2|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6672|      2|        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6673|      2|        parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6674|      2|        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6675|      2|        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6676|      2|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc);
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
 6677|      2|        if ((yyval.interm.intermTypedNode) == 0) {
  ------------------
  |  Branch (6677:13): [True: 0, False: 2]
  ------------------
 6678|      0|            parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6679|      0|            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6680|      0|        }
 6681|      2|    }
 6682|      2|#line 6683 "MachineIndependent/glslang_tab.cpp"
 6683|      2|    break;
 6684|       |
 6685|   182k|  case 84: /* assignment_expression: conditional_expression  */
  ------------------
  |  Branch (6685:3): [True: 182k, False: 314M]
  ------------------
 6686|   182k|#line 832 "MachineIndependent/glslang.y"
 6687|   182k|                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6688|   182k|#line 6689 "MachineIndependent/glslang_tab.cpp"
 6689|   182k|    break;
 6690|       |
 6691|      0|  case 85: /* assignment_expression: unary_expression assignment_operator assignment_expression  */
  ------------------
  |  Branch (6691:3): [True: 0, False: 314M]
  ------------------
 6692|      0|#line 833 "MachineIndependent/glslang.y"
 6693|      0|                                                                 {
 6694|      0|        parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6695|      0|        parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6696|      0|        parseContext.storage16BitAssignmentCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6697|      0|        parseContext.specializationCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6698|      0|        parseContext.lValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6699|      0|        parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6700|      0|        (yyval.interm.intermTypedNode) = parseContext.addAssign((yyvsp[-1].interm).loc, (yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6701|      0|        if ((yyval.interm.intermTypedNode) == 0) {
  ------------------
  |  Branch (6701:13): [True: 0, False: 0]
  ------------------
 6702|      0|            parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6703|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6704|      0|        }
 6705|      0|    }
 6706|      0|#line 6707 "MachineIndependent/glslang_tab.cpp"
 6707|      0|    break;
 6708|       |
 6709|      0|  case 86: /* assignment_operator: EQUAL  */
  ------------------
  |  Branch (6709:3): [True: 0, False: 314M]
  ------------------
 6710|      0|#line 849 "MachineIndependent/glslang.y"
 6711|      0|            {
 6712|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6713|      0|        (yyval.interm).op = EOpAssign;
 6714|      0|    }
 6715|      0|#line 6716 "MachineIndependent/glslang_tab.cpp"
 6716|      0|    break;
 6717|       |
 6718|      0|  case 87: /* assignment_operator: MUL_ASSIGN  */
  ------------------
  |  Branch (6718:3): [True: 0, False: 314M]
  ------------------
 6719|      0|#line 853 "MachineIndependent/glslang.y"
 6720|      0|                 {
 6721|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6722|      0|        (yyval.interm).op = EOpMulAssign;
 6723|      0|    }
 6724|      0|#line 6725 "MachineIndependent/glslang_tab.cpp"
 6725|      0|    break;
 6726|       |
 6727|      0|  case 88: /* assignment_operator: DIV_ASSIGN  */
  ------------------
  |  Branch (6727:3): [True: 0, False: 314M]
  ------------------
 6728|      0|#line 857 "MachineIndependent/glslang.y"
 6729|      0|                 {
 6730|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6731|      0|        (yyval.interm).op = EOpDivAssign;
 6732|      0|    }
 6733|      0|#line 6734 "MachineIndependent/glslang_tab.cpp"
 6734|      0|    break;
 6735|       |
 6736|      0|  case 89: /* assignment_operator: MOD_ASSIGN  */
  ------------------
  |  Branch (6736:3): [True: 0, False: 314M]
  ------------------
 6737|      0|#line 861 "MachineIndependent/glslang.y"
 6738|      0|                 {
 6739|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6740|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6741|      0|        (yyval.interm).op = EOpModAssign;
 6742|      0|    }
 6743|      0|#line 6744 "MachineIndependent/glslang_tab.cpp"
 6744|      0|    break;
 6745|       |
 6746|      0|  case 90: /* assignment_operator: ADD_ASSIGN  */
  ------------------
  |  Branch (6746:3): [True: 0, False: 314M]
  ------------------
 6747|      0|#line 866 "MachineIndependent/glslang.y"
 6748|      0|                 {
 6749|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6750|      0|        (yyval.interm).op = EOpAddAssign;
 6751|      0|    }
 6752|      0|#line 6753 "MachineIndependent/glslang_tab.cpp"
 6753|      0|    break;
 6754|       |
 6755|      0|  case 91: /* assignment_operator: SUB_ASSIGN  */
  ------------------
  |  Branch (6755:3): [True: 0, False: 314M]
  ------------------
 6756|      0|#line 870 "MachineIndependent/glslang.y"
 6757|      0|                 {
 6758|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6759|      0|        (yyval.interm).op = EOpSubAssign;
 6760|      0|    }
 6761|      0|#line 6762 "MachineIndependent/glslang_tab.cpp"
 6762|      0|    break;
 6763|       |
 6764|      0|  case 92: /* assignment_operator: LEFT_ASSIGN  */
  ------------------
  |  Branch (6764:3): [True: 0, False: 314M]
  ------------------
 6765|      0|#line 874 "MachineIndependent/glslang.y"
 6766|      0|                  {
 6767|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6768|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
 6769|      0|    }
 6770|      0|#line 6771 "MachineIndependent/glslang_tab.cpp"
 6771|      0|    break;
 6772|       |
 6773|      0|  case 93: /* assignment_operator: RIGHT_ASSIGN  */
  ------------------
  |  Branch (6773:3): [True: 0, False: 314M]
  ------------------
 6774|      0|#line 878 "MachineIndependent/glslang.y"
 6775|      0|                   {
 6776|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6777|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
 6778|      0|    }
 6779|      0|#line 6780 "MachineIndependent/glslang_tab.cpp"
 6780|      0|    break;
 6781|       |
 6782|      0|  case 94: /* assignment_operator: AND_ASSIGN  */
  ------------------
  |  Branch (6782:3): [True: 0, False: 314M]
  ------------------
 6783|      0|#line 882 "MachineIndependent/glslang.y"
 6784|      0|                 {
 6785|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6786|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
 6787|      0|    }
 6788|      0|#line 6789 "MachineIndependent/glslang_tab.cpp"
 6789|      0|    break;
 6790|       |
 6791|      0|  case 95: /* assignment_operator: XOR_ASSIGN  */
  ------------------
  |  Branch (6791:3): [True: 0, False: 314M]
  ------------------
 6792|      0|#line 886 "MachineIndependent/glslang.y"
 6793|      0|                 {
 6794|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6795|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
 6796|      0|    }
 6797|      0|#line 6798 "MachineIndependent/glslang_tab.cpp"
 6798|      0|    break;
 6799|       |
 6800|      0|  case 96: /* assignment_operator: OR_ASSIGN  */
  ------------------
  |  Branch (6800:3): [True: 0, False: 314M]
  ------------------
 6801|      0|#line 890 "MachineIndependent/glslang.y"
 6802|      0|                {
 6803|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6804|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
 6805|      0|    }
 6806|      0|#line 6807 "MachineIndependent/glslang_tab.cpp"
 6807|      0|    break;
 6808|       |
 6809|      4|  case 97: /* expression: assignment_expression  */
  ------------------
  |  Branch (6809:3): [True: 4, False: 314M]
  ------------------
 6810|      4|#line 897 "MachineIndependent/glslang.y"
 6811|      4|                            {
 6812|      4|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6813|      4|    }
 6814|      4|#line 6815 "MachineIndependent/glslang_tab.cpp"
 6815|      4|    break;
 6816|       |
 6817|      1|  case 98: /* expression: expression COMMA assignment_expression  */
  ------------------
  |  Branch (6817:3): [True: 1, False: 314M]
  ------------------
 6818|      1|#line 900 "MachineIndependent/glslang.y"
 6819|      1|                                             {
 6820|      1|        parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 6821|      1|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 6822|      1|        if ((yyval.interm.intermTypedNode) == 0) {
  ------------------
  |  Branch (6822:13): [True: 0, False: 1]
  ------------------
 6823|      0|            parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6824|      0|            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6825|      0|        }
 6826|      1|    }
 6827|      1|#line 6828 "MachineIndependent/glslang_tab.cpp"
 6828|      1|    break;
 6829|       |
 6830|      1|  case 99: /* constant_expression: conditional_expression  */
  ------------------
  |  Branch (6830:3): [True: 1, False: 314M]
  ------------------
 6831|      1|#line 911 "MachineIndependent/glslang.y"
 6832|      1|                             {
 6833|      1|        parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
 6834|      1|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6835|      1|    }
 6836|      1|#line 6837 "MachineIndependent/glslang_tab.cpp"
 6837|      1|    break;
 6838|       |
 6839|  11.0M|  case 100: /* declaration: function_prototype SEMICOLON  */
  ------------------
  |  Branch (6839:3): [True: 11.0M, False: 303M]
  ------------------
 6840|  11.0M|#line 918 "MachineIndependent/glslang.y"
 6841|  11.0M|                                   {
 6842|  11.0M|        parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
  ------------------
  |  |  783|  11.0M|#define parseContext (*pParseContext)
  ------------------
 6843|  11.0M|        (yyval.interm.intermNode) = 0;
 6844|       |        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
 6845|  11.0M|    }
 6846|  11.0M|#line 6847 "MachineIndependent/glslang_tab.cpp"
 6847|  11.0M|    break;
 6848|       |
 6849|      0|  case 101: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON  */
  ------------------
  |  Branch (6849:3): [True: 0, False: 314M]
  ------------------
 6850|      0|#line 923 "MachineIndependent/glslang.y"
 6851|      0|                                                               {
 6852|      0|        parseContext.requireExtensions((yyvsp[-1].interm).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6853|      0|        (yyvsp[-1].interm).function->setSpirvInstruction(*(yyvsp[-2].interm.spirvInst)); // Attach SPIR-V intruction qualifier
 6854|      0|        parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6855|      0|        (yyval.interm.intermNode) = 0;
 6856|       |        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
 6857|      0|    }
 6858|      0|#line 6859 "MachineIndependent/glslang_tab.cpp"
 6859|      0|    break;
 6860|       |
 6861|      0|  case 102: /* declaration: spirv_execution_mode_qualifier SEMICOLON  */
  ------------------
  |  Branch (6861:3): [True: 0, False: 314M]
  ------------------
 6862|      0|#line 930 "MachineIndependent/glslang.y"
 6863|      0|                                               {
 6864|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "SPIR-V execution mode qualifier");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6865|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6866|      0|        (yyval.interm.intermNode) = 0;
 6867|      0|    }
 6868|      0|#line 6869 "MachineIndependent/glslang_tab.cpp"
 6869|      0|    break;
 6870|       |
 6871|   422k|  case 103: /* declaration: init_declarator_list SEMICOLON  */
  ------------------
  |  Branch (6871:3): [True: 422k, False: 314M]
  ------------------
 6872|   422k|#line 935 "MachineIndependent/glslang.y"
 6873|   422k|                                     {
 6874|   422k|        if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
  ------------------
  |  Branch (6874:13): [True: 0, False: 422k]
  |  Branch (6874:46): [True: 0, False: 0]
  ------------------
 6875|      0|            (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
 6876|   422k|        (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
 6877|   422k|    }
 6878|   422k|#line 6879 "MachineIndependent/glslang_tab.cpp"
 6879|   422k|    break;
 6880|       |
 6881|      0|  case 104: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON  */
  ------------------
  |  Branch (6881:3): [True: 0, False: 314M]
  ------------------
 6882|      0|#line 940 "MachineIndependent/glslang.y"
 6883|      0|                                                             {
 6884|      0|        parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6885|       |        // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
 6886|      0|        parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6887|      0|        parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6888|      0|        (yyval.interm.intermNode) = 0;
 6889|      0|    }
 6890|      0|#line 6891 "MachineIndependent/glslang_tab.cpp"
 6891|      0|    break;
 6892|       |
 6893|  2.85k|  case 105: /* declaration: block_structure SEMICOLON  */
  ------------------
  |  Branch (6893:3): [True: 2.85k, False: 314M]
  ------------------
 6894|  2.85k|#line 947 "MachineIndependent/glslang.y"
 6895|  2.85k|                                {
 6896|  2.85k|        (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
  ------------------
  |  |  783|  2.85k|#define parseContext (*pParseContext)
  ------------------
 6897|  2.85k|    }
 6898|  2.85k|#line 6899 "MachineIndependent/glslang_tab.cpp"
 6899|  2.85k|    break;
 6900|       |
 6901|      0|  case 106: /* declaration: block_structure IDENTIFIER SEMICOLON  */
  ------------------
  |  Branch (6901:3): [True: 0, False: 314M]
  ------------------
 6902|      0|#line 950 "MachineIndependent/glslang.y"
 6903|      0|                                           {
 6904|      0|        (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6905|      0|    }
 6906|      0|#line 6907 "MachineIndependent/glslang_tab.cpp"
 6907|      0|    break;
 6908|       |
 6909|  3.68k|  case 107: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON  */
  ------------------
  |  Branch (6909:3): [True: 3.68k, False: 314M]
  ------------------
 6910|  3.68k|#line 953 "MachineIndependent/glslang.y"
 6911|  3.68k|                                                           {
 6912|  3.68k|        (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
  ------------------
  |  |  783|  3.68k|#define parseContext (*pParseContext)
  ------------------
 6913|  3.68k|    }
 6914|  3.68k|#line 6915 "MachineIndependent/glslang_tab.cpp"
 6915|  3.68k|    break;
 6916|       |
 6917|      0|  case 108: /* declaration: type_qualifier SEMICOLON  */
  ------------------
  |  Branch (6917:3): [True: 0, False: 314M]
  ------------------
 6918|      0|#line 956 "MachineIndependent/glslang.y"
 6919|      0|                               {
 6920|      0|        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6921|      0|        parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6922|      0|        (yyval.interm.intermNode) = 0;
 6923|      0|    }
 6924|      0|#line 6925 "MachineIndependent/glslang_tab.cpp"
 6925|      0|    break;
 6926|       |
 6927|      0|  case 109: /* declaration: type_qualifier identifier_list SEMICOLON  */
  ------------------
  |  Branch (6927:3): [True: 0, False: 314M]
  ------------------
 6928|      0|#line 961 "MachineIndependent/glslang.y"
 6929|      0|                                               {
 6930|      0|        parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6931|      0|        parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6932|      0|        (yyval.interm.intermNode) = 0;
 6933|      0|    }
 6934|      0|#line 6935 "MachineIndependent/glslang_tab.cpp"
 6935|      0|    break;
 6936|       |
 6937|  6.53k|  case 110: /* $@2: %empty  */
  ------------------
  |  Branch (6937:3): [True: 6.53k, False: 314M]
  ------------------
 6938|  6.53k|#line 969 "MachineIndependent/glslang.y"
 6939|  6.53k|                                           { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
  ------------------
  |  |  783|  6.53k|#define parseContext (*pParseContext)
  ------------------
 6940|  6.53k|#line 6941 "MachineIndependent/glslang_tab.cpp"
 6941|  6.53k|    break;
 6942|       |
 6943|  6.53k|  case 111: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
  ------------------
  |  Branch (6943:3): [True: 6.53k, False: 314M]
  ------------------
 6944|  6.53k|#line 969 "MachineIndependent/glslang.y"
 6945|  6.53k|                                                                                                                          {
 6946|  6.53k|        --parseContext.blockNestingLevel;
  ------------------
  |  |  783|  6.53k|#define parseContext (*pParseContext)
  ------------------
 6947|  6.53k|        parseContext.blockName = (yyvsp[-4].lex).string;
  ------------------
  |  |  783|  6.53k|#define parseContext (*pParseContext)
  ------------------
 6948|  6.53k|        parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
  ------------------
  |  |  783|  6.53k|#define parseContext (*pParseContext)
  ------------------
 6949|  6.53k|        parseContext.checkNoShaderLayouts((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).shaderQualifiers);
  ------------------
  |  |  783|  6.53k|#define parseContext (*pParseContext)
  ------------------
 6950|  6.53k|        parseContext.currentBlockQualifier = (yyvsp[-5].interm.type).qualifier;
  ------------------
  |  |  783|  13.0k|#define parseContext (*pParseContext)
  ------------------
 6951|  6.53k|        (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
 6952|  6.53k|        (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
 6953|  6.53k|    }
 6954|  6.53k|#line 6955 "MachineIndependent/glslang_tab.cpp"
 6955|  6.53k|    break;
 6956|       |
 6957|      1|  case 112: /* identifier_list: IDENTIFIER  */
  ------------------
  |  Branch (6957:3): [True: 1, False: 314M]
  ------------------
 6958|      1|#line 981 "MachineIndependent/glslang.y"
 6959|      1|                 {
 6960|      1|        (yyval.interm.identifierList) = new TIdentifierList;
 6961|      1|        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
 6962|      1|    }
 6963|      1|#line 6964 "MachineIndependent/glslang_tab.cpp"
 6964|      1|    break;
 6965|       |
 6966|      0|  case 113: /* identifier_list: identifier_list COMMA IDENTIFIER  */
  ------------------
  |  Branch (6966:3): [True: 0, False: 314M]
  ------------------
 6967|      0|#line 985 "MachineIndependent/glslang.y"
 6968|      0|                                       {
 6969|      0|        (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
 6970|      0|        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
 6971|      0|    }
 6972|      0|#line 6973 "MachineIndependent/glslang_tab.cpp"
 6973|      0|    break;
 6974|       |
 6975|  11.0M|  case 114: /* function_prototype: function_declarator RIGHT_PAREN  */
  ------------------
  |  Branch (6975:3): [True: 11.0M, False: 303M]
  ------------------
 6976|  11.0M|#line 992 "MachineIndependent/glslang.y"
 6977|  11.0M|                                       {
 6978|  11.0M|        (yyval.interm).function = (yyvsp[-1].interm.function);
 6979|  11.0M|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  783|  11.0M|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6979:13): [True: 0, False: 11.0M]
  ------------------
 6980|  11.0M|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6981|  11.0M|    }
 6982|  11.0M|#line 6983 "MachineIndependent/glslang_tab.cpp"
 6983|  11.0M|    break;
 6984|       |
 6985|      0|  case 115: /* function_prototype: function_declarator RIGHT_PAREN attribute  */
  ------------------
  |  Branch (6985:3): [True: 0, False: 314M]
  ------------------
 6986|      0|#line 997 "MachineIndependent/glslang.y"
 6987|      0|                                                {
 6988|      0|        (yyval.interm).function = (yyvsp[-2].interm.function);
 6989|      0|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6989:13): [True: 0, False: 0]
  ------------------
 6990|      0|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 6991|      0|        const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes };
 6992|      0|        parseContext.requireExtensions((yyvsp[-1].lex).loc, 3, extensions, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6993|      0|        parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyval.interm).function, *(yyvsp[0].interm.attributes));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 6994|      0|    }
 6995|      0|#line 6996 "MachineIndependent/glslang_tab.cpp"
 6996|      0|    break;
 6997|       |
 6998|      0|  case 116: /* function_prototype: attribute function_declarator RIGHT_PAREN  */
  ------------------
  |  Branch (6998:3): [True: 0, False: 314M]
  ------------------
 6999|      0|#line 1005 "MachineIndependent/glslang.y"
 7000|      0|                                                {
 7001|      0|        (yyval.interm).function = (yyvsp[-1].interm.function);
 7002|      0|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7002:13): [True: 0, False: 0]
  ------------------
 7003|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 7004|      0|        const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes };
 7005|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 3, extensions, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7006|      0|        parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyval.interm).function, *(yyvsp[-2].interm.attributes));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7007|      0|    }
 7008|      0|#line 7009 "MachineIndependent/glslang_tab.cpp"
 7009|      0|    break;
 7010|       |
 7011|      0|  case 117: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute  */
  ------------------
  |  Branch (7011:3): [True: 0, False: 314M]
  ------------------
 7012|      0|#line 1013 "MachineIndependent/glslang.y"
 7013|      0|                                                          {
 7014|      0|        (yyval.interm).function = (yyvsp[-2].interm.function);
 7015|      0|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7015:13): [True: 0, False: 0]
  ------------------
 7016|      0|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 7017|      0|        const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes };
 7018|      0|        parseContext.requireExtensions((yyvsp[-1].lex).loc, 3, extensions, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7019|      0|        parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyval.interm).function, *(yyvsp[-3].interm.attributes));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7020|      0|        parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyval.interm).function, *(yyvsp[0].interm.attributes));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7021|      0|    }
 7022|      0|#line 7023 "MachineIndependent/glslang_tab.cpp"
 7023|      0|    break;
 7024|       |
 7025|  33.4k|  case 118: /* function_declarator: function_header  */
  ------------------
  |  Branch (7025:3): [True: 33.4k, False: 314M]
  ------------------
 7026|  33.4k|#line 1025 "MachineIndependent/glslang.y"
 7027|  33.4k|                      {
 7028|  33.4k|        (yyval.interm.function) = (yyvsp[0].interm.function);
 7029|  33.4k|    }
 7030|  33.4k|#line 7031 "MachineIndependent/glslang_tab.cpp"
 7031|  33.4k|    break;
 7032|       |
 7033|  10.9M|  case 119: /* function_declarator: function_header_with_parameters  */
  ------------------
  |  Branch (7033:3): [True: 10.9M, False: 303M]
  ------------------
 7034|  10.9M|#line 1028 "MachineIndependent/glslang.y"
 7035|  10.9M|                                      {
 7036|  10.9M|        (yyval.interm.function) = (yyvsp[0].interm.function);
 7037|  10.9M|    }
 7038|  10.9M|#line 7039 "MachineIndependent/glslang_tab.cpp"
 7039|  10.9M|    break;
 7040|       |
 7041|  10.9M|  case 120: /* function_header_with_parameters: function_header parameter_declaration  */
  ------------------
  |  Branch (7041:3): [True: 10.9M, False: 303M]
  ------------------
 7042|  10.9M|#line 1035 "MachineIndependent/glslang.y"
 7043|  10.9M|                                            {
 7044|       |        // Add the parameter
 7045|  10.9M|        (yyval.interm.function) = (yyvsp[-1].interm.function);
 7046|  10.9M|        if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
  ------------------
  |  Branch (7046:13): [True: 10.9M, False: 1.84k]
  ------------------
 7047|  10.9M|        {
 7048|  10.9M|            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  783|  10.9M|#define parseContext (*pParseContext)
  ------------------
                          if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  783|   682k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7048:19): [True: 682k, False: 10.3M]
  |  Branch (7048:57): [True: 0, False: 682k]
  ------------------
 7049|  10.9M|                (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param);
 7050|      0|            else
 7051|      0|                parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-1].interm.function), (yyvsp[0].interm).param);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7052|  10.9M|        }
 7053|  1.84k|        else
 7054|  1.84k|            delete (yyvsp[0].interm).param.type;
 7055|  10.9M|    }
 7056|  10.9M|#line 7057 "MachineIndependent/glslang_tab.cpp"
 7057|  10.9M|    break;
 7058|       |
 7059|  17.1M|  case 121: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration  */
  ------------------
  |  Branch (7059:3): [True: 17.1M, False: 297M]
  ------------------
 7060|  17.1M|#line 1048 "MachineIndependent/glslang.y"
 7061|  17.1M|                                                                  {
 7062|       |        //
 7063|       |        // Only first parameter of one-parameter functions can be void
 7064|       |        // The check for named parameters not being void is done in parameter_declarator
 7065|       |        //
 7066|  17.1M|        if ((yyvsp[0].interm).param.type->getBasicType() == EbtVoid) {
  ------------------
  |  Branch (7066:13): [True: 0, False: 17.1M]
  ------------------
 7067|       |            //
 7068|       |            // This parameter > first is void
 7069|       |            //
 7070|      0|            parseContext.error((yyvsp[-1].lex).loc, "cannot be an argument type except for '(void)'", "void", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7071|      0|            delete (yyvsp[0].interm).param.type;
 7072|  17.1M|        } else {
 7073|       |            // Add the parameter
 7074|  17.1M|            (yyval.interm.function) = (yyvsp[-2].interm.function);
 7075|  17.1M|            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  783|  17.1M|#define parseContext (*pParseContext)
  ------------------
                          if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  783|  1.25M|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7075:19): [True: 1.25M, False: 15.8M]
  |  Branch (7075:57): [True: 0, False: 1.25M]
  ------------------
 7076|  17.1M|                (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
 7077|      0|            else
 7078|      0|                parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-2].interm.function), (yyvsp[0].interm).param);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7079|  17.1M|        }
 7080|  17.1M|    }
 7081|  17.1M|#line 7082 "MachineIndependent/glslang_tab.cpp"
 7082|  17.1M|    break;
 7083|       |
 7084|  26.6k|  case 122: /* function_header_with_parameters: function_header_with_parameters COMMA DOT DOT DOT  */
  ------------------
  |  Branch (7084:3): [True: 26.6k, False: 314M]
  ------------------
 7085|  26.6k|#line 1068 "MachineIndependent/glslang.y"
 7086|  26.6k|                                                        {
 7087|  26.6k|        (yyval.interm.function) = (yyvsp[-4].interm.function);
 7088|  26.6k|        parseContext.makeVariadic((yyvsp[-4].interm.function), (yyvsp[-2].lex).loc);
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
 7089|  26.6k|    }
 7090|  26.6k|#line 7091 "MachineIndependent/glslang_tab.cpp"
 7091|  26.6k|    break;
 7092|       |
 7093|  11.0M|  case 123: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN  */
  ------------------
  |  Branch (7093:3): [True: 11.0M, False: 303M]
  ------------------
 7094|  11.0M|#line 1075 "MachineIndependent/glslang.y"
 7095|  11.0M|                                                 {
 7096|  11.0M|        if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
  ------------------
  |  Branch (7096:13): [True: 0, False: 11.0M]
  |  Branch (7096:71): [True: 0, False: 0]
  ------------------
 7097|      0|            parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7098|      0|                               GetStorageQualifierString((yyvsp[-2].interm.type).qualifier.storage), "");
 7099|      0|        }
 7100|  11.0M|        if ((yyvsp[-2].interm.type).arraySizes)
  ------------------
  |  Branch (7100:13): [True: 0, False: 11.0M]
  ------------------
 7101|      0|            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7102|       |
 7103|       |        // Add the function as a prototype after parsing it (we do not support recursion)
 7104|  11.0M|        TFunction *function;
 7105|  11.0M|        TType type((yyvsp[-2].interm.type));
 7106|       |
 7107|       |        // Potentially rename shader entry point function.  No-op most of the time.
 7108|  11.0M|        parseContext.renameShaderFunction((yyvsp[-1].lex).string);
  ------------------
  |  |  783|  11.0M|#define parseContext (*pParseContext)
  ------------------
 7109|       |
 7110|       |        // Make the function
 7111|  11.0M|        function = new TFunction((yyvsp[-1].lex).string, type);
 7112|  11.0M|        (yyval.interm.function) = function;
 7113|  11.0M|    }
 7114|  11.0M|#line 7115 "MachineIndependent/glslang_tab.cpp"
 7115|  11.0M|    break;
 7116|       |
 7117|  4.97M|  case 124: /* parameter_declarator: type_specifier IDENTIFIER  */
  ------------------
  |  Branch (7117:3): [True: 4.97M, False: 309M]
  ------------------
 7118|  4.97M|#line 1098 "MachineIndependent/glslang.y"
 7119|  4.97M|                                {
 7120|  4.97M|        if ((yyvsp[-1].interm.type).arraySizes) {
  ------------------
  |  Branch (7120:13): [True: 432k, False: 4.53M]
  ------------------
 7121|   432k|            parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  783|   432k|#define parseContext (*pParseContext)
  ------------------
 7122|   432k|            parseContext.profileRequires((yyvsp[-1].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  783|   432k|#define parseContext (*pParseContext)
  ------------------
 7123|   432k|            parseContext.arraySizeRequiredCheck((yyvsp[-1].interm.type).loc, *(yyvsp[-1].interm.type).arraySizes);
  ------------------
  |  |  783|   432k|#define parseContext (*pParseContext)
  ------------------
 7124|   432k|        }
 7125|  4.97M|        if ((yyvsp[-1].interm.type).basicType == EbtVoid) {
  ------------------
  |  Branch (7125:13): [True: 0, False: 4.97M]
  ------------------
 7126|      0|            parseContext.error((yyvsp[0].lex).loc, "illegal use of type 'void'", (yyvsp[0].lex).string->c_str(), "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7127|      0|        }
 7128|  4.97M|        parseContext.reservedErrorCheck((yyvsp[0].lex).loc, *(yyvsp[0].lex).string);
  ------------------
  |  |  783|  4.97M|#define parseContext (*pParseContext)
  ------------------
 7129|       |
 7130|  4.97M|        TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type)), {}};
 7131|  4.97M|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 7132|  4.97M|        (yyval.interm).param = param;
 7133|  4.97M|    }
 7134|  4.97M|#line 7135 "MachineIndependent/glslang_tab.cpp"
 7135|  4.97M|    break;
 7136|       |
 7137|  96.7k|  case 125: /* parameter_declarator: type_specifier IDENTIFIER array_specifier  */
  ------------------
  |  Branch (7137:3): [True: 96.7k, False: 314M]
  ------------------
 7138|  96.7k|#line 1113 "MachineIndependent/glslang.y"
 7139|  96.7k|                                                {
 7140|  96.7k|        if ((yyvsp[-2].interm.type).arraySizes) {
  ------------------
  |  Branch (7140:13): [True: 0, False: 96.7k]
  ------------------
 7141|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7142|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7143|      0|            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7144|      0|        }
 7145|  96.7k|        TType* type = new TType((yyvsp[-2].interm.type));
 7146|  96.7k|        type->transferArraySizes((yyvsp[0].interm).arraySizes);
 7147|  96.7k|        type->copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
 7148|       |
 7149|  96.7k|        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, type->getArraySizes());
  ------------------
  |  |  783|  96.7k|#define parseContext (*pParseContext)
  ------------------
 7150|  96.7k|        parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes);
  ------------------
  |  |  783|  96.7k|#define parseContext (*pParseContext)
  ------------------
 7151|  96.7k|        parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string);
  ------------------
  |  |  783|  96.7k|#define parseContext (*pParseContext)
  ------------------
 7152|       |
 7153|  96.7k|        TParameter param = { (yyvsp[-1].lex).string, type, {} };
 7154|       |
 7155|  96.7k|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 7156|  96.7k|        (yyval.interm).param = param;
 7157|  96.7k|    }
 7158|  96.7k|#line 7159 "MachineIndependent/glslang_tab.cpp"
 7159|  96.7k|    break;
 7160|       |
 7161|  26.6k|  case 126: /* parameter_declarator: type_specifier IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (7161:3): [True: 26.6k, False: 314M]
  ------------------
 7162|  26.6k|#line 1132 "MachineIndependent/glslang.y"
 7163|  26.6k|                                                  {
 7164|  26.6k|        TParameter param = parseContext.getParamWithDefault((yyvsp[-3].interm.type), (yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
 7165|  26.6k|        (yyval.interm).loc = (yyvsp[-2].lex).loc;
 7166|  26.6k|        (yyval.interm).param = param;
 7167|  26.6k|    }
 7168|  26.6k|#line 7169 "MachineIndependent/glslang_tab.cpp"
 7169|  26.6k|    break;
 7170|       |
 7171|   482k|  case 127: /* parameter_declaration: type_qualifier parameter_declarator  */
  ------------------
  |  Branch (7171:3): [True: 482k, False: 314M]
  ------------------
 7172|   482k|#line 1143 "MachineIndependent/glslang.y"
 7173|   482k|                                          {
 7174|   482k|        (yyval.interm) = (yyvsp[0].interm);
 7175|   482k|        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
  ------------------
  |  Branch (7175:13): [True: 33.4k, False: 449k]
  ------------------
 7176|  33.4k|            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
 7177|   482k|        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  783|   482k|#define parseContext (*pParseContext)
  ------------------
 7178|       |
 7179|   482k|        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
  ------------------
  |  |  783|   482k|#define parseContext (*pParseContext)
  ------------------
 7180|   482k|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
  ------------------
  |  |  783|   482k|#define parseContext (*pParseContext)
  ------------------
 7181|   482k|        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
  ------------------
  |  |  783|   482k|#define parseContext (*pParseContext)
  ------------------
 7182|       |
 7183|   482k|    }
 7184|   482k|#line 7185 "MachineIndependent/glslang_tab.cpp"
 7185|   482k|    break;
 7186|       |
 7187|  4.61M|  case 128: /* parameter_declaration: parameter_declarator  */
  ------------------
  |  Branch (7187:3): [True: 4.61M, False: 309M]
  ------------------
 7188|  4.61M|#line 1154 "MachineIndependent/glslang.y"
 7189|  4.61M|                           {
 7190|  4.61M|        (yyval.interm) = (yyvsp[0].interm);
 7191|       |
 7192|  4.61M|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
  ------------------
  |  |  783|  4.61M|#define parseContext (*pParseContext)
  ------------------
 7193|  4.61M|        parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
  ------------------
  |  |  783|  4.61M|#define parseContext (*pParseContext)
  ------------------
 7194|  4.61M|        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  783|  4.61M|#define parseContext (*pParseContext)
  ------------------
 7195|  4.61M|    }
 7196|  4.61M|#line 7197 "MachineIndependent/glslang_tab.cpp"
 7197|  4.61M|    break;
 7198|       |
 7199|  2.98M|  case 129: /* parameter_declaration: type_qualifier parameter_type_specifier  */
  ------------------
  |  Branch (7199:3): [True: 2.98M, False: 311M]
  ------------------
 7200|  2.98M|#line 1164 "MachineIndependent/glslang.y"
 7201|  2.98M|                                              {
 7202|  2.98M|        (yyval.interm) = (yyvsp[0].interm);
 7203|  2.98M|        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
  ------------------
  |  Branch (7203:13): [True: 667k, False: 2.31M]
  ------------------
 7204|   667k|            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
 7205|  2.98M|        parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  783|  2.98M|#define parseContext (*pParseContext)
  ------------------
 7206|       |
 7207|  2.98M|        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
  ------------------
  |  |  783|  2.98M|#define parseContext (*pParseContext)
  ------------------
 7208|  2.98M|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
  ------------------
  |  |  783|  2.98M|#define parseContext (*pParseContext)
  ------------------
 7209|  2.98M|        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
  ------------------
  |  |  783|  2.98M|#define parseContext (*pParseContext)
  ------------------
 7210|  2.98M|    }
 7211|  2.98M|#line 7212 "MachineIndependent/glslang_tab.cpp"
 7212|  2.98M|    break;
 7213|       |
 7214|  20.0M|  case 130: /* parameter_declaration: parameter_type_specifier  */
  ------------------
  |  Branch (7214:3): [True: 20.0M, False: 294M]
  ------------------
 7215|  20.0M|#line 1174 "MachineIndependent/glslang.y"
 7216|  20.0M|                               {
 7217|  20.0M|        (yyval.interm) = (yyvsp[0].interm);
 7218|       |
 7219|  20.0M|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
  ------------------
  |  |  783|  20.0M|#define parseContext (*pParseContext)
  ------------------
 7220|  20.0M|        parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
  ------------------
  |  |  783|  20.0M|#define parseContext (*pParseContext)
  ------------------
 7221|  20.0M|        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  783|  20.0M|#define parseContext (*pParseContext)
  ------------------
 7222|  20.0M|    }
 7223|  20.0M|#line 7224 "MachineIndependent/glslang_tab.cpp"
 7224|  20.0M|    break;
 7225|       |
 7226|  23.0M|  case 131: /* parameter_type_specifier: type_specifier  */
  ------------------
  |  Branch (7226:3): [True: 23.0M, False: 291M]
  ------------------
 7227|  23.0M|#line 1184 "MachineIndependent/glslang.y"
 7228|  23.0M|                     {
 7229|  23.0M|        TParameter param = { 0, new TType((yyvsp[0].interm.type)), {} };
 7230|  23.0M|        (yyval.interm).param = param;
 7231|  23.0M|        if ((yyvsp[0].interm.type).arraySizes)
  ------------------
  |  Branch (7231:13): [True: 100k, False: 22.9M]
  ------------------
 7232|   100k|            parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
  ------------------
  |  |  783|   100k|#define parseContext (*pParseContext)
  ------------------
 7233|  23.0M|    }
 7234|  23.0M|#line 7235 "MachineIndependent/glslang_tab.cpp"
 7235|  23.0M|    break;
 7236|       |
 7237|   422k|  case 132: /* init_declarator_list: single_declaration  */
  ------------------
  |  Branch (7237:3): [True: 422k, False: 314M]
  ------------------
 7238|   422k|#line 1193 "MachineIndependent/glslang.y"
 7239|   422k|                         {
 7240|   422k|        (yyval.interm) = (yyvsp[0].interm);
 7241|   422k|    }
 7242|   422k|#line 7243 "MachineIndependent/glslang_tab.cpp"
 7243|   422k|    break;
 7244|       |
 7245|      0|  case 133: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER  */
  ------------------
  |  Branch (7245:3): [True: 0, False: 314M]
  ------------------
 7246|      0|#line 1196 "MachineIndependent/glslang.y"
 7247|      0|                                            {
 7248|      0|        (yyval.interm) = (yyvsp[-2].interm);
 7249|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7250|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, declNode, (yyvsp[0].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7251|      0|    }
 7252|      0|#line 7253 "MachineIndependent/glslang_tab.cpp"
 7253|      0|    break;
 7254|       |
 7255|      0|  case 134: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier  */
  ------------------
  |  Branch (7255:3): [True: 0, False: 314M]
  ------------------
 7256|      0|#line 1201 "MachineIndependent/glslang.y"
 7257|      0|                                                            {
 7258|      0|        (yyval.interm) = (yyvsp[-3].interm);
 7259|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7260|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-3].interm).intermNode, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7261|      0|    }
 7262|      0|#line 7263 "MachineIndependent/glslang_tab.cpp"
 7263|      0|    break;
 7264|       |
 7265|      0|  case 135: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer  */
  ------------------
  |  Branch (7265:3): [True: 0, False: 314M]
  ------------------
 7266|      0|#line 1206 "MachineIndependent/glslang.y"
 7267|      0|                                                                              {
 7268|      0|        (yyval.interm).type = (yyvsp[-5].interm).type;
 7269|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7270|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7271|      0|    }
 7272|      0|#line 7273 "MachineIndependent/glslang_tab.cpp"
 7273|      0|    break;
 7274|       |
 7275|      0|  case 136: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (7275:3): [True: 0, False: 314M]
  ------------------
 7276|      0|#line 1211 "MachineIndependent/glslang.y"
 7277|      0|                                                              {
 7278|      0|        (yyval.interm).type = (yyvsp[-4].interm).type;
 7279|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7280|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7281|      0|    }
 7282|      0|#line 7283 "MachineIndependent/glslang_tab.cpp"
 7283|      0|    break;
 7284|       |
 7285|  1.62k|  case 137: /* single_declaration: fully_specified_type  */
  ------------------
  |  Branch (7285:3): [True: 1.62k, False: 314M]
  ------------------
 7286|  1.62k|#line 1219 "MachineIndependent/glslang.y"
 7287|  1.62k|                           {
 7288|  1.62k|        (yyval.interm).type = (yyvsp[0].interm.type);
 7289|  1.62k|        (yyval.interm).intermNode = 0;
 7290|  1.62k|        parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
  ------------------
  |  |  783|  1.62k|#define parseContext (*pParseContext)
  ------------------
 7291|  1.62k|    }
 7292|  1.62k|#line 7293 "MachineIndependent/glslang_tab.cpp"
 7293|  1.62k|    break;
 7294|       |
 7295|   262k|  case 138: /* single_declaration: fully_specified_type IDENTIFIER  */
  ------------------
  |  Branch (7295:3): [True: 262k, False: 314M]
  ------------------
 7296|   262k|#line 1224 "MachineIndependent/glslang.y"
 7297|   262k|                                      {
 7298|   262k|        (yyval.interm).type = (yyvsp[-1].interm.type);
 7299|   262k|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
  ------------------
  |  |  783|   262k|#define parseContext (*pParseContext)
  ------------------
 7300|   262k|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[0].lex).loc);
  ------------------
  |  |  783|   262k|#define parseContext (*pParseContext)
  ------------------
 7301|       |
 7302|   262k|    }
 7303|   262k|#line 7304 "MachineIndependent/glslang_tab.cpp"
 7304|   262k|    break;
 7305|       |
 7306|  15.4k|  case 139: /* single_declaration: fully_specified_type IDENTIFIER array_specifier  */
  ------------------
  |  Branch (7306:3): [True: 15.4k, False: 314M]
  ------------------
 7307|  15.4k|#line 1230 "MachineIndependent/glslang.y"
 7308|  15.4k|                                                      {
 7309|  15.4k|        (yyval.interm).type = (yyvsp[-2].interm.type);
 7310|  15.4k|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  783|  15.4k|#define parseContext (*pParseContext)
  ------------------
 7311|  15.4k|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|  15.4k|#define parseContext (*pParseContext)
  ------------------
 7312|  15.4k|    }
 7313|  15.4k|#line 7314 "MachineIndependent/glslang_tab.cpp"
 7314|  15.4k|    break;
 7315|       |
 7316|      0|  case 140: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer  */
  ------------------
  |  Branch (7316:3): [True: 0, False: 314M]
  ------------------
 7317|      0|#line 1235 "MachineIndependent/glslang.y"
 7318|      0|                                                                        {
 7319|      0|        (yyval.interm).type = (yyvsp[-4].interm.type);
 7320|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7321|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[-3].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7322|      0|    }
 7323|      0|#line 7324 "MachineIndependent/glslang_tab.cpp"
 7324|      0|    break;
 7325|       |
 7326|   142k|  case 141: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (7326:3): [True: 142k, False: 314M]
  ------------------
 7327|   142k|#line 1240 "MachineIndependent/glslang.y"
 7328|   142k|                                                        {
 7329|   142k|        (yyval.interm).type = (yyvsp[-3].interm.type);
 7330|   142k|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|   142k|#define parseContext (*pParseContext)
  ------------------
 7331|   142k|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[-2].lex).loc);
  ------------------
  |  |  783|   142k|#define parseContext (*pParseContext)
  ------------------
 7332|   142k|    }
 7333|   142k|#line 7334 "MachineIndependent/glslang_tab.cpp"
 7334|   142k|    break;
 7335|       |
 7336|  10.0M|  case 142: /* fully_specified_type: type_specifier  */
  ------------------
  |  Branch (7336:3): [True: 10.0M, False: 304M]
  ------------------
 7337|  10.0M|#line 1249 "MachineIndependent/glslang.y"
 7338|  10.0M|                     {
 7339|  10.0M|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7340|       |
 7341|  10.0M|        parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
  ------------------
  |  |  783|  10.0M|#define parseContext (*pParseContext)
  ------------------
 7342|  10.0M|        if ((yyvsp[0].interm.type).arraySizes) {
  ------------------
  |  Branch (7342:13): [True: 0, False: 10.0M]
  ------------------
 7343|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7344|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7345|      0|        }
 7346|  10.0M|        parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).hasTypeParameter());
  ------------------
  |  |  783|  10.0M|#define parseContext (*pParseContext)
  ------------------
 7347|  10.0M|    }
 7348|  10.0M|#line 7349 "MachineIndependent/glslang_tab.cpp"
 7349|  10.0M|    break;
 7350|       |
 7351|  1.35M|  case 143: /* fully_specified_type: type_qualifier type_specifier  */
  ------------------
  |  Branch (7351:3): [True: 1.35M, False: 313M]
  ------------------
 7352|  1.35M|#line 1259 "MachineIndependent/glslang.y"
 7353|  1.35M|                                     {
 7354|  1.35M|        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, false, &(yyvsp[0].interm.type));
  ------------------
  |  |  783|  1.35M|#define parseContext (*pParseContext)
  ------------------
 7355|  1.35M|        parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
  ------------------
  |  |  783|  1.35M|#define parseContext (*pParseContext)
  ------------------
 7356|       |
 7357|  1.35M|        if ((yyvsp[0].interm.type).arraySizes) {
  ------------------
  |  Branch (7357:13): [True: 0, False: 1.35M]
  ------------------
 7358|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7359|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7360|      0|        }
 7361|       |
 7362|  1.35M|        if ((yyvsp[0].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).qualifier))
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7362:13): [True: 0, False: 1.35M]
  |  Branch (7362:50): [True: 0, False: 0]
  ------------------
 7363|      0|            (yyvsp[0].interm.type).arraySizes = nullptr;
 7364|       |
 7365|  1.35M|        parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
  ------------------
  |  |  783|  1.35M|#define parseContext (*pParseContext)
  ------------------
 7366|  1.35M|        (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers);
 7367|  1.35M|        parseContext.mergeQualifiers((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyvsp[-1].interm.type).qualifier, true);
  ------------------
  |  |  783|  1.35M|#define parseContext (*pParseContext)
  ------------------
 7368|  1.35M|        parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier, (yyvsp[0].interm.type).hasTypeParameter());
  ------------------
  |  |  783|  1.35M|#define parseContext (*pParseContext)
  ------------------
 7369|       |
 7370|  1.35M|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7371|       |
 7372|  1.35M|        if (! (yyval.interm.type).qualifier.isInterpolation() &&
  ------------------
  |  Branch (7372:13): [True: 1.32M, False: 28.3k]
  ------------------
 7373|  1.32M|            ((parseContext.language == EShLangVertex   && (yyval.interm.type).qualifier.storage == EvqVaryingOut) ||
  ------------------
  |  |  783|  1.32M|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7373:15): [True: 765k, False: 559k]
  |  Branch (7373:59): [True: 4.05k, False: 761k]
  ------------------
 7374|  1.32M|             (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
  ------------------
  |  |  783|  1.32M|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7374:15): [True: 321k, False: 999k]
  |  Branch (7374:59): [True: 6.40k, False: 314k]
  ------------------
 7375|  10.4k|            (yyval.interm.type).qualifier.smooth = true;
 7376|  1.35M|    }
 7377|  1.35M|#line 7378 "MachineIndependent/glslang_tab.cpp"
 7378|  1.35M|    break;
 7379|       |
 7380|      0|  case 144: /* invariant_qualifier: INVARIANT  */
  ------------------
  |  Branch (7380:3): [True: 0, False: 314M]
  ------------------
 7381|      0|#line 1286 "MachineIndependent/glslang.y"
 7382|      0|                {
 7383|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7384|      0|        parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7385|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7386|      0|        (yyval.interm.type).qualifier.invariant = true;
 7387|      0|    }
 7388|      0|#line 7389 "MachineIndependent/glslang_tab.cpp"
 7389|      0|    break;
 7390|       |
 7391|      0|  case 145: /* interpolation_qualifier: SMOOTH  */
  ------------------
  |  Branch (7391:3): [True: 0, False: 314M]
  ------------------
 7392|      0|#line 1295 "MachineIndependent/glslang.y"
 7393|      0|             {
 7394|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7395|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7396|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "smooth");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7397|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7398|      0|        (yyval.interm.type).qualifier.smooth = true;
 7399|      0|    }
 7400|      0|#line 7401 "MachineIndependent/glslang_tab.cpp"
 7401|      0|    break;
 7402|       |
 7403|  28.3k|  case 146: /* interpolation_qualifier: FLAT  */
  ------------------
  |  Branch (7403:3): [True: 28.3k, False: 314M]
  ------------------
 7404|  28.3k|#line 1302 "MachineIndependent/glslang.y"
 7405|  28.3k|           {
 7406|  28.3k|        parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
  ------------------
  |  |  783|  28.3k|#define parseContext (*pParseContext)
  ------------------
 7407|  28.3k|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
  ------------------
  |  |  783|  28.3k|#define parseContext (*pParseContext)
  ------------------
 7408|  28.3k|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "flat");
  ------------------
  |  |  783|  28.3k|#define parseContext (*pParseContext)
  ------------------
 7409|  28.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7410|  28.3k|        (yyval.interm.type).qualifier.flat = true;
 7411|  28.3k|    }
 7412|  28.3k|#line 7413 "MachineIndependent/glslang_tab.cpp"
 7413|  28.3k|    break;
 7414|       |
 7415|      0|  case 147: /* interpolation_qualifier: NOPERSPECTIVE  */
  ------------------
  |  Branch (7415:3): [True: 0, False: 314M]
  ------------------
 7416|      0|#line 1309 "MachineIndependent/glslang.y"
 7417|      0|                    {
 7418|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7419|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7420|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7421|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7422|      0|        (yyval.interm.type).qualifier.nopersp = true;
 7423|      0|    }
 7424|      0|#line 7425 "MachineIndependent/glslang_tab.cpp"
 7425|      0|    break;
 7426|       |
 7427|      0|  case 148: /* interpolation_qualifier: EXPLICITINTERPAMD  */
  ------------------
  |  Branch (7427:3): [True: 0, False: 314M]
  ------------------
 7428|      0|#line 1316 "MachineIndependent/glslang.y"
 7429|      0|                        {
 7430|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7431|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7432|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7433|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7434|      0|        (yyval.interm.type).qualifier.explicitInterp = true;
 7435|      0|    }
 7436|      0|#line 7437 "MachineIndependent/glslang_tab.cpp"
 7437|      0|    break;
 7438|       |
 7439|      0|  case 149: /* interpolation_qualifier: PERVERTEXNV  */
  ------------------
  |  Branch (7439:3): [True: 0, False: 314M]
  ------------------
 7440|      0|#line 1323 "MachineIndependent/glslang.y"
 7441|      0|                  {
 7442|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7443|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7444|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7445|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7446|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7447|      0|        (yyval.interm.type).qualifier.pervertexNV = true;
 7448|      0|    }
 7449|      0|#line 7450 "MachineIndependent/glslang_tab.cpp"
 7450|      0|    break;
 7451|       |
 7452|      0|  case 150: /* interpolation_qualifier: PERVERTEXEXT  */
  ------------------
  |  Branch (7452:3): [True: 0, False: 314M]
  ------------------
 7453|      0|#line 1331 "MachineIndependent/glslang.y"
 7454|      0|                   {
 7455|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7456|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7457|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7458|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7459|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7460|      0|        (yyval.interm.type).qualifier.pervertexEXT = true;
 7461|      0|    }
 7462|      0|#line 7463 "MachineIndependent/glslang_tab.cpp"
 7463|      0|    break;
 7464|       |
 7465|    447|  case 151: /* interpolation_qualifier: PERPRIMITIVENV  */
  ------------------
  |  Branch (7465:3): [True: 447, False: 314M]
  ------------------
 7466|    447|#line 1339 "MachineIndependent/glslang.y"
 7467|    447|                     {
 7468|       |        // No need for profile version or extension check. Shader stage already checks both.
 7469|    447|        parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
  ------------------
  |  |  783|    447|#define parseContext (*pParseContext)
  ------------------
 7470|    447|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
  ------------------
  |  |  783|    447|#define parseContext (*pParseContext)
  ------------------
 7471|       |        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
 7472|    447|        if (parseContext.language == EShLangFragment)
  ------------------
  |  |  783|    447|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7472:13): [True: 0, False: 447]
  ------------------
 7473|      0|            parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7474|    447|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7475|    447|        (yyval.interm.type).qualifier.perPrimitiveNV = true;
 7476|    447|    }
 7477|    447|#line 7478 "MachineIndependent/glslang_tab.cpp"
 7478|    447|    break;
 7479|       |
 7480|    447|  case 152: /* interpolation_qualifier: PERPRIMITIVEEXT  */
  ------------------
  |  Branch (7480:3): [True: 447, False: 314M]
  ------------------
 7481|    447|#line 1349 "MachineIndependent/glslang.y"
 7482|    447|                      {
 7483|       |        // No need for profile version or extension check. Shader stage already checks both.
 7484|    447|        parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT");
  ------------------
  |  |  783|    447|#define parseContext (*pParseContext)
  ------------------
 7485|    447|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
  ------------------
  |  |  783|    447|#define parseContext (*pParseContext)
  ------------------
 7486|       |        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
 7487|    447|        if (parseContext.language == EShLangFragment)
  ------------------
  |  |  783|    447|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7487:13): [True: 0, False: 447]
  ------------------
 7488|      0|            parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7489|    447|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7490|    447|        (yyval.interm.type).qualifier.perPrimitiveNV = true;
 7491|    447|    }
 7492|    447|#line 7493 "MachineIndependent/glslang_tab.cpp"
 7493|    447|    break;
 7494|       |
 7495|  2.23k|  case 153: /* interpolation_qualifier: PERVIEWNV  */
  ------------------
  |  Branch (7495:3): [True: 2.23k, False: 314M]
  ------------------
 7496|  2.23k|#line 1359 "MachineIndependent/glslang.y"
 7497|  2.23k|                {
 7498|       |        // No need for profile version or extension check. Shader stage already checks both.
 7499|  2.23k|        parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
  ------------------
  |  |  783|  2.23k|#define parseContext (*pParseContext)
  ------------------
 7500|  2.23k|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangMesh, "perviewNV");
  ------------------
  |  |  783|  2.23k|#define parseContext (*pParseContext)
  ------------------
 7501|  2.23k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7502|  2.23k|        (yyval.interm.type).qualifier.perViewNV = true;
 7503|  2.23k|    }
 7504|  2.23k|#line 7505 "MachineIndependent/glslang_tab.cpp"
 7505|  2.23k|    break;
 7506|       |
 7507|      0|  case 154: /* interpolation_qualifier: PERTASKNV  */
  ------------------
  |  Branch (7507:3): [True: 0, False: 314M]
  ------------------
 7508|      0|#line 1366 "MachineIndependent/glslang.y"
 7509|      0|                {
 7510|       |        // No need for profile version or extension check. Shader stage already checks both.
 7511|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7512|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7513|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7514|      0|        (yyval.interm.type).qualifier.perTaskNV = true;
 7515|      0|    }
 7516|      0|#line 7517 "MachineIndependent/glslang_tab.cpp"
 7517|      0|    break;
 7518|       |
 7519|      0|  case 155: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
  ------------------
  |  Branch (7519:3): [True: 0, False: 314M]
  ------------------
 7520|      0|#line 1376 "MachineIndependent/glslang.y"
 7521|      0|                                                             {
 7522|      0|        (yyval.interm.type) = (yyvsp[-1].interm.type);
 7523|      0|    }
 7524|      0|#line 7525 "MachineIndependent/glslang_tab.cpp"
 7525|      0|    break;
 7526|       |
 7527|      0|  case 156: /* layout_qualifier_id_list: layout_qualifier_id  */
  ------------------
  |  Branch (7527:3): [True: 0, False: 314M]
  ------------------
 7528|      0|#line 1382 "MachineIndependent/glslang.y"
 7529|      0|                          {
 7530|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7531|      0|    }
 7532|      0|#line 7533 "MachineIndependent/glslang_tab.cpp"
 7533|      0|    break;
 7534|       |
 7535|      0|  case 157: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
  ------------------
  |  Branch (7535:3): [True: 0, False: 314M]
  ------------------
 7536|      0|#line 1385 "MachineIndependent/glslang.y"
 7537|      0|                                                         {
 7538|      0|        (yyval.interm.type) = (yyvsp[-2].interm.type);
 7539|      0|        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
 7540|      0|        parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7541|      0|    }
 7542|      0|#line 7543 "MachineIndependent/glslang_tab.cpp"
 7543|      0|    break;
 7544|       |
 7545|      0|  case 158: /* layout_qualifier_id: IDENTIFIER  */
  ------------------
  |  Branch (7545:3): [True: 0, False: 314M]
  ------------------
 7546|      0|#line 1392 "MachineIndependent/glslang.y"
 7547|      0|                 {
 7548|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7549|      0|        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7550|      0|    }
 7551|      0|#line 7552 "MachineIndependent/glslang_tab.cpp"
 7552|      0|    break;
 7553|       |
 7554|      0|  case 159: /* layout_qualifier_id: IDENTIFIER EQUAL assignment_expression  */
  ------------------
  |  Branch (7554:3): [True: 0, False: 314M]
  ------------------
 7555|      0|#line 1396 "MachineIndependent/glslang.y"
 7556|      0|                                             {
 7557|      0|        (yyval.interm.type).init((yyvsp[-2].lex).loc);
 7558|      0|        parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7559|      0|    }
 7560|      0|#line 7561 "MachineIndependent/glslang_tab.cpp"
 7561|      0|    break;
 7562|       |
 7563|      0|  case 160: /* layout_qualifier_id: SHARED  */
  ------------------
  |  Branch (7563:3): [True: 0, False: 314M]
  ------------------
 7564|      0|#line 1400 "MachineIndependent/glslang.y"
 7565|      0|             { // because "shared" is both an identifier and a keyword
 7566|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7567|      0|        TString strShared("shared");
 7568|      0|        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7569|      0|    }
 7570|      0|#line 7571 "MachineIndependent/glslang_tab.cpp"
 7571|      0|    break;
 7572|       |
 7573|      0|  case 161: /* precise_qualifier: PRECISE  */
  ------------------
  |  Branch (7573:3): [True: 0, False: 314M]
  ------------------
 7574|      0|#line 1408 "MachineIndependent/glslang.y"
 7575|      0|              {
 7576|      0|        parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7577|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7578|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7579|      0|        (yyval.interm.type).qualifier.noContraction = true;
 7580|      0|    }
 7581|      0|#line 7582 "MachineIndependent/glslang_tab.cpp"
 7582|      0|    break;
 7583|       |
 7584|  4.83M|  case 162: /* type_qualifier: single_type_qualifier  */
  ------------------
  |  Branch (7584:3): [True: 4.83M, False: 309M]
  ------------------
 7585|  4.83M|#line 1417 "MachineIndependent/glslang.y"
 7586|  4.83M|                            {
 7587|  4.83M|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7588|  4.83M|    }
 7589|  4.83M|#line 7590 "MachineIndependent/glslang_tab.cpp"
 7590|  4.83M|    break;
 7591|       |
 7592|  3.86M|  case 163: /* type_qualifier: type_qualifier single_type_qualifier  */
  ------------------
  |  Branch (7592:3): [True: 3.86M, False: 310M]
  ------------------
 7593|  3.86M|#line 1420 "MachineIndependent/glslang.y"
 7594|  3.86M|                                           {
 7595|  3.86M|        (yyval.interm.type) = (yyvsp[-1].interm.type);
 7596|  3.86M|        if ((yyval.interm.type).basicType == EbtVoid)
  ------------------
  |  Branch (7596:13): [True: 3.86M, False: 0]
  ------------------
 7597|  3.86M|            (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
 7598|       |
 7599|  3.86M|        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
 7600|  3.86M|        parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
  ------------------
  |  |  783|  3.86M|#define parseContext (*pParseContext)
  ------------------
 7601|  3.86M|    }
 7602|  3.86M|#line 7603 "MachineIndependent/glslang_tab.cpp"
 7603|  3.86M|    break;
 7604|       |
 7605|  6.39M|  case 164: /* single_type_qualifier: storage_qualifier  */
  ------------------
  |  Branch (7605:3): [True: 6.39M, False: 308M]
  ------------------
 7606|  6.39M|#line 1431 "MachineIndependent/glslang.y"
 7607|  6.39M|                        {
 7608|  6.39M|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7609|  6.39M|    }
 7610|  6.39M|#line 7611 "MachineIndependent/glslang_tab.cpp"
 7611|  6.39M|    break;
 7612|       |
 7613|      0|  case 165: /* single_type_qualifier: layout_qualifier  */
  ------------------
  |  Branch (7613:3): [True: 0, False: 314M]
  ------------------
 7614|      0|#line 1434 "MachineIndependent/glslang.y"
 7615|      0|                       {
 7616|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7617|      0|    }
 7618|      0|#line 7619 "MachineIndependent/glslang_tab.cpp"
 7619|      0|    break;
 7620|       |
 7621|  2.26M|  case 166: /* single_type_qualifier: precision_qualifier  */
  ------------------
  |  Branch (7621:3): [True: 2.26M, False: 312M]
  ------------------
 7622|  2.26M|#line 1437 "MachineIndependent/glslang.y"
 7623|  2.26M|                          {
 7624|  2.26M|        parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
  ------------------
  |  |  783|  2.26M|#define parseContext (*pParseContext)
  ------------------
 7625|  2.26M|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7626|  2.26M|    }
 7627|  2.26M|#line 7628 "MachineIndependent/glslang_tab.cpp"
 7628|  2.26M|    break;
 7629|       |
 7630|  31.4k|  case 167: /* single_type_qualifier: interpolation_qualifier  */
  ------------------
  |  Branch (7630:3): [True: 31.4k, False: 314M]
  ------------------
 7631|  31.4k|#line 1441 "MachineIndependent/glslang.y"
 7632|  31.4k|                              {
 7633|       |        // allow inheritance of storage qualifier from block declaration
 7634|  31.4k|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7635|  31.4k|    }
 7636|  31.4k|#line 7637 "MachineIndependent/glslang_tab.cpp"
 7637|  31.4k|    break;
 7638|       |
 7639|      0|  case 168: /* single_type_qualifier: invariant_qualifier  */
  ------------------
  |  Branch (7639:3): [True: 0, False: 314M]
  ------------------
 7640|      0|#line 1445 "MachineIndependent/glslang.y"
 7641|      0|                          {
 7642|       |        // allow inheritance of storage qualifier from block declaration
 7643|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7644|      0|    }
 7645|      0|#line 7646 "MachineIndependent/glslang_tab.cpp"
 7646|      0|    break;
 7647|       |
 7648|      0|  case 169: /* single_type_qualifier: precise_qualifier  */
  ------------------
  |  Branch (7648:3): [True: 0, False: 314M]
  ------------------
 7649|      0|#line 1449 "MachineIndependent/glslang.y"
 7650|      0|                        {
 7651|       |        // allow inheritance of storage qualifier from block declaration
 7652|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7653|      0|    }
 7654|      0|#line 7655 "MachineIndependent/glslang_tab.cpp"
 7655|      0|    break;
 7656|       |
 7657|      0|  case 170: /* single_type_qualifier: non_uniform_qualifier  */
  ------------------
  |  Branch (7657:3): [True: 0, False: 314M]
  ------------------
 7658|      0|#line 1453 "MachineIndependent/glslang.y"
 7659|      0|                            {
 7660|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7661|      0|    }
 7662|      0|#line 7663 "MachineIndependent/glslang_tab.cpp"
 7663|      0|    break;
 7664|       |
 7665|      0|  case 171: /* single_type_qualifier: spirv_storage_class_qualifier  */
  ------------------
  |  Branch (7665:3): [True: 0, False: 314M]
  ------------------
 7666|      0|#line 1456 "MachineIndependent/glslang.y"
 7667|      0|                                    {
 7668|      0|        parseContext.globalCheck((yyvsp[0].interm.type).loc, "spirv_storage_class");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7669|      0|        parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7670|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7671|      0|    }
 7672|      0|#line 7673 "MachineIndependent/glslang_tab.cpp"
 7673|      0|    break;
 7674|       |
 7675|      0|  case 172: /* single_type_qualifier: spirv_decorate_qualifier  */
  ------------------
  |  Branch (7675:3): [True: 0, False: 314M]
  ------------------
 7676|      0|#line 1461 "MachineIndependent/glslang.y"
 7677|      0|                               {
 7678|      0|        parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7679|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7680|      0|    }
 7681|      0|#line 7682 "MachineIndependent/glslang_tab.cpp"
 7682|      0|    break;
 7683|       |
 7684|      0|  case 173: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
  ------------------
  |  Branch (7684:3): [True: 0, False: 314M]
  ------------------
 7685|      0|#line 1465 "MachineIndependent/glslang.y"
 7686|      0|                         {
 7687|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7688|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7689|      0|        (yyval.interm.type).qualifier.setSpirvByReference();
 7690|      0|    }
 7691|      0|#line 7692 "MachineIndependent/glslang_tab.cpp"
 7692|      0|    break;
 7693|       |
 7694|      0|  case 174: /* single_type_qualifier: SPIRV_LITERAL  */
  ------------------
  |  Branch (7694:3): [True: 0, False: 314M]
  ------------------
 7695|      0|#line 1470 "MachineIndependent/glslang.y"
 7696|      0|                    {
 7697|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7698|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7699|      0|        (yyval.interm.type).qualifier.setSpirvLiteral();
 7700|      0|    }
 7701|      0|#line 7702 "MachineIndependent/glslang_tab.cpp"
 7702|      0|    break;
 7703|       |
 7704|   142k|  case 175: /* storage_qualifier: CONST  */
  ------------------
  |  Branch (7704:3): [True: 142k, False: 314M]
  ------------------
 7705|   142k|#line 1478 "MachineIndependent/glslang.y"
 7706|   142k|            {
 7707|   142k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7708|   142k|        (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
 7709|   142k|    }
 7710|   142k|#line 7711 "MachineIndependent/glslang_tab.cpp"
 7711|   142k|    break;
 7712|       |
 7713|  79.8k|  case 176: /* storage_qualifier: INOUT  */
  ------------------
  |  Branch (7713:3): [True: 79.8k, False: 314M]
  ------------------
 7714|  79.8k|#line 1482 "MachineIndependent/glslang.y"
 7715|  79.8k|            {
 7716|  79.8k|        parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
  ------------------
  |  |  783|  79.8k|#define parseContext (*pParseContext)
  ------------------
 7717|  79.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7718|  79.8k|        (yyval.interm.type).qualifier.storage = EvqInOut;
 7719|  79.8k|    }
 7720|  79.8k|#line 7721 "MachineIndependent/glslang_tab.cpp"
 7721|  79.8k|    break;
 7722|       |
 7723|   256k|  case 177: /* storage_qualifier: IN  */
  ------------------
  |  Branch (7723:3): [True: 256k, False: 314M]
  ------------------
 7724|   256k|#line 1487 "MachineIndependent/glslang.y"
 7725|   256k|         {
 7726|   256k|        parseContext.globalCheck((yyvsp[0].lex).loc, "in");
  ------------------
  |  |  783|   256k|#define parseContext (*pParseContext)
  ------------------
 7727|   256k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7728|       |        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
 7729|   256k|        (yyval.interm.type).qualifier.storage = EvqIn;
 7730|   256k|    }
 7731|   256k|#line 7732 "MachineIndependent/glslang_tab.cpp"
 7732|   256k|    break;
 7733|       |
 7734|   838k|  case 178: /* storage_qualifier: OUT  */
  ------------------
  |  Branch (7734:3): [True: 838k, False: 313M]
  ------------------
 7735|   838k|#line 1493 "MachineIndependent/glslang.y"
 7736|   838k|          {
 7737|   838k|        parseContext.globalCheck((yyvsp[0].lex).loc, "out");
  ------------------
  |  |  783|   838k|#define parseContext (*pParseContext)
  ------------------
 7738|   838k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7739|       |        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
 7740|   838k|        (yyval.interm.type).qualifier.storage = EvqOut;
 7741|   838k|    }
 7742|   838k|#line 7743 "MachineIndependent/glslang_tab.cpp"
 7743|   838k|    break;
 7744|       |
 7745|      0|  case 179: /* storage_qualifier: CENTROID  */
  ------------------
  |  Branch (7745:3): [True: 0, False: 314M]
  ------------------
 7746|      0|#line 1499 "MachineIndependent/glslang.y"
 7747|      0|               {
 7748|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7749|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7750|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7751|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7752|      0|        (yyval.interm.type).qualifier.centroid = true;
 7753|      0|    }
 7754|      0|#line 7755 "MachineIndependent/glslang_tab.cpp"
 7755|      0|    break;
 7756|       |
 7757|  6.26k|  case 180: /* storage_qualifier: UNIFORM  */
  ------------------
  |  Branch (7757:3): [True: 6.26k, False: 314M]
  ------------------
 7758|  6.26k|#line 1506 "MachineIndependent/glslang.y"
 7759|  6.26k|              {
 7760|  6.26k|        parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
  ------------------
  |  |  783|  6.26k|#define parseContext (*pParseContext)
  ------------------
 7761|  6.26k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7762|  6.26k|        (yyval.interm.type).qualifier.storage = EvqUniform;
 7763|  6.26k|    }
 7764|  6.26k|#line 7765 "MachineIndependent/glslang_tab.cpp"
 7765|  6.26k|    break;
 7766|       |
 7767|      0|  case 181: /* storage_qualifier: TILEIMAGEEXT  */
  ------------------
  |  Branch (7767:3): [True: 0, False: 314M]
  ------------------
 7768|      0|#line 1511 "MachineIndependent/glslang.y"
 7769|      0|                   {
 7770|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "tileImageEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7771|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7772|      0|        (yyval.interm.type).qualifier.storage = EvqTileImageEXT;
 7773|      0|    }
 7774|      0|#line 7775 "MachineIndependent/glslang_tab.cpp"
 7775|      0|    break;
 7776|       |
 7777|      0|  case 182: /* storage_qualifier: SHARED  */
  ------------------
  |  Branch (7777:3): [True: 0, False: 314M]
  ------------------
 7778|      0|#line 1516 "MachineIndependent/glslang.y"
 7779|      0|             {
 7780|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7781|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7782|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7783|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7784|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7785|      0|        (yyval.interm.type).qualifier.storage = EvqShared;
 7786|      0|    }
 7787|      0|#line 7788 "MachineIndependent/glslang_tab.cpp"
 7788|      0|    break;
 7789|       |
 7790|      0|  case 183: /* storage_qualifier: BUFFER  */
  ------------------
  |  Branch (7790:3): [True: 0, False: 314M]
  ------------------
 7791|      0|#line 1524 "MachineIndependent/glslang.y"
 7792|      0|             {
 7793|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7794|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7795|      0|        (yyval.interm.type).qualifier.storage = EvqBuffer;
 7796|      0|    }
 7797|      0|#line 7798 "MachineIndependent/glslang_tab.cpp"
 7798|      0|    break;
 7799|       |
 7800|      0|  case 184: /* storage_qualifier: ATTRIBUTE  */
  ------------------
  |  Branch (7800:3): [True: 0, False: 314M]
  ------------------
 7801|      0|#line 1529 "MachineIndependent/glslang.y"
 7802|      0|                {
 7803|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7804|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7805|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7806|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7807|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7808|       |
 7809|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7810|       |
 7811|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7812|      0|        (yyval.interm.type).qualifier.storage = EvqVaryingIn;
 7813|      0|    }
 7814|      0|#line 7815 "MachineIndependent/glslang_tab.cpp"
 7815|      0|    break;
 7816|       |
 7817|      0|  case 185: /* storage_qualifier: VARYING  */
  ------------------
  |  Branch (7817:3): [True: 0, False: 314M]
  ------------------
 7818|      0|#line 1541 "MachineIndependent/glslang.y"
 7819|      0|              {
 7820|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7821|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7822|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7823|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "varying");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7824|       |
 7825|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "varying");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7826|       |
 7827|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7828|      0|        if (parseContext.language == EShLangVertex)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7828:13): [True: 0, False: 0]
  ------------------
 7829|      0|            (yyval.interm.type).qualifier.storage = EvqVaryingOut;
 7830|      0|        else
 7831|      0|            (yyval.interm.type).qualifier.storage = EvqVaryingIn;
 7832|      0|    }
 7833|      0|#line 7834 "MachineIndependent/glslang_tab.cpp"
 7834|      0|    break;
 7835|       |
 7836|  4.80k|  case 186: /* storage_qualifier: PATCH  */
  ------------------
  |  Branch (7836:3): [True: 4.80k, False: 314M]
  ------------------
 7837|  4.80k|#line 1555 "MachineIndependent/glslang.y"
 7838|  4.80k|            {
 7839|  4.80k|        parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
  ------------------
  |  |  783|  4.80k|#define parseContext (*pParseContext)
  ------------------
 7840|  4.80k|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
  ------------------
  |  |  783|  4.80k|#define parseContext (*pParseContext)
  ------------------
 7841|  4.80k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7842|  4.80k|        (yyval.interm.type).qualifier.patch = true;
 7843|  4.80k|    }
 7844|  4.80k|#line 7845 "MachineIndependent/glslang_tab.cpp"
 7845|  4.80k|    break;
 7846|       |
 7847|      0|  case 187: /* storage_qualifier: SAMPLE  */
  ------------------
  |  Branch (7847:3): [True: 0, False: 314M]
  ------------------
 7848|      0|#line 1561 "MachineIndependent/glslang.y"
 7849|      0|             {
 7850|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7851|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7852|      0|        (yyval.interm.type).qualifier.sample = true;
 7853|      0|    }
 7854|      0|#line 7855 "MachineIndependent/glslang_tab.cpp"
 7855|      0|    break;
 7856|       |
 7857|      0|  case 188: /* storage_qualifier: RESOURCEHEAP  */
  ------------------
  |  Branch (7857:3): [True: 0, False: 314M]
  ------------------
 7858|      0|#line 1566 "MachineIndependent/glslang.y"
 7859|      0|                   {
 7860|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "resourceHeap");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7861|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7862|      0|        (yyval.interm.type).qualifier.storage = EvqResourceHeap;
 7863|      0|    }
 7864|      0|#line 7865 "MachineIndependent/glslang_tab.cpp"
 7865|      0|    break;
 7866|       |
 7867|      0|  case 189: /* storage_qualifier: SAMPLERHEAP  */
  ------------------
  |  Branch (7867:3): [True: 0, False: 314M]
  ------------------
 7868|      0|#line 1571 "MachineIndependent/glslang.y"
 7869|      0|                  {
 7870|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "samplerHeap");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7871|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7872|      0|        (yyval.interm.type).qualifier.storage = EvqSamplerHeap;
 7873|      0|    }
 7874|      0|#line 7875 "MachineIndependent/glslang_tab.cpp"
 7875|      0|    break;
 7876|       |
 7877|      0|  case 190: /* storage_qualifier: HITATTRNV  */
  ------------------
  |  Branch (7877:3): [True: 0, False: 314M]
  ------------------
 7878|      0|#line 1576 "MachineIndependent/glslang.y"
 7879|      0|                {
 7880|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7881|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7882|      0|            | EShLangAnyHitMask), "hitAttributeNV");
 7883|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7884|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7885|      0|        (yyval.interm.type).qualifier.storage = EvqHitAttr;
 7886|      0|    }
 7887|      0|#line 7888 "MachineIndependent/glslang_tab.cpp"
 7888|      0|    break;
 7889|       |
 7890|      0|  case 191: /* storage_qualifier: HITOBJECTATTRNV  */
  ------------------
  |  Branch (7890:3): [True: 0, False: 314M]
  ------------------
 7891|      0|#line 1584 "MachineIndependent/glslang.y"
 7892|      0|                      {
 7893|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7894|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7895|      0|            | EShLangMissMask), "hitObjectAttributeNV");
 7896|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7897|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7898|      0|        (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV;
 7899|      0|    }
 7900|      0|#line 7901 "MachineIndependent/glslang_tab.cpp"
 7901|      0|    break;
 7902|       |
 7903|      0|  case 192: /* storage_qualifier: HITOBJECTATTREXT  */
  ------------------
  |  Branch (7903:3): [True: 0, False: 314M]
  ------------------
 7904|      0|#line 1592 "MachineIndependent/glslang.y"
 7905|      0|                       {
 7906|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7907|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7908|      0|            | EShLangMissMask), "hitObjectAttributeEXT");
 7909|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_shader_invocation_reorder, "hitObjectAttributeEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7910|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7911|      0|        (yyval.interm.type).qualifier.storage = EvqHitObjectAttrEXT;
 7912|      0|    }
 7913|      0|#line 7914 "MachineIndependent/glslang_tab.cpp"
 7914|      0|    break;
 7915|       |
 7916|      0|  case 193: /* storage_qualifier: HITATTREXT  */
  ------------------
  |  Branch (7916:3): [True: 0, False: 314M]
  ------------------
 7917|      0|#line 1600 "MachineIndependent/glslang.y"
 7918|      0|                 {
 7919|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7920|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7921|      0|            | EShLangAnyHitMask), "hitAttributeEXT");
 7922|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7923|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7924|      0|        (yyval.interm.type).qualifier.storage = EvqHitAttr;
 7925|      0|    }
 7926|      0|#line 7927 "MachineIndependent/glslang_tab.cpp"
 7927|      0|    break;
 7928|       |
 7929|      0|  case 194: /* storage_qualifier: PAYLOADNV  */
  ------------------
  |  Branch (7929:3): [True: 0, False: 314M]
  ------------------
 7930|      0|#line 1608 "MachineIndependent/glslang.y"
 7931|      0|                {
 7932|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7933|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7934|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
 7935|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7936|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7937|      0|        (yyval.interm.type).qualifier.storage = EvqPayload;
 7938|      0|    }
 7939|      0|#line 7940 "MachineIndependent/glslang_tab.cpp"
 7940|      0|    break;
 7941|       |
 7942|      0|  case 195: /* storage_qualifier: PAYLOADEXT  */
  ------------------
  |  Branch (7942:3): [True: 0, False: 314M]
  ------------------
 7943|      0|#line 1616 "MachineIndependent/glslang.y"
 7944|      0|                 {
 7945|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7946|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7947|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
 7948|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7949|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7950|      0|        (yyval.interm.type).qualifier.storage = EvqPayload;
 7951|      0|    }
 7952|      0|#line 7953 "MachineIndependent/glslang_tab.cpp"
 7953|      0|    break;
 7954|       |
 7955|      0|  case 196: /* storage_qualifier: PAYLOADINNV  */
  ------------------
  |  Branch (7955:3): [True: 0, False: 314M]
  ------------------
 7956|      0|#line 1624 "MachineIndependent/glslang.y"
 7957|      0|                  {
 7958|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7959|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7960|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
 7961|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7962|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7963|      0|        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
 7964|      0|    }
 7965|      0|#line 7966 "MachineIndependent/glslang_tab.cpp"
 7966|      0|    break;
 7967|       |
 7968|      0|  case 197: /* storage_qualifier: PAYLOADINEXT  */
  ------------------
  |  Branch (7968:3): [True: 0, False: 314M]
  ------------------
 7969|      0|#line 1632 "MachineIndependent/glslang.y"
 7970|      0|                   {
 7971|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7972|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7973|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
 7974|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7975|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7976|      0|        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
 7977|      0|    }
 7978|      0|#line 7979 "MachineIndependent/glslang_tab.cpp"
 7979|      0|    break;
 7980|       |
 7981|      0|  case 198: /* storage_qualifier: CALLDATANV  */
  ------------------
  |  Branch (7981:3): [True: 0, False: 314M]
  ------------------
 7982|      0|#line 1640 "MachineIndependent/glslang.y"
 7983|      0|                 {
 7984|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7985|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7986|      0|            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
 7987|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7988|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7989|      0|        (yyval.interm.type).qualifier.storage = EvqCallableData;
 7990|      0|    }
 7991|      0|#line 7992 "MachineIndependent/glslang_tab.cpp"
 7992|      0|    break;
 7993|       |
 7994|      0|  case 199: /* storage_qualifier: CALLDATAEXT  */
  ------------------
  |  Branch (7994:3): [True: 0, False: 314M]
  ------------------
 7995|      0|#line 1648 "MachineIndependent/glslang.y"
 7996|      0|                  {
 7997|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7998|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 7999|      0|            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
 8000|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8001|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8002|      0|        (yyval.interm.type).qualifier.storage = EvqCallableData;
 8003|      0|    }
 8004|      0|#line 8005 "MachineIndependent/glslang_tab.cpp"
 8005|      0|    break;
 8006|       |
 8007|      0|  case 200: /* storage_qualifier: CALLDATAINNV  */
  ------------------
  |  Branch (8007:3): [True: 0, False: 314M]
  ------------------
 8008|      0|#line 1656 "MachineIndependent/glslang.y"
 8009|      0|                   {
 8010|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8011|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8012|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8013|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8014|      0|        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
 8015|      0|    }
 8016|      0|#line 8017 "MachineIndependent/glslang_tab.cpp"
 8017|      0|    break;
 8018|       |
 8019|      0|  case 201: /* storage_qualifier: CALLDATAINEXT  */
  ------------------
  |  Branch (8019:3): [True: 0, False: 314M]
  ------------------
 8020|      0|#line 1663 "MachineIndependent/glslang.y"
 8021|      0|                    {
 8022|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8023|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8024|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8025|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8026|      0|        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
 8027|      0|    }
 8028|      0|#line 8029 "MachineIndependent/glslang_tab.cpp"
 8029|      0|    break;
 8030|       |
 8031|  1.57M|  case 202: /* storage_qualifier: COHERENT  */
  ------------------
  |  Branch (8031:3): [True: 1.57M, False: 312M]
  ------------------
 8032|  1.57M|#line 1670 "MachineIndependent/glslang.y"
 8033|  1.57M|               {
 8034|  1.57M|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8035|  1.57M|        (yyval.interm.type).qualifier.coherent = true;
 8036|  1.57M|    }
 8037|  1.57M|#line 8038 "MachineIndependent/glslang_tab.cpp"
 8038|  1.57M|    break;
 8039|       |
 8040|      0|  case 203: /* storage_qualifier: DEVICECOHERENT  */
  ------------------
  |  Branch (8040:3): [True: 0, False: 314M]
  ------------------
 8041|      0|#line 1674 "MachineIndependent/glslang.y"
 8042|      0|                     {
 8043|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8044|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8045|      0|        (yyval.interm.type).qualifier.devicecoherent = true;
 8046|      0|    }
 8047|      0|#line 8048 "MachineIndependent/glslang_tab.cpp"
 8048|      0|    break;
 8049|       |
 8050|      0|  case 204: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
  ------------------
  |  Branch (8050:3): [True: 0, False: 314M]
  ------------------
 8051|      0|#line 1679 "MachineIndependent/glslang.y"
 8052|      0|                          {
 8053|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8054|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8055|      0|        (yyval.interm.type).qualifier.queuefamilycoherent = true;
 8056|      0|    }
 8057|      0|#line 8058 "MachineIndependent/glslang_tab.cpp"
 8058|      0|    break;
 8059|       |
 8060|      0|  case 205: /* storage_qualifier: WORKGROUPCOHERENT  */
  ------------------
  |  Branch (8060:3): [True: 0, False: 314M]
  ------------------
 8061|      0|#line 1684 "MachineIndependent/glslang.y"
 8062|      0|                        {
 8063|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8064|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8065|      0|        (yyval.interm.type).qualifier.workgroupcoherent = true;
 8066|      0|    }
 8067|      0|#line 8068 "MachineIndependent/glslang_tab.cpp"
 8068|      0|    break;
 8069|       |
 8070|      0|  case 206: /* storage_qualifier: SUBGROUPCOHERENT  */
  ------------------
  |  Branch (8070:3): [True: 0, False: 314M]
  ------------------
 8071|      0|#line 1689 "MachineIndependent/glslang.y"
 8072|      0|                       {
 8073|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8074|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8075|      0|        (yyval.interm.type).qualifier.subgroupcoherent = true;
 8076|      0|    }
 8077|      0|#line 8078 "MachineIndependent/glslang_tab.cpp"
 8078|      0|    break;
 8079|       |
 8080|      0|  case 207: /* storage_qualifier: NONPRIVATE  */
  ------------------
  |  Branch (8080:3): [True: 0, False: 314M]
  ------------------
 8081|      0|#line 1694 "MachineIndependent/glslang.y"
 8082|      0|                 {
 8083|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8084|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8085|      0|        (yyval.interm.type).qualifier.nonprivate = true;
 8086|      0|    }
 8087|      0|#line 8088 "MachineIndependent/glslang_tab.cpp"
 8088|      0|    break;
 8089|       |
 8090|      0|  case 208: /* storage_qualifier: SHADERCALLCOHERENT  */
  ------------------
  |  Branch (8090:3): [True: 0, False: 314M]
  ------------------
 8091|      0|#line 1699 "MachineIndependent/glslang.y"
 8092|      0|                         {
 8093|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8094|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8095|      0|        (yyval.interm.type).qualifier.shadercallcoherent = true;
 8096|      0|    }
 8097|      0|#line 8098 "MachineIndependent/glslang_tab.cpp"
 8098|      0|    break;
 8099|       |
 8100|  1.61M|  case 209: /* storage_qualifier: VOLATILE  */
  ------------------
  |  Branch (8100:3): [True: 1.61M, False: 312M]
  ------------------
 8101|  1.61M|#line 1704 "MachineIndependent/glslang.y"
 8102|  1.61M|               {
 8103|  1.61M|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8104|  1.61M|        (yyval.interm.type).qualifier.volatil = true;
 8105|  1.61M|    }
 8106|  1.61M|#line 8107 "MachineIndependent/glslang_tab.cpp"
 8107|  1.61M|    break;
 8108|       |
 8109|      0|  case 210: /* storage_qualifier: RESTRICT  */
  ------------------
  |  Branch (8109:3): [True: 0, False: 314M]
  ------------------
 8110|      0|#line 1708 "MachineIndependent/glslang.y"
 8111|      0|               {
 8112|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8113|      0|        (yyval.interm.type).qualifier.restrict = true;
 8114|      0|    }
 8115|      0|#line 8116 "MachineIndependent/glslang_tab.cpp"
 8116|      0|    break;
 8117|       |
 8118|   208k|  case 211: /* storage_qualifier: READONLY  */
  ------------------
  |  Branch (8118:3): [True: 208k, False: 314M]
  ------------------
 8119|   208k|#line 1712 "MachineIndependent/glslang.y"
 8120|   208k|               {
 8121|   208k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8122|   208k|        (yyval.interm.type).qualifier.readonly = true;
 8123|   208k|    }
 8124|   208k|#line 8125 "MachineIndependent/glslang_tab.cpp"
 8125|   208k|    break;
 8126|       |
 8127|   173k|  case 212: /* storage_qualifier: WRITEONLY  */
  ------------------
  |  Branch (8127:3): [True: 173k, False: 314M]
  ------------------
 8128|   173k|#line 1716 "MachineIndependent/glslang.y"
 8129|   173k|                {
 8130|   173k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8131|   173k|        (yyval.interm.type).qualifier.writeonly = true;
 8132|   173k|    }
 8133|   173k|#line 8134 "MachineIndependent/glslang_tab.cpp"
 8134|   173k|    break;
 8135|       |
 8136|  1.49M|  case 213: /* storage_qualifier: NONTEMPORAL  */
  ------------------
  |  Branch (8136:3): [True: 1.49M, False: 313M]
  ------------------
 8137|  1.49M|#line 1720 "MachineIndependent/glslang.y"
 8138|  1.49M|                  {
 8139|  1.49M|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8140|  1.49M|        (yyval.interm.type).qualifier.nontemporal  = true;
 8141|  1.49M|    }
 8142|  1.49M|#line 8143 "MachineIndependent/glslang_tab.cpp"
 8143|  1.49M|    break;
 8144|       |
 8145|      0|  case 214: /* storage_qualifier: SUBROUTINE  */
  ------------------
  |  Branch (8145:3): [True: 0, False: 314M]
  ------------------
 8146|      0|#line 1724 "MachineIndependent/glslang.y"
 8147|      0|                 {
 8148|      0|        parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8149|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8150|      0|        parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8151|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8152|      0|    }
 8153|      0|#line 8154 "MachineIndependent/glslang_tab.cpp"
 8154|      0|    break;
 8155|       |
 8156|      0|  case 215: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
  ------------------
  |  Branch (8156:3): [True: 0, False: 314M]
  ------------------
 8157|      0|#line 1730 "MachineIndependent/glslang.y"
 8158|      0|                                                       {
 8159|      0|        parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8160|      0|        parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8161|      0|        parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8162|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc);
 8163|      0|    }
 8164|      0|#line 8165 "MachineIndependent/glslang_tab.cpp"
 8165|      0|    break;
 8166|       |
 8167|      0|  case 216: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT  */
  ------------------
  |  Branch (8167:3): [True: 0, False: 314M]
  ------------------
 8168|      0|#line 1736 "MachineIndependent/glslang.y"
 8169|      0|                              {
 8170|       |        // No need for profile version or extension check. Shader stage already checks both.
 8171|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8172|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8173|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8174|      0|        (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT;
 8175|      0|    }
 8176|      0|#line 8177 "MachineIndependent/glslang_tab.cpp"
 8177|      0|    break;
 8178|       |
 8179|      0|  case 217: /* non_uniform_qualifier: NONUNIFORM  */
  ------------------
  |  Branch (8179:3): [True: 0, False: 314M]
  ------------------
 8180|      0|#line 1746 "MachineIndependent/glslang.y"
 8181|      0|                 {
 8182|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 8183|      0|        (yyval.interm.type).qualifier.nonUniform = true;
 8184|      0|    }
 8185|      0|#line 8186 "MachineIndependent/glslang_tab.cpp"
 8186|      0|    break;
 8187|       |
 8188|      0|  case 218: /* type_name_list: IDENTIFIER  */
  ------------------
  |  Branch (8188:3): [True: 0, False: 314M]
  ------------------
 8189|      0|#line 1753 "MachineIndependent/glslang.y"
 8190|      0|                 {
 8191|       |        // TODO
 8192|      0|    }
 8193|      0|#line 8194 "MachineIndependent/glslang_tab.cpp"
 8194|      0|    break;
 8195|       |
 8196|      0|  case 219: /* type_name_list: type_name_list COMMA IDENTIFIER  */
  ------------------
  |  Branch (8196:3): [True: 0, False: 314M]
  ------------------
 8197|      0|#line 1756 "MachineIndependent/glslang.y"
 8198|      0|                                      {
 8199|       |        // TODO: 4.0 semantics: subroutines
 8200|       |        // 1) make sure each identifier is a type declared earlier with SUBROUTINE
 8201|       |        // 2) save all of the identifiers for future comparison with the declared function
 8202|      0|    }
 8203|      0|#line 8204 "MachineIndependent/glslang_tab.cpp"
 8204|      0|    break;
 8205|       |
 8206|  39.0M|  case 220: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
  ------------------
  |  Branch (8206:3): [True: 39.0M, False: 275M]
  ------------------
 8207|  39.0M|#line 1764 "MachineIndependent/glslang.y"
 8208|  39.0M|                                                           {
 8209|  39.0M|        (yyval.interm.type) = (yyvsp[-1].interm.type);
 8210|  39.0M|        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
  ------------------
  |  |  783|  39.0M|#define parseContext (*pParseContext)
  ------------------
 8211|  39.0M|        (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
 8212|  39.0M|        parseContext.typeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type));
  ------------------
  |  |  783|  39.0M|#define parseContext (*pParseContext)
  ------------------
 8213|       |
 8214|  39.0M|    }
 8215|  39.0M|#line 8216 "MachineIndependent/glslang_tab.cpp"
 8216|  39.0M|    break;
 8217|       |
 8218|   533k|  case 221: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
  ------------------
  |  Branch (8218:3): [True: 533k, False: 314M]
  ------------------
 8219|   533k|#line 1771 "MachineIndependent/glslang.y"
 8220|   533k|                                                                           {
 8221|   533k|        parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  783|   533k|#define parseContext (*pParseContext)
  ------------------
 8222|   533k|        (yyval.interm.type) = (yyvsp[-2].interm.type);
 8223|   533k|        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
  ------------------
  |  |  783|   533k|#define parseContext (*pParseContext)
  ------------------
 8224|   533k|        (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
 8225|   533k|        (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
 8226|   533k|        parseContext.typeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type));
  ------------------
  |  |  783|   533k|#define parseContext (*pParseContext)
  ------------------
 8227|   533k|    }
 8228|   533k|#line 8229 "MachineIndependent/glslang_tab.cpp"
 8229|   533k|    break;
 8230|       |
 8231|   554k|  case 222: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
  ------------------
  |  Branch (8231:3): [True: 554k, False: 314M]
  ------------------
 8232|   554k|#line 1782 "MachineIndependent/glslang.y"
 8233|   554k|                                 {
 8234|   554k|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 8235|   554k|        (yyval.interm).arraySizes = new TArraySizes;
 8236|   554k|        (yyval.interm).arraySizes->addInnerSize();
 8237|   554k|    }
 8238|   554k|#line 8239 "MachineIndependent/glslang_tab.cpp"
 8239|   554k|    break;
 8240|       |
 8241|   106k|  case 223: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
  ------------------
  |  Branch (8241:3): [True: 106k, False: 314M]
  ------------------
 8242|   106k|#line 1787 "MachineIndependent/glslang.y"
 8243|   106k|                                                        {
 8244|   106k|        (yyval.interm).loc = (yyvsp[-2].lex).loc;
 8245|   106k|        (yyval.interm).arraySizes = new TArraySizes;
 8246|       |
 8247|   106k|        TArraySize size;
 8248|   106k|        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
  ------------------
  |  |  783|   106k|#define parseContext (*pParseContext)
  ------------------
 8249|   106k|        (yyval.interm).arraySizes->addInnerSize(size);
 8250|   106k|    }
 8251|   106k|#line 8252 "MachineIndependent/glslang_tab.cpp"
 8252|   106k|    break;
 8253|       |
 8254|  1.34k|  case 224: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
  ------------------
  |  Branch (8254:3): [True: 1.34k, False: 314M]
  ------------------
 8255|  1.34k|#line 1795 "MachineIndependent/glslang.y"
 8256|  1.34k|                                                 {
 8257|  1.34k|        (yyval.interm) = (yyvsp[-2].interm);
 8258|  1.34k|        (yyval.interm).arraySizes->addInnerSize();
 8259|  1.34k|    }
 8260|  1.34k|#line 8261 "MachineIndependent/glslang_tab.cpp"
 8261|  1.34k|    break;
 8262|       |
 8263|      0|  case 225: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
  ------------------
  |  Branch (8263:3): [True: 0, False: 314M]
  ------------------
 8264|      0|#line 1799 "MachineIndependent/glslang.y"
 8265|      0|                                                                        {
 8266|      0|        (yyval.interm) = (yyvsp[-3].interm);
 8267|       |
 8268|      0|        TArraySize size;
 8269|      0|        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8270|      0|        (yyval.interm).arraySizes->addInnerSize(size);
 8271|      0|    }
 8272|      0|#line 8273 "MachineIndependent/glslang_tab.cpp"
 8273|      0|    break;
 8274|       |
 8275|  17.1k|  case 226: /* type_parameter_specifier_opt: type_parameter_specifier  */
  ------------------
  |  Branch (8275:3): [True: 17.1k, False: 314M]
  ------------------
 8276|  17.1k|#line 1809 "MachineIndependent/glslang.y"
 8277|  17.1k|                               {
 8278|  17.1k|        (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
 8279|  17.1k|    }
 8280|  17.1k|#line 8281 "MachineIndependent/glslang_tab.cpp"
 8281|  17.1k|    break;
 8282|       |
 8283|  39.5M|  case 227: /* type_parameter_specifier_opt: %empty  */
  ------------------
  |  Branch (8283:3): [True: 39.5M, False: 274M]
  ------------------
 8284|  39.5M|#line 1812 "MachineIndependent/glslang.y"
 8285|  39.5M|                        {
 8286|  39.5M|        (yyval.interm.typeParameters) = 0;
 8287|  39.5M|    }
 8288|  39.5M|#line 8289 "MachineIndependent/glslang_tab.cpp"
 8289|  39.5M|    break;
 8290|       |
 8291|  17.1k|  case 228: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
  ------------------
  |  Branch (8291:3): [True: 17.1k, False: 314M]
  ------------------
 8292|  17.1k|#line 1818 "MachineIndependent/glslang.y"
 8293|  17.1k|                                                           {
 8294|  17.1k|        (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
 8295|  17.1k|    }
 8296|  17.1k|#line 8297 "MachineIndependent/glslang_tab.cpp"
 8297|  17.1k|    break;
 8298|       |
 8299|  17.1k|  case 229: /* type_parameter_specifier_list: type_specifier  */
  ------------------
  |  Branch (8299:3): [True: 17.1k, False: 314M]
  ------------------
 8300|  17.1k|#line 1824 "MachineIndependent/glslang.y"
 8301|  17.1k|                     {
 8302|  17.1k|        (yyval.interm.typeParameters) = new TTypeParameters;
 8303|  17.1k|        (yyval.interm.typeParameters)->arraySizes = new TArraySizes;
 8304|  17.1k|        (yyval.interm.typeParameters)->spirvType = (yyvsp[0].interm.type).spirvType;
 8305|  17.1k|        (yyval.interm.typeParameters)->basicType = (yyvsp[0].interm.type).basicType;
 8306|  17.1k|    }
 8307|  17.1k|#line 8308 "MachineIndependent/glslang_tab.cpp"
 8308|  17.1k|    break;
 8309|       |
 8310|      0|  case 230: /* type_parameter_specifier_list: unary_expression  */
  ------------------
  |  Branch (8310:3): [True: 0, False: 314M]
  ------------------
 8311|      0|#line 1830 "MachineIndependent/glslang.y"
 8312|      0|                       {
 8313|      0|        (yyval.interm.typeParameters) = new TTypeParameters;
 8314|      0|        (yyval.interm.typeParameters)->arraySizes = new TArraySizes;
 8315|       |
 8316|      0|        TArraySize size;
 8317|      0|        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8318|      0|        (yyval.interm.typeParameters)->arraySizes->addInnerSize(size);
 8319|      0|    }
 8320|      0|#line 8321 "MachineIndependent/glslang_tab.cpp"
 8321|      0|    break;
 8322|       |
 8323|  17.1k|  case 231: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
  ------------------
  |  Branch (8323:3): [True: 17.1k, False: 314M]
  ------------------
 8324|  17.1k|#line 1838 "MachineIndependent/glslang.y"
 8325|  17.1k|                                                           {
 8326|  17.1k|        (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 8327|       |
 8328|  17.1k|        TArraySize size;
 8329|  17.1k|        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true);
  ------------------
  |  |  783|  17.1k|#define parseContext (*pParseContext)
  ------------------
 8330|  17.1k|        (yyval.interm.typeParameters)->arraySizes->addInnerSize(size);
 8331|  17.1k|    }
 8332|  17.1k|#line 8333 "MachineIndependent/glslang_tab.cpp"
 8333|  17.1k|    break;
 8334|       |
 8335|   584k|  case 232: /* type_specifier_nonarray: VOID  */
  ------------------
  |  Branch (8335:3): [True: 584k, False: 313M]
  ------------------
 8336|   584k|#line 1848 "MachineIndependent/glslang.y"
 8337|   584k|           {
 8338|   584k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   584k|#define parseContext (*pParseContext)
  ------------------
 8339|   584k|        (yyval.interm.type).basicType = EbtVoid;
 8340|   584k|    }
 8341|   584k|#line 8342 "MachineIndependent/glslang_tab.cpp"
 8342|   584k|    break;
 8343|       |
 8344|  1.90M|  case 233: /* type_specifier_nonarray: FLOAT  */
  ------------------
  |  Branch (8344:3): [True: 1.90M, False: 312M]
  ------------------
 8345|  1.90M|#line 1852 "MachineIndependent/glslang.y"
 8346|  1.90M|            {
 8347|  1.90M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.90M|#define parseContext (*pParseContext)
  ------------------
 8348|  1.90M|        (yyval.interm.type).basicType = EbtFloat;
 8349|  1.90M|    }
 8350|  1.90M|#line 8351 "MachineIndependent/glslang_tab.cpp"
 8351|  1.90M|    break;
 8352|       |
 8353|  5.26M|  case 234: /* type_specifier_nonarray: INT  */
  ------------------
  |  Branch (8353:3): [True: 5.26M, False: 309M]
  ------------------
 8354|  5.26M|#line 1856 "MachineIndependent/glslang.y"
 8355|  5.26M|          {
 8356|  5.26M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.26M|#define parseContext (*pParseContext)
  ------------------
 8357|  5.26M|        (yyval.interm.type).basicType = EbtInt;
 8358|  5.26M|    }
 8359|  5.26M|#line 8360 "MachineIndependent/glslang_tab.cpp"
 8360|  5.26M|    break;
 8361|       |
 8362|  2.88M|  case 235: /* type_specifier_nonarray: UINT  */
  ------------------
  |  Branch (8362:3): [True: 2.88M, False: 311M]
  ------------------
 8363|  2.88M|#line 1860 "MachineIndependent/glslang.y"
 8364|  2.88M|           {
 8365|  2.88M|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
  ------------------
  |  |  783|  2.88M|#define parseContext (*pParseContext)
  ------------------
 8366|  2.88M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.88M|#define parseContext (*pParseContext)
  ------------------
 8367|  2.88M|        (yyval.interm.type).basicType = EbtUint;
 8368|  2.88M|    }
 8369|  2.88M|#line 8370 "MachineIndependent/glslang_tab.cpp"
 8370|  2.88M|    break;
 8371|       |
 8372|   398k|  case 236: /* type_specifier_nonarray: BOOL  */
  ------------------
  |  Branch (8372:3): [True: 398k, False: 314M]
  ------------------
 8373|   398k|#line 1865 "MachineIndependent/glslang.y"
 8374|   398k|           {
 8375|   398k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   398k|#define parseContext (*pParseContext)
  ------------------
 8376|   398k|        (yyval.interm.type).basicType = EbtBool;
 8377|   398k|    }
 8378|   398k|#line 8379 "MachineIndependent/glslang_tab.cpp"
 8379|   398k|    break;
 8380|       |
 8381|  1.37M|  case 237: /* type_specifier_nonarray: VEC2  */
  ------------------
  |  Branch (8381:3): [True: 1.37M, False: 313M]
  ------------------
 8382|  1.37M|#line 1869 "MachineIndependent/glslang.y"
 8383|  1.37M|           {
 8384|  1.37M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.37M|#define parseContext (*pParseContext)
  ------------------
 8385|  1.37M|        (yyval.interm.type).basicType = EbtFloat;
 8386|  1.37M|        (yyval.interm.type).setVector(2);
 8387|  1.37M|    }
 8388|  1.37M|#line 8389 "MachineIndependent/glslang_tab.cpp"
 8389|  1.37M|    break;
 8390|       |
 8391|  1.26M|  case 238: /* type_specifier_nonarray: VEC3  */
  ------------------
  |  Branch (8391:3): [True: 1.26M, False: 313M]
  ------------------
 8392|  1.26M|#line 1874 "MachineIndependent/glslang.y"
 8393|  1.26M|           {
 8394|  1.26M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.26M|#define parseContext (*pParseContext)
  ------------------
 8395|  1.26M|        (yyval.interm.type).basicType = EbtFloat;
 8396|  1.26M|        (yyval.interm.type).setVector(3);
 8397|  1.26M|    }
 8398|  1.26M|#line 8399 "MachineIndependent/glslang_tab.cpp"
 8399|  1.26M|    break;
 8400|       |
 8401|  1.19M|  case 239: /* type_specifier_nonarray: VEC4  */
  ------------------
  |  Branch (8401:3): [True: 1.19M, False: 313M]
  ------------------
 8402|  1.19M|#line 1879 "MachineIndependent/glslang.y"
 8403|  1.19M|           {
 8404|  1.19M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.19M|#define parseContext (*pParseContext)
  ------------------
 8405|  1.19M|        (yyval.interm.type).basicType = EbtFloat;
 8406|  1.19M|        (yyval.interm.type).setVector(4);
 8407|  1.19M|    }
 8408|  1.19M|#line 8409 "MachineIndependent/glslang_tab.cpp"
 8409|  1.19M|    break;
 8410|       |
 8411|   241k|  case 240: /* type_specifier_nonarray: BVEC2  */
  ------------------
  |  Branch (8411:3): [True: 241k, False: 314M]
  ------------------
 8412|   241k|#line 1884 "MachineIndependent/glslang.y"
 8413|   241k|            {
 8414|   241k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   241k|#define parseContext (*pParseContext)
  ------------------
 8415|   241k|        (yyval.interm.type).basicType = EbtBool;
 8416|   241k|        (yyval.interm.type).setVector(2);
 8417|   241k|    }
 8418|   241k|#line 8419 "MachineIndependent/glslang_tab.cpp"
 8419|   241k|    break;
 8420|       |
 8421|   241k|  case 241: /* type_specifier_nonarray: BVEC3  */
  ------------------
  |  Branch (8421:3): [True: 241k, False: 314M]
  ------------------
 8422|   241k|#line 1889 "MachineIndependent/glslang.y"
 8423|   241k|            {
 8424|   241k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   241k|#define parseContext (*pParseContext)
  ------------------
 8425|   241k|        (yyval.interm.type).basicType = EbtBool;
 8426|   241k|        (yyval.interm.type).setVector(3);
 8427|   241k|    }
 8428|   241k|#line 8429 "MachineIndependent/glslang_tab.cpp"
 8429|   241k|    break;
 8430|       |
 8431|   241k|  case 242: /* type_specifier_nonarray: BVEC4  */
  ------------------
  |  Branch (8431:3): [True: 241k, False: 314M]
  ------------------
 8432|   241k|#line 1894 "MachineIndependent/glslang.y"
 8433|   241k|            {
 8434|   241k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   241k|#define parseContext (*pParseContext)
  ------------------
 8435|   241k|        (yyval.interm.type).basicType = EbtBool;
 8436|   241k|        (yyval.interm.type).setVector(4);
 8437|   241k|    }
 8438|   241k|#line 8439 "MachineIndependent/glslang_tab.cpp"
 8439|   241k|    break;
 8440|       |
 8441|  1.41M|  case 243: /* type_specifier_nonarray: IVEC2  */
  ------------------
  |  Branch (8441:3): [True: 1.41M, False: 313M]
  ------------------
 8442|  1.41M|#line 1899 "MachineIndependent/glslang.y"
 8443|  1.41M|            {
 8444|  1.41M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.41M|#define parseContext (*pParseContext)
  ------------------
 8445|  1.41M|        (yyval.interm.type).basicType = EbtInt;
 8446|  1.41M|        (yyval.interm.type).setVector(2);
 8447|  1.41M|    }
 8448|  1.41M|#line 8449 "MachineIndependent/glslang_tab.cpp"
 8449|  1.41M|    break;
 8450|       |
 8451|  1.27M|  case 244: /* type_specifier_nonarray: IVEC3  */
  ------------------
  |  Branch (8451:3): [True: 1.27M, False: 313M]
  ------------------
 8452|  1.27M|#line 1904 "MachineIndependent/glslang.y"
 8453|  1.27M|            {
 8454|  1.27M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.27M|#define parseContext (*pParseContext)
  ------------------
 8455|  1.27M|        (yyval.interm.type).basicType = EbtInt;
 8456|  1.27M|        (yyval.interm.type).setVector(3);
 8457|  1.27M|    }
 8458|  1.27M|#line 8459 "MachineIndependent/glslang_tab.cpp"
 8459|  1.27M|    break;
 8460|       |
 8461|   748k|  case 245: /* type_specifier_nonarray: IVEC4  */
  ------------------
  |  Branch (8461:3): [True: 748k, False: 313M]
  ------------------
 8462|   748k|#line 1909 "MachineIndependent/glslang.y"
 8463|   748k|            {
 8464|   748k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   748k|#define parseContext (*pParseContext)
  ------------------
 8465|   748k|        (yyval.interm.type).basicType = EbtInt;
 8466|   748k|        (yyval.interm.type).setVector(4);
 8467|   748k|    }
 8468|   748k|#line 8469 "MachineIndependent/glslang_tab.cpp"
 8469|   748k|    break;
 8470|       |
 8471|   373k|  case 246: /* type_specifier_nonarray: UVEC2  */
  ------------------
  |  Branch (8471:3): [True: 373k, False: 314M]
  ------------------
 8472|   373k|#line 1914 "MachineIndependent/glslang.y"
 8473|   373k|            {
 8474|   373k|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
  ------------------
  |  |  783|   373k|#define parseContext (*pParseContext)
  ------------------
 8475|   373k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   373k|#define parseContext (*pParseContext)
  ------------------
 8476|   373k|        (yyval.interm.type).basicType = EbtUint;
 8477|   373k|        (yyval.interm.type).setVector(2);
 8478|   373k|    }
 8479|   373k|#line 8480 "MachineIndependent/glslang_tab.cpp"
 8480|   373k|    break;
 8481|       |
 8482|   352k|  case 247: /* type_specifier_nonarray: UVEC3  */
  ------------------
  |  Branch (8482:3): [True: 352k, False: 314M]
  ------------------
 8483|   352k|#line 1920 "MachineIndependent/glslang.y"
 8484|   352k|            {
 8485|   352k|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
  ------------------
  |  |  783|   352k|#define parseContext (*pParseContext)
  ------------------
 8486|   352k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   352k|#define parseContext (*pParseContext)
  ------------------
 8487|   352k|        (yyval.interm.type).basicType = EbtUint;
 8488|   352k|        (yyval.interm.type).setVector(3);
 8489|   352k|    }
 8490|   352k|#line 8491 "MachineIndependent/glslang_tab.cpp"
 8491|   352k|    break;
 8492|       |
 8493|  2.06M|  case 248: /* type_specifier_nonarray: UVEC4  */
  ------------------
  |  Branch (8493:3): [True: 2.06M, False: 312M]
  ------------------
 8494|  2.06M|#line 1926 "MachineIndependent/glslang.y"
 8495|  2.06M|            {
 8496|  2.06M|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
  ------------------
  |  |  783|  2.06M|#define parseContext (*pParseContext)
  ------------------
 8497|  2.06M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.06M|#define parseContext (*pParseContext)
  ------------------
 8498|  2.06M|        (yyval.interm.type).basicType = EbtUint;
 8499|  2.06M|        (yyval.interm.type).setVector(4);
 8500|  2.06M|    }
 8501|  2.06M|#line 8502 "MachineIndependent/glslang_tab.cpp"
 8502|  2.06M|    break;
 8503|       |
 8504|  13.9k|  case 249: /* type_specifier_nonarray: MAT2  */
  ------------------
  |  Branch (8504:3): [True: 13.9k, False: 314M]
  ------------------
 8505|  13.9k|#line 1932 "MachineIndependent/glslang.y"
 8506|  13.9k|           {
 8507|  13.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  13.9k|#define parseContext (*pParseContext)
  ------------------
 8508|  13.9k|        (yyval.interm.type).basicType = EbtFloat;
 8509|  13.9k|        (yyval.interm.type).setMatrix(2, 2);
 8510|  13.9k|    }
 8511|  13.9k|#line 8512 "MachineIndependent/glslang_tab.cpp"
 8512|  13.9k|    break;
 8513|       |
 8514|  13.9k|  case 250: /* type_specifier_nonarray: MAT3  */
  ------------------
  |  Branch (8514:3): [True: 13.9k, False: 314M]
  ------------------
 8515|  13.9k|#line 1937 "MachineIndependent/glslang.y"
 8516|  13.9k|           {
 8517|  13.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  13.9k|#define parseContext (*pParseContext)
  ------------------
 8518|  13.9k|        (yyval.interm.type).basicType = EbtFloat;
 8519|  13.9k|        (yyval.interm.type).setMatrix(3, 3);
 8520|  13.9k|    }
 8521|  13.9k|#line 8522 "MachineIndependent/glslang_tab.cpp"
 8522|  13.9k|    break;
 8523|       |
 8524|  13.9k|  case 251: /* type_specifier_nonarray: MAT4  */
  ------------------
  |  Branch (8524:3): [True: 13.9k, False: 314M]
  ------------------
 8525|  13.9k|#line 1942 "MachineIndependent/glslang.y"
 8526|  13.9k|           {
 8527|  13.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  13.9k|#define parseContext (*pParseContext)
  ------------------
 8528|  13.9k|        (yyval.interm.type).basicType = EbtFloat;
 8529|  13.9k|        (yyval.interm.type).setMatrix(4, 4);
 8530|  13.9k|    }
 8531|  13.9k|#line 8532 "MachineIndependent/glslang_tab.cpp"
 8532|  13.9k|    break;
 8533|       |
 8534|      0|  case 252: /* type_specifier_nonarray: MAT2X2  */
  ------------------
  |  Branch (8534:3): [True: 0, False: 314M]
  ------------------
 8535|      0|#line 1947 "MachineIndependent/glslang.y"
 8536|      0|             {
 8537|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8538|      0|        (yyval.interm.type).basicType = EbtFloat;
 8539|      0|        (yyval.interm.type).setMatrix(2, 2);
 8540|      0|    }
 8541|      0|#line 8542 "MachineIndependent/glslang_tab.cpp"
 8542|      0|    break;
 8543|       |
 8544|  8.64k|  case 253: /* type_specifier_nonarray: MAT2X3  */
  ------------------
  |  Branch (8544:3): [True: 8.64k, False: 314M]
  ------------------
 8545|  8.64k|#line 1952 "MachineIndependent/glslang.y"
 8546|  8.64k|             {
 8547|  8.64k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.64k|#define parseContext (*pParseContext)
  ------------------
 8548|  8.64k|        (yyval.interm.type).basicType = EbtFloat;
 8549|  8.64k|        (yyval.interm.type).setMatrix(2, 3);
 8550|  8.64k|    }
 8551|  8.64k|#line 8552 "MachineIndependent/glslang_tab.cpp"
 8552|  8.64k|    break;
 8553|       |
 8554|  8.64k|  case 254: /* type_specifier_nonarray: MAT2X4  */
  ------------------
  |  Branch (8554:3): [True: 8.64k, False: 314M]
  ------------------
 8555|  8.64k|#line 1957 "MachineIndependent/glslang.y"
 8556|  8.64k|             {
 8557|  8.64k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.64k|#define parseContext (*pParseContext)
  ------------------
 8558|  8.64k|        (yyval.interm.type).basicType = EbtFloat;
 8559|  8.64k|        (yyval.interm.type).setMatrix(2, 4);
 8560|  8.64k|    }
 8561|  8.64k|#line 8562 "MachineIndependent/glslang_tab.cpp"
 8562|  8.64k|    break;
 8563|       |
 8564|  8.64k|  case 255: /* type_specifier_nonarray: MAT3X2  */
  ------------------
  |  Branch (8564:3): [True: 8.64k, False: 314M]
  ------------------
 8565|  8.64k|#line 1962 "MachineIndependent/glslang.y"
 8566|  8.64k|             {
 8567|  8.64k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.64k|#define parseContext (*pParseContext)
  ------------------
 8568|  8.64k|        (yyval.interm.type).basicType = EbtFloat;
 8569|  8.64k|        (yyval.interm.type).setMatrix(3, 2);
 8570|  8.64k|    }
 8571|  8.64k|#line 8572 "MachineIndependent/glslang_tab.cpp"
 8572|  8.64k|    break;
 8573|       |
 8574|      0|  case 256: /* type_specifier_nonarray: MAT3X3  */
  ------------------
  |  Branch (8574:3): [True: 0, False: 314M]
  ------------------
 8575|      0|#line 1967 "MachineIndependent/glslang.y"
 8576|      0|             {
 8577|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8578|      0|        (yyval.interm.type).basicType = EbtFloat;
 8579|      0|        (yyval.interm.type).setMatrix(3, 3);
 8580|      0|    }
 8581|      0|#line 8582 "MachineIndependent/glslang_tab.cpp"
 8582|      0|    break;
 8583|       |
 8584|  8.64k|  case 257: /* type_specifier_nonarray: MAT3X4  */
  ------------------
  |  Branch (8584:3): [True: 8.64k, False: 314M]
  ------------------
 8585|  8.64k|#line 1972 "MachineIndependent/glslang.y"
 8586|  8.64k|             {
 8587|  8.64k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.64k|#define parseContext (*pParseContext)
  ------------------
 8588|  8.64k|        (yyval.interm.type).basicType = EbtFloat;
 8589|  8.64k|        (yyval.interm.type).setMatrix(3, 4);
 8590|  8.64k|    }
 8591|  8.64k|#line 8592 "MachineIndependent/glslang_tab.cpp"
 8592|  8.64k|    break;
 8593|       |
 8594|  8.64k|  case 258: /* type_specifier_nonarray: MAT4X2  */
  ------------------
  |  Branch (8594:3): [True: 8.64k, False: 314M]
  ------------------
 8595|  8.64k|#line 1977 "MachineIndependent/glslang.y"
 8596|  8.64k|             {
 8597|  8.64k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.64k|#define parseContext (*pParseContext)
  ------------------
 8598|  8.64k|        (yyval.interm.type).basicType = EbtFloat;
 8599|  8.64k|        (yyval.interm.type).setMatrix(4, 2);
 8600|  8.64k|    }
 8601|  8.64k|#line 8602 "MachineIndependent/glslang_tab.cpp"
 8602|  8.64k|    break;
 8603|       |
 8604|  8.66k|  case 259: /* type_specifier_nonarray: MAT4X3  */
  ------------------
  |  Branch (8604:3): [True: 8.66k, False: 314M]
  ------------------
 8605|  8.66k|#line 1982 "MachineIndependent/glslang.y"
 8606|  8.66k|             {
 8607|  8.66k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.66k|#define parseContext (*pParseContext)
  ------------------
 8608|  8.66k|        (yyval.interm.type).basicType = EbtFloat;
 8609|  8.66k|        (yyval.interm.type).setMatrix(4, 3);
 8610|  8.66k|    }
 8611|  8.66k|#line 8612 "MachineIndependent/glslang_tab.cpp"
 8612|  8.66k|    break;
 8613|       |
 8614|      0|  case 260: /* type_specifier_nonarray: MAT4X4  */
  ------------------
  |  Branch (8614:3): [True: 0, False: 314M]
  ------------------
 8615|      0|#line 1987 "MachineIndependent/glslang.y"
 8616|      0|             {
 8617|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8618|      0|        (yyval.interm.type).basicType = EbtFloat;
 8619|      0|        (yyval.interm.type).setMatrix(4, 4);
 8620|      0|    }
 8621|      0|#line 8622 "MachineIndependent/glslang_tab.cpp"
 8622|      0|    break;
 8623|       |
 8624|   128k|  case 261: /* type_specifier_nonarray: DOUBLE  */
  ------------------
  |  Branch (8624:3): [True: 128k, False: 314M]
  ------------------
 8625|   128k|#line 1992 "MachineIndependent/glslang.y"
 8626|   128k|             {
 8627|   128k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
  ------------------
  |  |  783|   128k|#define parseContext (*pParseContext)
  ------------------
 8628|   128k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|   128k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8628:13): [True: 0, False: 128k]
  ------------------
 8629|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8630|   128k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   128k|#define parseContext (*pParseContext)
  ------------------
 8631|   128k|        (yyval.interm.type).basicType = EbtDouble;
 8632|   128k|    }
 8633|   128k|#line 8634 "MachineIndependent/glslang_tab.cpp"
 8634|   128k|    break;
 8635|       |
 8636|  17.8k|  case 262: /* type_specifier_nonarray: BFLOAT16_T  */
  ------------------
  |  Branch (8636:3): [True: 17.8k, False: 314M]
  ------------------
 8637|  17.8k|#line 1999 "MachineIndependent/glslang.y"
 8638|  17.8k|                 {
 8639|  17.8k|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "bfloat16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  17.8k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "bfloat16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  17.8k|#define parseContext (*pParseContext)
  ------------------
 8640|  17.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  17.8k|#define parseContext (*pParseContext)
  ------------------
 8641|  17.8k|        (yyval.interm.type).basicType = EbtBFloat16;
 8642|  17.8k|    }
 8643|  17.8k|#line 8644 "MachineIndependent/glslang_tab.cpp"
 8644|  17.8k|    break;
 8645|       |
 8646|  9.28k|  case 263: /* type_specifier_nonarray: FLOATE5M2_T  */
  ------------------
  |  Branch (8646:3): [True: 9.28k, False: 314M]
  ------------------
 8647|  9.28k|#line 2004 "MachineIndependent/glslang.y"
 8648|  9.28k|                  {
 8649|  9.28k|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate5m2_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.28k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate5m2_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.28k|#define parseContext (*pParseContext)
  ------------------
 8650|  9.28k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.28k|#define parseContext (*pParseContext)
  ------------------
 8651|  9.28k|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8652|  9.28k|    }
 8653|  9.28k|#line 8654 "MachineIndependent/glslang_tab.cpp"
 8654|  9.28k|    break;
 8655|       |
 8656|  9.28k|  case 264: /* type_specifier_nonarray: FLOATE4M3_T  */
  ------------------
  |  Branch (8656:3): [True: 9.28k, False: 314M]
  ------------------
 8657|  9.28k|#line 2009 "MachineIndependent/glslang.y"
 8658|  9.28k|                  {
 8659|  9.28k|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate4m3_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.28k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate4m3_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.28k|#define parseContext (*pParseContext)
  ------------------
 8660|  9.28k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.28k|#define parseContext (*pParseContext)
  ------------------
 8661|  9.28k|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8662|  9.28k|    }
 8663|  9.28k|#line 8664 "MachineIndependent/glslang_tab.cpp"
 8664|  9.28k|    break;
 8665|       |
 8666|  7.16k|  case 265: /* type_specifier_nonarray: FLOATE2M1_T  */
  ------------------
  |  Branch (8666:3): [True: 7.16k, False: 314M]
  ------------------
 8667|  7.16k|#line 2014 "MachineIndependent/glslang.y"
 8668|  7.16k|                  {
 8669|  7.16k|        parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "floate2m1_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "floate2m1_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
 8670|  7.16k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
 8671|  7.16k|        (yyval.interm.type).basicType = EbtFloatE2M1;
 8672|  7.16k|    }
 8673|  7.16k|#line 8674 "MachineIndependent/glslang_tab.cpp"
 8674|  7.16k|    break;
 8675|       |
 8676|  7.16k|  case 266: /* type_specifier_nonarray: FLOATE3M2_T  */
  ------------------
  |  Branch (8676:3): [True: 7.16k, False: 314M]
  ------------------
 8677|  7.16k|#line 2019 "MachineIndependent/glslang.y"
 8678|  7.16k|                  {
 8679|  7.16k|        parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate3m2_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate3m2_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
 8680|  7.16k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
 8681|  7.16k|        (yyval.interm.type).basicType = EbtFloatE3M2;
 8682|  7.16k|    }
 8683|  7.16k|#line 8684 "MachineIndependent/glslang_tab.cpp"
 8684|  7.16k|    break;
 8685|       |
 8686|  7.16k|  case 267: /* type_specifier_nonarray: FLOATE2M3_T  */
  ------------------
  |  Branch (8686:3): [True: 7.16k, False: 314M]
  ------------------
 8687|  7.16k|#line 2024 "MachineIndependent/glslang.y"
 8688|  7.16k|                  {
 8689|  7.16k|        parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate2m3_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate2m3_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
 8690|  7.16k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.16k|#define parseContext (*pParseContext)
  ------------------
 8691|  7.16k|        (yyval.interm.type).basicType = EbtFloatE2M3;
 8692|  7.16k|    }
 8693|  7.16k|#line 8694 "MachineIndependent/glslang_tab.cpp"
 8694|  7.16k|    break;
 8695|       |
 8696|  5.72k|  case 268: /* type_specifier_nonarray: FLOATUE8M0_T  */
  ------------------
  |  Branch (8696:3): [True: 5.72k, False: 314M]
  ------------------
 8697|  5.72k|#line 2029 "MachineIndependent/glslang.y"
 8698|  5.72k|                   {
 8699|  5.72k|        parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "floatue8m0_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "floatue8m0_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8700|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8701|  5.72k|        (yyval.interm.type).basicType = EbtFloatUE8M0;
 8702|  5.72k|    }
 8703|  5.72k|#line 8704 "MachineIndependent/glslang_tab.cpp"
 8704|  5.72k|    break;
 8705|       |
 8706|  5.72k|  case 269: /* type_specifier_nonarray: FLOATMXINT8_T  */
  ------------------
  |  Branch (8706:3): [True: 5.72k, False: 314M]
  ------------------
 8707|  5.72k|#line 2034 "MachineIndependent/glslang.y"
 8708|  5.72k|                    {
 8709|  5.72k|        parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "floatmxint8_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "floatmxint8_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8710|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8711|  5.72k|        (yyval.interm.type).basicType = EbtFloatMXINT8;
 8712|  5.72k|    }
 8713|  5.72k|#line 8714 "MachineIndependent/glslang_tab.cpp"
 8714|  5.72k|    break;
 8715|       |
 8716|   868k|  case 270: /* type_specifier_nonarray: FLOAT16_T  */
  ------------------
  |  Branch (8716:3): [True: 868k, False: 313M]
  ------------------
 8717|   868k|#line 2039 "MachineIndependent/glslang.y"
 8718|   868k|                {
 8719|   868k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   868k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   868k|#define parseContext (*pParseContext)
  ------------------
 8720|   868k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   868k|#define parseContext (*pParseContext)
  ------------------
 8721|   868k|        (yyval.interm.type).basicType = EbtFloat16;
 8722|   868k|    }
 8723|   868k|#line 8724 "MachineIndependent/glslang_tab.cpp"
 8724|   868k|    break;
 8725|       |
 8726|  33.7k|  case 271: /* type_specifier_nonarray: FLOAT32_T  */
  ------------------
  |  Branch (8726:3): [True: 33.7k, False: 314M]
  ------------------
 8727|  33.7k|#line 2044 "MachineIndependent/glslang.y"
 8728|  33.7k|                {
 8729|  33.7k|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  33.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  33.7k|#define parseContext (*pParseContext)
  ------------------
 8730|  33.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  33.7k|#define parseContext (*pParseContext)
  ------------------
 8731|  33.7k|        (yyval.interm.type).basicType = EbtFloat;
 8732|  33.7k|    }
 8733|  33.7k|#line 8734 "MachineIndependent/glslang_tab.cpp"
 8734|  33.7k|    break;
 8735|       |
 8736|   186k|  case 272: /* type_specifier_nonarray: FLOAT64_T  */
  ------------------
  |  Branch (8736:3): [True: 186k, False: 314M]
  ------------------
 8737|   186k|#line 2049 "MachineIndependent/glslang.y"
 8738|   186k|                {
 8739|   186k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   186k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   186k|#define parseContext (*pParseContext)
  ------------------
 8740|   186k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   186k|#define parseContext (*pParseContext)
  ------------------
 8741|   186k|        (yyval.interm.type).basicType = EbtDouble;
 8742|   186k|    }
 8743|   186k|#line 8744 "MachineIndependent/glslang_tab.cpp"
 8744|   186k|    break;
 8745|       |
 8746|   336k|  case 273: /* type_specifier_nonarray: INT8_T  */
  ------------------
  |  Branch (8746:3): [True: 336k, False: 314M]
  ------------------
 8747|   336k|#line 2054 "MachineIndependent/glslang.y"
 8748|   336k|             {
 8749|   336k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   336k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   336k|#define parseContext (*pParseContext)
  ------------------
 8750|   336k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   336k|#define parseContext (*pParseContext)
  ------------------
 8751|   336k|        (yyval.interm.type).basicType = EbtInt8;
 8752|   336k|    }
 8753|   336k|#line 8754 "MachineIndependent/glslang_tab.cpp"
 8754|   336k|    break;
 8755|       |
 8756|   291k|  case 274: /* type_specifier_nonarray: UINT8_T  */
  ------------------
  |  Branch (8756:3): [True: 291k, False: 314M]
  ------------------
 8757|   291k|#line 2059 "MachineIndependent/glslang.y"
 8758|   291k|              {
 8759|   291k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   291k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   291k|#define parseContext (*pParseContext)
  ------------------
 8760|   291k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   291k|#define parseContext (*pParseContext)
  ------------------
 8761|   291k|        (yyval.interm.type).basicType = EbtUint8;
 8762|   291k|    }
 8763|   291k|#line 8764 "MachineIndependent/glslang_tab.cpp"
 8764|   291k|    break;
 8765|       |
 8766|   380k|  case 275: /* type_specifier_nonarray: INT16_T  */
  ------------------
  |  Branch (8766:3): [True: 380k, False: 314M]
  ------------------
 8767|   380k|#line 2064 "MachineIndependent/glslang.y"
 8768|   380k|              {
 8769|   380k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   380k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   380k|#define parseContext (*pParseContext)
  ------------------
 8770|   380k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   380k|#define parseContext (*pParseContext)
  ------------------
 8771|   380k|        (yyval.interm.type).basicType = EbtInt16;
 8772|   380k|    }
 8773|   380k|#line 8774 "MachineIndependent/glslang_tab.cpp"
 8774|   380k|    break;
 8775|       |
 8776|   324k|  case 276: /* type_specifier_nonarray: UINT16_T  */
  ------------------
  |  Branch (8776:3): [True: 324k, False: 314M]
  ------------------
 8777|   324k|#line 2069 "MachineIndependent/glslang.y"
 8778|   324k|               {
 8779|   324k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   324k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   324k|#define parseContext (*pParseContext)
  ------------------
 8780|   324k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   324k|#define parseContext (*pParseContext)
  ------------------
 8781|   324k|        (yyval.interm.type).basicType = EbtUint16;
 8782|   324k|    }
 8783|   324k|#line 8784 "MachineIndependent/glslang_tab.cpp"
 8784|   324k|    break;
 8785|       |
 8786|  39.4k|  case 277: /* type_specifier_nonarray: INT32_T  */
  ------------------
  |  Branch (8786:3): [True: 39.4k, False: 314M]
  ------------------
 8787|  39.4k|#line 2074 "MachineIndependent/glslang.y"
 8788|  39.4k|              {
 8789|  39.4k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  39.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  39.4k|#define parseContext (*pParseContext)
  ------------------
 8790|  39.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  39.4k|#define parseContext (*pParseContext)
  ------------------
 8791|  39.4k|        (yyval.interm.type).basicType = EbtInt;
 8792|  39.4k|    }
 8793|  39.4k|#line 8794 "MachineIndependent/glslang_tab.cpp"
 8794|  39.4k|    break;
 8795|       |
 8796|  42.3k|  case 278: /* type_specifier_nonarray: UINT32_T  */
  ------------------
  |  Branch (8796:3): [True: 42.3k, False: 314M]
  ------------------
 8797|  42.3k|#line 2079 "MachineIndependent/glslang.y"
 8798|  42.3k|               {
 8799|  42.3k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  42.3k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  42.3k|#define parseContext (*pParseContext)
  ------------------
 8800|  42.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  42.3k|#define parseContext (*pParseContext)
  ------------------
 8801|  42.3k|        (yyval.interm.type).basicType = EbtUint;
 8802|  42.3k|    }
 8803|  42.3k|#line 8804 "MachineIndependent/glslang_tab.cpp"
 8804|  42.3k|    break;
 8805|       |
 8806|   843k|  case 279: /* type_specifier_nonarray: INT64_T  */
  ------------------
  |  Branch (8806:3): [True: 843k, False: 313M]
  ------------------
 8807|   843k|#line 2084 "MachineIndependent/glslang.y"
 8808|   843k|              {
 8809|   843k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   843k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   843k|#define parseContext (*pParseContext)
  ------------------
 8810|   843k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   843k|#define parseContext (*pParseContext)
  ------------------
 8811|   843k|        (yyval.interm.type).basicType = EbtInt64;
 8812|   843k|    }
 8813|   843k|#line 8814 "MachineIndependent/glslang_tab.cpp"
 8814|   843k|    break;
 8815|       |
 8816|  1.04M|  case 280: /* type_specifier_nonarray: UINT64_T  */
  ------------------
  |  Branch (8816:3): [True: 1.04M, False: 313M]
  ------------------
 8817|  1.04M|#line 2089 "MachineIndependent/glslang.y"
 8818|  1.04M|               {
 8819|  1.04M|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.04M|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.04M|#define parseContext (*pParseContext)
  ------------------
 8820|  1.04M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.04M|#define parseContext (*pParseContext)
  ------------------
 8821|  1.04M|        (yyval.interm.type).basicType = EbtUint64;
 8822|  1.04M|    }
 8823|  1.04M|#line 8824 "MachineIndependent/glslang_tab.cpp"
 8824|  1.04M|    break;
 8825|       |
 8826|   104k|  case 281: /* type_specifier_nonarray: DVEC2  */
  ------------------
  |  Branch (8826:3): [True: 104k, False: 314M]
  ------------------
 8827|   104k|#line 2094 "MachineIndependent/glslang.y"
 8828|   104k|            {
 8829|   104k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
 8830|   104k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8830:13): [True: 0, False: 104k]
  ------------------
 8831|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8832|   104k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
 8833|   104k|        (yyval.interm.type).basicType = EbtDouble;
 8834|   104k|        (yyval.interm.type).setVector(2);
 8835|   104k|    }
 8836|   104k|#line 8837 "MachineIndependent/glslang_tab.cpp"
 8837|   104k|    break;
 8838|       |
 8839|   104k|  case 282: /* type_specifier_nonarray: DVEC3  */
  ------------------
  |  Branch (8839:3): [True: 104k, False: 314M]
  ------------------
 8840|   104k|#line 2102 "MachineIndependent/glslang.y"
 8841|   104k|            {
 8842|   104k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
 8843|   104k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8843:13): [True: 0, False: 104k]
  ------------------
 8844|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8845|   104k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
 8846|   104k|        (yyval.interm.type).basicType = EbtDouble;
 8847|   104k|        (yyval.interm.type).setVector(3);
 8848|   104k|    }
 8849|   104k|#line 8850 "MachineIndependent/glslang_tab.cpp"
 8850|   104k|    break;
 8851|       |
 8852|   104k|  case 283: /* type_specifier_nonarray: DVEC4  */
  ------------------
  |  Branch (8852:3): [True: 104k, False: 314M]
  ------------------
 8853|   104k|#line 2110 "MachineIndependent/glslang.y"
 8854|   104k|            {
 8855|   104k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
 8856|   104k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8856:13): [True: 0, False: 104k]
  ------------------
 8857|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 8858|   104k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   104k|#define parseContext (*pParseContext)
  ------------------
 8859|   104k|        (yyval.interm.type).basicType = EbtDouble;
 8860|   104k|        (yyval.interm.type).setVector(4);
 8861|   104k|    }
 8862|   104k|#line 8863 "MachineIndependent/glslang_tab.cpp"
 8863|   104k|    break;
 8864|       |
 8865|  10.3k|  case 284: /* type_specifier_nonarray: BF16VEC2  */
  ------------------
  |  Branch (8865:3): [True: 10.3k, False: 314M]
  ------------------
 8866|  10.3k|#line 2118 "MachineIndependent/glslang.y"
 8867|  10.3k|               {
 8868|  10.3k|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
 8869|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
 8870|  10.3k|        (yyval.interm.type).basicType = EbtBFloat16;
 8871|  10.3k|        (yyval.interm.type).setVector(2);
 8872|  10.3k|    }
 8873|  10.3k|#line 8874 "MachineIndependent/glslang_tab.cpp"
 8874|  10.3k|    break;
 8875|       |
 8876|  8.59k|  case 285: /* type_specifier_nonarray: BF16VEC3  */
  ------------------
  |  Branch (8876:3): [True: 8.59k, False: 314M]
  ------------------
 8877|  8.59k|#line 2124 "MachineIndependent/glslang.y"
 8878|  8.59k|               {
 8879|  8.59k|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 8880|  8.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 8881|  8.59k|        (yyval.interm.type).basicType = EbtBFloat16;
 8882|  8.59k|        (yyval.interm.type).setVector(3);
 8883|  8.59k|    }
 8884|  8.59k|#line 8885 "MachineIndependent/glslang_tab.cpp"
 8885|  8.59k|    break;
 8886|       |
 8887|  10.3k|  case 286: /* type_specifier_nonarray: BF16VEC4  */
  ------------------
  |  Branch (8887:3): [True: 10.3k, False: 314M]
  ------------------
 8888|  10.3k|#line 2130 "MachineIndependent/glslang.y"
 8889|  10.3k|               {
 8890|  10.3k|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
 8891|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
 8892|  10.3k|        (yyval.interm.type).basicType = EbtBFloat16;
 8893|  10.3k|        (yyval.interm.type).setVector(4);
 8894|  10.3k|    }
 8895|  10.3k|#line 8896 "MachineIndependent/glslang_tab.cpp"
 8896|  10.3k|    break;
 8897|       |
 8898|  7.50k|  case 287: /* type_specifier_nonarray: FE5M2VEC2  */
  ------------------
  |  Branch (8898:3): [True: 7.50k, False: 314M]
  ------------------
 8899|  7.50k|#line 2136 "MachineIndependent/glslang.y"
 8900|  7.50k|                {
 8901|  7.50k|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8902|  7.50k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8903|  7.50k|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8904|  7.50k|        (yyval.interm.type).setVector(2);
 8905|  7.50k|    }
 8906|  7.50k|#line 8907 "MachineIndependent/glslang_tab.cpp"
 8907|  7.50k|    break;
 8908|       |
 8909|  5.72k|  case 288: /* type_specifier_nonarray: FE5M2VEC3  */
  ------------------
  |  Branch (8909:3): [True: 5.72k, False: 314M]
  ------------------
 8910|  5.72k|#line 2142 "MachineIndependent/glslang.y"
 8911|  5.72k|                {
 8912|  5.72k|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8913|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8914|  5.72k|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8915|  5.72k|        (yyval.interm.type).setVector(3);
 8916|  5.72k|    }
 8917|  5.72k|#line 8918 "MachineIndependent/glslang_tab.cpp"
 8918|  5.72k|    break;
 8919|       |
 8920|  7.50k|  case 289: /* type_specifier_nonarray: FE5M2VEC4  */
  ------------------
  |  Branch (8920:3): [True: 7.50k, False: 314M]
  ------------------
 8921|  7.50k|#line 2148 "MachineIndependent/glslang.y"
 8922|  7.50k|                {
 8923|  7.50k|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8924|  7.50k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8925|  7.50k|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8926|  7.50k|        (yyval.interm.type).setVector(4);
 8927|  7.50k|    }
 8928|  7.50k|#line 8929 "MachineIndependent/glslang_tab.cpp"
 8929|  7.50k|    break;
 8930|       |
 8931|  7.50k|  case 290: /* type_specifier_nonarray: FE4M3VEC2  */
  ------------------
  |  Branch (8931:3): [True: 7.50k, False: 314M]
  ------------------
 8932|  7.50k|#line 2154 "MachineIndependent/glslang.y"
 8933|  7.50k|                {
 8934|  7.50k|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8935|  7.50k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8936|  7.50k|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8937|  7.50k|        (yyval.interm.type).setVector(2);
 8938|  7.50k|    }
 8939|  7.50k|#line 8940 "MachineIndependent/glslang_tab.cpp"
 8940|  7.50k|    break;
 8941|       |
 8942|  5.72k|  case 291: /* type_specifier_nonarray: FE4M3VEC3  */
  ------------------
  |  Branch (8942:3): [True: 5.72k, False: 314M]
  ------------------
 8943|  5.72k|#line 2160 "MachineIndependent/glslang.y"
 8944|  5.72k|                {
 8945|  5.72k|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8946|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 8947|  5.72k|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8948|  5.72k|        (yyval.interm.type).setVector(3);
 8949|  5.72k|    }
 8950|  5.72k|#line 8951 "MachineIndependent/glslang_tab.cpp"
 8951|  5.72k|    break;
 8952|       |
 8953|  7.50k|  case 292: /* type_specifier_nonarray: FE4M3VEC4  */
  ------------------
  |  Branch (8953:3): [True: 7.50k, False: 314M]
  ------------------
 8954|  7.50k|#line 2166 "MachineIndependent/glslang.y"
 8955|  7.50k|                {
 8956|  7.50k|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8957|  7.50k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 8958|  7.50k|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8959|  7.50k|        (yyval.interm.type).setVector(4);
 8960|  7.50k|    }
 8961|  7.50k|#line 8962 "MachineIndependent/glslang_tab.cpp"
 8962|  7.50k|    break;
 8963|       |
 8964|  4.29k|  case 293: /* type_specifier_nonarray: FE2M1VEC2  */
  ------------------
  |  Branch (8964:3): [True: 4.29k, False: 314M]
  ------------------
 8965|  4.29k|#line 2172 "MachineIndependent/glslang.y"
 8966|  4.29k|                {
 8967|  4.29k|        parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 8968|  4.29k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 8969|  4.29k|        (yyval.interm.type).basicType = EbtFloatE2M1;
 8970|  4.29k|        (yyval.interm.type).setVector(2);
 8971|  4.29k|    }
 8972|  4.29k|#line 8973 "MachineIndependent/glslang_tab.cpp"
 8973|  4.29k|    break;
 8974|       |
 8975|  1.43k|  case 294: /* type_specifier_nonarray: FE2M1VEC3  */
  ------------------
  |  Branch (8975:3): [True: 1.43k, False: 314M]
  ------------------
 8976|  1.43k|#line 2178 "MachineIndependent/glslang.y"
 8977|  1.43k|                {
 8978|  1.43k|        parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 8979|  1.43k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 8980|  1.43k|        (yyval.interm.type).basicType = EbtFloatE2M1;
 8981|  1.43k|        (yyval.interm.type).setVector(3);
 8982|  1.43k|    }
 8983|  1.43k|#line 8984 "MachineIndependent/glslang_tab.cpp"
 8984|  1.43k|    break;
 8985|       |
 8986|  4.29k|  case 295: /* type_specifier_nonarray: FE2M1VEC4  */
  ------------------
  |  Branch (8986:3): [True: 4.29k, False: 314M]
  ------------------
 8987|  4.29k|#line 2184 "MachineIndependent/glslang.y"
 8988|  4.29k|                {
 8989|  4.29k|        parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 8990|  4.29k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 8991|  4.29k|        (yyval.interm.type).basicType = EbtFloatE2M1;
 8992|  4.29k|        (yyval.interm.type).setVector(4);
 8993|  4.29k|    }
 8994|  4.29k|#line 8995 "MachineIndependent/glslang_tab.cpp"
 8995|  4.29k|    break;
 8996|       |
 8997|  1.43k|  case 296: /* type_specifier_nonarray: FE3M2VEC2  */
  ------------------
  |  Branch (8997:3): [True: 1.43k, False: 314M]
  ------------------
 8998|  1.43k|#line 2190 "MachineIndependent/glslang.y"
 8999|  1.43k|                {
 9000|  1.43k|        parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9001|  1.43k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9002|  1.43k|        (yyval.interm.type).basicType = EbtFloatE3M2;
 9003|  1.43k|        (yyval.interm.type).setVector(2);
 9004|  1.43k|    }
 9005|  1.43k|#line 9006 "MachineIndependent/glslang_tab.cpp"
 9006|  1.43k|    break;
 9007|       |
 9008|  1.43k|  case 297: /* type_specifier_nonarray: FE3M2VEC3  */
  ------------------
  |  Branch (9008:3): [True: 1.43k, False: 314M]
  ------------------
 9009|  1.43k|#line 2196 "MachineIndependent/glslang.y"
 9010|  1.43k|                {
 9011|  1.43k|        parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9012|  1.43k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9013|  1.43k|        (yyval.interm.type).basicType = EbtFloatE3M2;
 9014|  1.43k|        (yyval.interm.type).setVector(3);
 9015|  1.43k|    }
 9016|  1.43k|#line 9017 "MachineIndependent/glslang_tab.cpp"
 9017|  1.43k|    break;
 9018|       |
 9019|  4.29k|  case 298: /* type_specifier_nonarray: FE3M2VEC4  */
  ------------------
  |  Branch (9019:3): [True: 4.29k, False: 314M]
  ------------------
 9020|  4.29k|#line 2202 "MachineIndependent/glslang.y"
 9021|  4.29k|                {
 9022|  4.29k|        parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 9023|  4.29k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 9024|  4.29k|        (yyval.interm.type).basicType = EbtFloatE3M2;
 9025|  4.29k|        (yyval.interm.type).setVector(4);
 9026|  4.29k|    }
 9027|  4.29k|#line 9028 "MachineIndependent/glslang_tab.cpp"
 9028|  4.29k|    break;
 9029|       |
 9030|  1.43k|  case 299: /* type_specifier_nonarray: FE2M3VEC2  */
  ------------------
  |  Branch (9030:3): [True: 1.43k, False: 314M]
  ------------------
 9031|  1.43k|#line 2208 "MachineIndependent/glslang.y"
 9032|  1.43k|                {
 9033|  1.43k|        parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9034|  1.43k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9035|  1.43k|        (yyval.interm.type).basicType = EbtFloatE2M3;
 9036|  1.43k|        (yyval.interm.type).setVector(2);
 9037|  1.43k|    }
 9038|  1.43k|#line 9039 "MachineIndependent/glslang_tab.cpp"
 9039|  1.43k|    break;
 9040|       |
 9041|  1.43k|  case 300: /* type_specifier_nonarray: FE2M3VEC3  */
  ------------------
  |  Branch (9041:3): [True: 1.43k, False: 314M]
  ------------------
 9042|  1.43k|#line 2214 "MachineIndependent/glslang.y"
 9043|  1.43k|                {
 9044|  1.43k|        parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9045|  1.43k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.43k|#define parseContext (*pParseContext)
  ------------------
 9046|  1.43k|        (yyval.interm.type).basicType = EbtFloatE2M3;
 9047|  1.43k|        (yyval.interm.type).setVector(3);
 9048|  1.43k|    }
 9049|  1.43k|#line 9050 "MachineIndependent/glslang_tab.cpp"
 9050|  1.43k|    break;
 9051|       |
 9052|  4.29k|  case 301: /* type_specifier_nonarray: FE2M3VEC4  */
  ------------------
  |  Branch (9052:3): [True: 4.29k, False: 314M]
  ------------------
 9053|  4.29k|#line 2220 "MachineIndependent/glslang.y"
 9054|  4.29k|                {
 9055|  4.29k|        parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 9056|  4.29k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.29k|#define parseContext (*pParseContext)
  ------------------
 9057|  4.29k|        (yyval.interm.type).basicType = EbtFloatE2M3;
 9058|  4.29k|        (yyval.interm.type).setVector(4);
 9059|  4.29k|    }
 9060|  4.29k|#line 9061 "MachineIndependent/glslang_tab.cpp"
 9061|  4.29k|    break;
 9062|       |
 9063|  5.72k|  case 302: /* type_specifier_nonarray: FUE8M0VEC2  */
  ------------------
  |  Branch (9063:3): [True: 5.72k, False: 314M]
  ------------------
 9064|  5.72k|#line 2226 "MachineIndependent/glslang.y"
 9065|  5.72k|                 {
 9066|  5.72k|        parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9067|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9068|  5.72k|        (yyval.interm.type).basicType = EbtFloatUE8M0;
 9069|  5.72k|        (yyval.interm.type).setVector(2);
 9070|  5.72k|    }
 9071|  5.72k|#line 9072 "MachineIndependent/glslang_tab.cpp"
 9072|  5.72k|    break;
 9073|       |
 9074|  5.72k|  case 303: /* type_specifier_nonarray: FUE8M0VEC3  */
  ------------------
  |  Branch (9074:3): [True: 5.72k, False: 314M]
  ------------------
 9075|  5.72k|#line 2232 "MachineIndependent/glslang.y"
 9076|  5.72k|                 {
 9077|  5.72k|        parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9078|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9079|  5.72k|        (yyval.interm.type).basicType = EbtFloatUE8M0;
 9080|  5.72k|        (yyval.interm.type).setVector(3);
 9081|  5.72k|    }
 9082|  5.72k|#line 9083 "MachineIndependent/glslang_tab.cpp"
 9083|  5.72k|    break;
 9084|       |
 9085|  5.72k|  case 304: /* type_specifier_nonarray: FUE8M0VEC4  */
  ------------------
  |  Branch (9085:3): [True: 5.72k, False: 314M]
  ------------------
 9086|  5.72k|#line 2238 "MachineIndependent/glslang.y"
 9087|  5.72k|                 {
 9088|  5.72k|        parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9089|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9090|  5.72k|        (yyval.interm.type).basicType = EbtFloatUE8M0;
 9091|  5.72k|        (yyval.interm.type).setVector(4);
 9092|  5.72k|    }
 9093|  5.72k|#line 9094 "MachineIndependent/glslang_tab.cpp"
 9094|  5.72k|    break;
 9095|       |
 9096|  5.72k|  case 305: /* type_specifier_nonarray: FMXINT8VEC2  */
  ------------------
  |  Branch (9096:3): [True: 5.72k, False: 314M]
  ------------------
 9097|  5.72k|#line 2244 "MachineIndependent/glslang.y"
 9098|  5.72k|                  {
 9099|  5.72k|        parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9100|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9101|  5.72k|        (yyval.interm.type).basicType = EbtFloatMXINT8;
 9102|  5.72k|        (yyval.interm.type).setVector(2);
 9103|  5.72k|    }
 9104|  5.72k|#line 9105 "MachineIndependent/glslang_tab.cpp"
 9105|  5.72k|    break;
 9106|       |
 9107|  5.72k|  case 306: /* type_specifier_nonarray: FMXINT8VEC3  */
  ------------------
  |  Branch (9107:3): [True: 5.72k, False: 314M]
  ------------------
 9108|  5.72k|#line 2250 "MachineIndependent/glslang.y"
 9109|  5.72k|                  {
 9110|  5.72k|        parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9111|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9112|  5.72k|        (yyval.interm.type).basicType = EbtFloatMXINT8;
 9113|  5.72k|        (yyval.interm.type).setVector(3);
 9114|  5.72k|    }
 9115|  5.72k|#line 9116 "MachineIndependent/glslang_tab.cpp"
 9116|  5.72k|    break;
 9117|       |
 9118|  5.72k|  case 307: /* type_specifier_nonarray: FMXINT8VEC4  */
  ------------------
  |  Branch (9118:3): [True: 5.72k, False: 314M]
  ------------------
 9119|  5.72k|#line 2256 "MachineIndependent/glslang.y"
 9120|  5.72k|                  {
 9121|  5.72k|        parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9122|  5.72k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.72k|#define parseContext (*pParseContext)
  ------------------
 9123|  5.72k|        (yyval.interm.type).basicType = EbtFloatMXINT8;
 9124|  5.72k|        (yyval.interm.type).setVector(4);
 9125|  5.72k|    }
 9126|  5.72k|#line 9127 "MachineIndependent/glslang_tab.cpp"
 9127|  5.72k|    break;
 9128|       |
 9129|   684k|  case 308: /* type_specifier_nonarray: F16VEC2  */
  ------------------
  |  Branch (9129:3): [True: 684k, False: 313M]
  ------------------
 9130|   684k|#line 2262 "MachineIndependent/glslang.y"
 9131|   684k|              {
 9132|   684k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   684k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   684k|#define parseContext (*pParseContext)
  ------------------
 9133|   684k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   684k|#define parseContext (*pParseContext)
  ------------------
 9134|   684k|        (yyval.interm.type).basicType = EbtFloat16;
 9135|   684k|        (yyval.interm.type).setVector(2);
 9136|   684k|    }
 9137|   684k|#line 9138 "MachineIndependent/glslang_tab.cpp"
 9138|   684k|    break;
 9139|       |
 9140|   553k|  case 309: /* type_specifier_nonarray: F16VEC3  */
  ------------------
  |  Branch (9140:3): [True: 553k, False: 314M]
  ------------------
 9141|   553k|#line 2268 "MachineIndependent/glslang.y"
 9142|   553k|              {
 9143|   553k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   553k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   553k|#define parseContext (*pParseContext)
  ------------------
 9144|   553k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   553k|#define parseContext (*pParseContext)
  ------------------
 9145|   553k|        (yyval.interm.type).basicType = EbtFloat16;
 9146|   553k|        (yyval.interm.type).setVector(3);
 9147|   553k|    }
 9148|   553k|#line 9149 "MachineIndependent/glslang_tab.cpp"
 9149|   553k|    break;
 9150|       |
 9151|   999k|  case 310: /* type_specifier_nonarray: F16VEC4  */
  ------------------
  |  Branch (9151:3): [True: 999k, False: 313M]
  ------------------
 9152|   999k|#line 2274 "MachineIndependent/glslang.y"
 9153|   999k|              {
 9154|   999k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   999k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   999k|#define parseContext (*pParseContext)
  ------------------
 9155|   999k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   999k|#define parseContext (*pParseContext)
  ------------------
 9156|   999k|        (yyval.interm.type).basicType = EbtFloat16;
 9157|   999k|        (yyval.interm.type).setVector(4);
 9158|   999k|    }
 9159|   999k|#line 9160 "MachineIndependent/glslang_tab.cpp"
 9160|   999k|    break;
 9161|       |
 9162|  1.77k|  case 311: /* type_specifier_nonarray: F32VEC2  */
  ------------------
  |  Branch (9162:3): [True: 1.77k, False: 314M]
  ------------------
 9163|  1.77k|#line 2280 "MachineIndependent/glslang.y"
 9164|  1.77k|              {
 9165|  1.77k|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9166|  1.77k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9167|  1.77k|        (yyval.interm.type).basicType = EbtFloat;
 9168|  1.77k|        (yyval.interm.type).setVector(2);
 9169|  1.77k|    }
 9170|  1.77k|#line 9171 "MachineIndependent/glslang_tab.cpp"
 9171|  1.77k|    break;
 9172|       |
 9173|  1.77k|  case 312: /* type_specifier_nonarray: F32VEC3  */
  ------------------
  |  Branch (9173:3): [True: 1.77k, False: 314M]
  ------------------
 9174|  1.77k|#line 2286 "MachineIndependent/glslang.y"
 9175|  1.77k|              {
 9176|  1.77k|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9177|  1.77k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9178|  1.77k|        (yyval.interm.type).basicType = EbtFloat;
 9179|  1.77k|        (yyval.interm.type).setVector(3);
 9180|  1.77k|    }
 9181|  1.77k|#line 9182 "MachineIndependent/glslang_tab.cpp"
 9182|  1.77k|    break;
 9183|       |
 9184|  1.77k|  case 313: /* type_specifier_nonarray: F32VEC4  */
  ------------------
  |  Branch (9184:3): [True: 1.77k, False: 314M]
  ------------------
 9185|  1.77k|#line 2292 "MachineIndependent/glslang.y"
 9186|  1.77k|              {
 9187|  1.77k|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9188|  1.77k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9189|  1.77k|        (yyval.interm.type).basicType = EbtFloat;
 9190|  1.77k|        (yyval.interm.type).setVector(4);
 9191|  1.77k|    }
 9192|  1.77k|#line 9193 "MachineIndependent/glslang_tab.cpp"
 9193|  1.77k|    break;
 9194|       |
 9195|   138k|  case 314: /* type_specifier_nonarray: F64VEC2  */
  ------------------
  |  Branch (9195:3): [True: 138k, False: 314M]
  ------------------
 9196|   138k|#line 2298 "MachineIndependent/glslang.y"
 9197|   138k|              {
 9198|   138k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   138k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   138k|#define parseContext (*pParseContext)
  ------------------
 9199|   138k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   138k|#define parseContext (*pParseContext)
  ------------------
 9200|   138k|        (yyval.interm.type).basicType = EbtDouble;
 9201|   138k|        (yyval.interm.type).setVector(2);
 9202|   138k|    }
 9203|   138k|#line 9204 "MachineIndependent/glslang_tab.cpp"
 9204|   138k|    break;
 9205|       |
 9206|   139k|  case 315: /* type_specifier_nonarray: F64VEC3  */
  ------------------
  |  Branch (9206:3): [True: 139k, False: 314M]
  ------------------
 9207|   139k|#line 2304 "MachineIndependent/glslang.y"
 9208|   139k|              {
 9209|   139k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   139k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   139k|#define parseContext (*pParseContext)
  ------------------
 9210|   139k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   139k|#define parseContext (*pParseContext)
  ------------------
 9211|   139k|        (yyval.interm.type).basicType = EbtDouble;
 9212|   139k|        (yyval.interm.type).setVector(3);
 9213|   139k|    }
 9214|   139k|#line 9215 "MachineIndependent/glslang_tab.cpp"
 9215|   139k|    break;
 9216|       |
 9217|   136k|  case 316: /* type_specifier_nonarray: F64VEC4  */
  ------------------
  |  Branch (9217:3): [True: 136k, False: 314M]
  ------------------
 9218|   136k|#line 2310 "MachineIndependent/glslang.y"
 9219|   136k|              {
 9220|   136k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   136k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   136k|#define parseContext (*pParseContext)
  ------------------
 9221|   136k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   136k|#define parseContext (*pParseContext)
  ------------------
 9222|   136k|        (yyval.interm.type).basicType = EbtDouble;
 9223|   136k|        (yyval.interm.type).setVector(4);
 9224|   136k|    }
 9225|   136k|#line 9226 "MachineIndependent/glslang_tab.cpp"
 9226|   136k|    break;
 9227|       |
 9228|   285k|  case 317: /* type_specifier_nonarray: I8VEC2  */
  ------------------
  |  Branch (9228:3): [True: 285k, False: 314M]
  ------------------
 9229|   285k|#line 2316 "MachineIndependent/glslang.y"
 9230|   285k|             {
 9231|   285k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   285k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   285k|#define parseContext (*pParseContext)
  ------------------
 9232|   285k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   285k|#define parseContext (*pParseContext)
  ------------------
 9233|   285k|        (yyval.interm.type).basicType = EbtInt8;
 9234|   285k|        (yyval.interm.type).setVector(2);
 9235|   285k|    }
 9236|   285k|#line 9237 "MachineIndependent/glslang_tab.cpp"
 9237|   285k|    break;
 9238|       |
 9239|   280k|  case 318: /* type_specifier_nonarray: I8VEC3  */
  ------------------
  |  Branch (9239:3): [True: 280k, False: 314M]
  ------------------
 9240|   280k|#line 2322 "MachineIndependent/glslang.y"
 9241|   280k|             {
 9242|   280k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   280k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   280k|#define parseContext (*pParseContext)
  ------------------
 9243|   280k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   280k|#define parseContext (*pParseContext)
  ------------------
 9244|   280k|        (yyval.interm.type).basicType = EbtInt8;
 9245|   280k|        (yyval.interm.type).setVector(3);
 9246|   280k|    }
 9247|   280k|#line 9248 "MachineIndependent/glslang_tab.cpp"
 9248|   280k|    break;
 9249|       |
 9250|   285k|  case 319: /* type_specifier_nonarray: I8VEC4  */
  ------------------
  |  Branch (9250:3): [True: 285k, False: 314M]
  ------------------
 9251|   285k|#line 2328 "MachineIndependent/glslang.y"
 9252|   285k|             {
 9253|   285k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   285k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   285k|#define parseContext (*pParseContext)
  ------------------
 9254|   285k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   285k|#define parseContext (*pParseContext)
  ------------------
 9255|   285k|        (yyval.interm.type).basicType = EbtInt8;
 9256|   285k|        (yyval.interm.type).setVector(4);
 9257|   285k|    }
 9258|   285k|#line 9259 "MachineIndependent/glslang_tab.cpp"
 9259|   285k|    break;
 9260|       |
 9261|   329k|  case 320: /* type_specifier_nonarray: I16VEC2  */
  ------------------
  |  Branch (9261:3): [True: 329k, False: 314M]
  ------------------
 9262|   329k|#line 2334 "MachineIndependent/glslang.y"
 9263|   329k|              {
 9264|   329k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   329k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   329k|#define parseContext (*pParseContext)
  ------------------
 9265|   329k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   329k|#define parseContext (*pParseContext)
  ------------------
 9266|   329k|        (yyval.interm.type).basicType = EbtInt16;
 9267|   329k|        (yyval.interm.type).setVector(2);
 9268|   329k|    }
 9269|   329k|#line 9270 "MachineIndependent/glslang_tab.cpp"
 9270|   329k|    break;
 9271|       |
 9272|   322k|  case 321: /* type_specifier_nonarray: I16VEC3  */
  ------------------
  |  Branch (9272:3): [True: 322k, False: 314M]
  ------------------
 9273|   322k|#line 2340 "MachineIndependent/glslang.y"
 9274|   322k|              {
 9275|   322k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   322k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   322k|#define parseContext (*pParseContext)
  ------------------
 9276|   322k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   322k|#define parseContext (*pParseContext)
  ------------------
 9277|   322k|        (yyval.interm.type).basicType = EbtInt16;
 9278|   322k|        (yyval.interm.type).setVector(3);
 9279|   322k|    }
 9280|   322k|#line 9281 "MachineIndependent/glslang_tab.cpp"
 9281|   322k|    break;
 9282|       |
 9283|   329k|  case 322: /* type_specifier_nonarray: I16VEC4  */
  ------------------
  |  Branch (9283:3): [True: 329k, False: 314M]
  ------------------
 9284|   329k|#line 2346 "MachineIndependent/glslang.y"
 9285|   329k|              {
 9286|   329k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   329k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   329k|#define parseContext (*pParseContext)
  ------------------
 9287|   329k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   329k|#define parseContext (*pParseContext)
  ------------------
 9288|   329k|        (yyval.interm.type).basicType = EbtInt16;
 9289|   329k|        (yyval.interm.type).setVector(4);
 9290|   329k|    }
 9291|   329k|#line 9292 "MachineIndependent/glslang_tab.cpp"
 9292|   329k|    break;
 9293|       |
 9294|  4.64k|  case 323: /* type_specifier_nonarray: I32VEC2  */
  ------------------
  |  Branch (9294:3): [True: 4.64k, False: 314M]
  ------------------
 9295|  4.64k|#line 2352 "MachineIndependent/glslang.y"
 9296|  4.64k|              {
 9297|  4.64k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.64k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  4.64k|#define parseContext (*pParseContext)
  ------------------
 9298|  4.64k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.64k|#define parseContext (*pParseContext)
  ------------------
 9299|  4.64k|        (yyval.interm.type).basicType = EbtInt;
 9300|  4.64k|        (yyval.interm.type).setVector(2);
 9301|  4.64k|    }
 9302|  4.64k|#line 9303 "MachineIndependent/glslang_tab.cpp"
 9303|  4.64k|    break;
 9304|       |
 9305|  1.77k|  case 324: /* type_specifier_nonarray: I32VEC3  */
  ------------------
  |  Branch (9305:3): [True: 1.77k, False: 314M]
  ------------------
 9306|  1.77k|#line 2358 "MachineIndependent/glslang.y"
 9307|  1.77k|              {
 9308|  1.77k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9309|  1.77k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9310|  1.77k|        (yyval.interm.type).basicType = EbtInt;
 9311|  1.77k|        (yyval.interm.type).setVector(3);
 9312|  1.77k|    }
 9313|  1.77k|#line 9314 "MachineIndependent/glslang_tab.cpp"
 9314|  1.77k|    break;
 9315|       |
 9316|  1.77k|  case 325: /* type_specifier_nonarray: I32VEC4  */
  ------------------
  |  Branch (9316:3): [True: 1.77k, False: 314M]
  ------------------
 9317|  1.77k|#line 2364 "MachineIndependent/glslang.y"
 9318|  1.77k|              {
 9319|  1.77k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9320|  1.77k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9321|  1.77k|        (yyval.interm.type).basicType = EbtInt;
 9322|  1.77k|        (yyval.interm.type).setVector(4);
 9323|  1.77k|    }
 9324|  1.77k|#line 9325 "MachineIndependent/glslang_tab.cpp"
 9325|  1.77k|    break;
 9326|       |
 9327|   299k|  case 326: /* type_specifier_nonarray: I64VEC2  */
  ------------------
  |  Branch (9327:3): [True: 299k, False: 314M]
  ------------------
 9328|   299k|#line 2370 "MachineIndependent/glslang.y"
 9329|   299k|              {
 9330|   299k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   299k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   299k|#define parseContext (*pParseContext)
  ------------------
 9331|   299k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   299k|#define parseContext (*pParseContext)
  ------------------
 9332|   299k|        (yyval.interm.type).basicType = EbtInt64;
 9333|   299k|        (yyval.interm.type).setVector(2);
 9334|   299k|    }
 9335|   299k|#line 9336 "MachineIndependent/glslang_tab.cpp"
 9336|   299k|    break;
 9337|       |
 9338|   298k|  case 327: /* type_specifier_nonarray: I64VEC3  */
  ------------------
  |  Branch (9338:3): [True: 298k, False: 314M]
  ------------------
 9339|   298k|#line 2376 "MachineIndependent/glslang.y"
 9340|   298k|              {
 9341|   298k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   298k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   298k|#define parseContext (*pParseContext)
  ------------------
 9342|   298k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   298k|#define parseContext (*pParseContext)
  ------------------
 9343|   298k|        (yyval.interm.type).basicType = EbtInt64;
 9344|   298k|        (yyval.interm.type).setVector(3);
 9345|   298k|    }
 9346|   298k|#line 9347 "MachineIndependent/glslang_tab.cpp"
 9347|   298k|    break;
 9348|       |
 9349|   337k|  case 328: /* type_specifier_nonarray: I64VEC4  */
  ------------------
  |  Branch (9349:3): [True: 337k, False: 314M]
  ------------------
 9350|   337k|#line 2382 "MachineIndependent/glslang.y"
 9351|   337k|              {
 9352|   337k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   337k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   337k|#define parseContext (*pParseContext)
  ------------------
 9353|   337k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   337k|#define parseContext (*pParseContext)
  ------------------
 9354|   337k|        (yyval.interm.type).basicType = EbtInt64;
 9355|   337k|        (yyval.interm.type).setVector(4);
 9356|   337k|    }
 9357|   337k|#line 9358 "MachineIndependent/glslang_tab.cpp"
 9358|   337k|    break;
 9359|       |
 9360|   275k|  case 329: /* type_specifier_nonarray: U8VEC2  */
  ------------------
  |  Branch (9360:3): [True: 275k, False: 314M]
  ------------------
 9361|   275k|#line 2388 "MachineIndependent/glslang.y"
 9362|   275k|             {
 9363|   275k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   275k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   275k|#define parseContext (*pParseContext)
  ------------------
 9364|   275k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   275k|#define parseContext (*pParseContext)
  ------------------
 9365|   275k|        (yyval.interm.type).basicType = EbtUint8;
 9366|   275k|        (yyval.interm.type).setVector(2);
 9367|   275k|    }
 9368|   275k|#line 9369 "MachineIndependent/glslang_tab.cpp"
 9369|   275k|    break;
 9370|       |
 9371|   276k|  case 330: /* type_specifier_nonarray: U8VEC3  */
  ------------------
  |  Branch (9371:3): [True: 276k, False: 314M]
  ------------------
 9372|   276k|#line 2394 "MachineIndependent/glslang.y"
 9373|   276k|             {
 9374|   276k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   276k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   276k|#define parseContext (*pParseContext)
  ------------------
 9375|   276k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   276k|#define parseContext (*pParseContext)
  ------------------
 9376|   276k|        (yyval.interm.type).basicType = EbtUint8;
 9377|   276k|        (yyval.interm.type).setVector(3);
 9378|   276k|    }
 9379|   276k|#line 9380 "MachineIndependent/glslang_tab.cpp"
 9380|   276k|    break;
 9381|       |
 9382|   275k|  case 331: /* type_specifier_nonarray: U8VEC4  */
  ------------------
  |  Branch (9382:3): [True: 275k, False: 314M]
  ------------------
 9383|   275k|#line 2400 "MachineIndependent/glslang.y"
 9384|   275k|             {
 9385|   275k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   275k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   275k|#define parseContext (*pParseContext)
  ------------------
 9386|   275k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   275k|#define parseContext (*pParseContext)
  ------------------
 9387|   275k|        (yyval.interm.type).basicType = EbtUint8;
 9388|   275k|        (yyval.interm.type).setVector(4);
 9389|   275k|    }
 9390|   275k|#line 9391 "MachineIndependent/glslang_tab.cpp"
 9391|   275k|    break;
 9392|       |
 9393|   315k|  case 332: /* type_specifier_nonarray: U16VEC2  */
  ------------------
  |  Branch (9393:3): [True: 315k, False: 314M]
  ------------------
 9394|   315k|#line 2406 "MachineIndependent/glslang.y"
 9395|   315k|              {
 9396|   315k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   315k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   315k|#define parseContext (*pParseContext)
  ------------------
 9397|   315k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   315k|#define parseContext (*pParseContext)
  ------------------
 9398|   315k|        (yyval.interm.type).basicType = EbtUint16;
 9399|   315k|        (yyval.interm.type).setVector(2);
 9400|   315k|    }
 9401|   315k|#line 9402 "MachineIndependent/glslang_tab.cpp"
 9402|   315k|    break;
 9403|       |
 9404|   313k|  case 333: /* type_specifier_nonarray: U16VEC3  */
  ------------------
  |  Branch (9404:3): [True: 313k, False: 314M]
  ------------------
 9405|   313k|#line 2412 "MachineIndependent/glslang.y"
 9406|   313k|              {
 9407|   313k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   313k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   313k|#define parseContext (*pParseContext)
  ------------------
 9408|   313k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   313k|#define parseContext (*pParseContext)
  ------------------
 9409|   313k|        (yyval.interm.type).basicType = EbtUint16;
 9410|   313k|        (yyval.interm.type).setVector(3);
 9411|   313k|    }
 9412|   313k|#line 9413 "MachineIndependent/glslang_tab.cpp"
 9413|   313k|    break;
 9414|       |
 9415|   315k|  case 334: /* type_specifier_nonarray: U16VEC4  */
  ------------------
  |  Branch (9415:3): [True: 315k, False: 314M]
  ------------------
 9416|   315k|#line 2418 "MachineIndependent/glslang.y"
 9417|   315k|              {
 9418|   315k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   315k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   315k|#define parseContext (*pParseContext)
  ------------------
 9419|   315k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   315k|#define parseContext (*pParseContext)
  ------------------
 9420|   315k|        (yyval.interm.type).basicType = EbtUint16;
 9421|   315k|        (yyval.interm.type).setVector(4);
 9422|   315k|    }
 9423|   315k|#line 9424 "MachineIndependent/glslang_tab.cpp"
 9424|   315k|    break;
 9425|       |
 9426|  7.50k|  case 335: /* type_specifier_nonarray: U32VEC2  */
  ------------------
  |  Branch (9426:3): [True: 7.50k, False: 314M]
  ------------------
 9427|  7.50k|#line 2424 "MachineIndependent/glslang.y"
 9428|  7.50k|              {
 9429|  7.50k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 9430|  7.50k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 9431|  7.50k|        (yyval.interm.type).basicType = EbtUint;
 9432|  7.50k|        (yyval.interm.type).setVector(2);
 9433|  7.50k|    }
 9434|  7.50k|#line 9435 "MachineIndependent/glslang_tab.cpp"
 9435|  7.50k|    break;
 9436|       |
 9437|  7.50k|  case 336: /* type_specifier_nonarray: U32VEC3  */
  ------------------
  |  Branch (9437:3): [True: 7.50k, False: 314M]
  ------------------
 9438|  7.50k|#line 2430 "MachineIndependent/glslang.y"
 9439|  7.50k|              {
 9440|  7.50k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 9441|  7.50k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.50k|#define parseContext (*pParseContext)
  ------------------
 9442|  7.50k|        (yyval.interm.type).basicType = EbtUint;
 9443|  7.50k|        (yyval.interm.type).setVector(3);
 9444|  7.50k|    }
 9445|  7.50k|#line 9446 "MachineIndependent/glslang_tab.cpp"
 9446|  7.50k|    break;
 9447|       |
 9448|  1.77k|  case 337: /* type_specifier_nonarray: U32VEC4  */
  ------------------
  |  Branch (9448:3): [True: 1.77k, False: 314M]
  ------------------
 9449|  1.77k|#line 2436 "MachineIndependent/glslang.y"
 9450|  1.77k|              {
 9451|  1.77k|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9452|  1.77k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.77k|#define parseContext (*pParseContext)
  ------------------
 9453|  1.77k|        (yyval.interm.type).basicType = EbtUint;
 9454|  1.77k|        (yyval.interm.type).setVector(4);
 9455|  1.77k|    }
 9456|  1.77k|#line 9457 "MachineIndependent/glslang_tab.cpp"
 9457|  1.77k|    break;
 9458|       |
 9459|   288k|  case 338: /* type_specifier_nonarray: U64VEC2  */
  ------------------
  |  Branch (9459:3): [True: 288k, False: 314M]
  ------------------
 9460|   288k|#line 2442 "MachineIndependent/glslang.y"
 9461|   288k|              {
 9462|   288k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   288k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   288k|#define parseContext (*pParseContext)
  ------------------
 9463|   288k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   288k|#define parseContext (*pParseContext)
  ------------------
 9464|   288k|        (yyval.interm.type).basicType = EbtUint64;
 9465|   288k|        (yyval.interm.type).setVector(2);
 9466|   288k|    }
 9467|   288k|#line 9468 "MachineIndependent/glslang_tab.cpp"
 9468|   288k|    break;
 9469|       |
 9470|   286k|  case 339: /* type_specifier_nonarray: U64VEC3  */
  ------------------
  |  Branch (9470:3): [True: 286k, False: 314M]
  ------------------
 9471|   286k|#line 2448 "MachineIndependent/glslang.y"
 9472|   286k|              {
 9473|   286k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   286k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   286k|#define parseContext (*pParseContext)
  ------------------
 9474|   286k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   286k|#define parseContext (*pParseContext)
  ------------------
 9475|   286k|        (yyval.interm.type).basicType = EbtUint64;
 9476|   286k|        (yyval.interm.type).setVector(3);
 9477|   286k|    }
 9478|   286k|#line 9479 "MachineIndependent/glslang_tab.cpp"
 9479|   286k|    break;
 9480|       |
 9481|   326k|  case 340: /* type_specifier_nonarray: U64VEC4  */
  ------------------
  |  Branch (9481:3): [True: 326k, False: 314M]
  ------------------
 9482|   326k|#line 2454 "MachineIndependent/glslang.y"
 9483|   326k|              {
 9484|   326k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   326k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   326k|#define parseContext (*pParseContext)
  ------------------
 9485|   326k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   326k|#define parseContext (*pParseContext)
  ------------------
 9486|   326k|        (yyval.interm.type).basicType = EbtUint64;
 9487|   326k|        (yyval.interm.type).setVector(4);
 9488|   326k|    }
 9489|   326k|#line 9490 "MachineIndependent/glslang_tab.cpp"
 9490|   326k|    break;
 9491|       |
 9492|  4.06k|  case 341: /* type_specifier_nonarray: DMAT2  */
  ------------------
  |  Branch (9492:3): [True: 4.06k, False: 314M]
  ------------------
 9493|  4.06k|#line 2460 "MachineIndependent/glslang.y"
 9494|  4.06k|            {
 9495|  4.06k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
 9496|  4.06k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9496:13): [True: 0, False: 4.06k]
  ------------------
 9497|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9498|  4.06k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
 9499|  4.06k|        (yyval.interm.type).basicType = EbtDouble;
 9500|  4.06k|        (yyval.interm.type).setMatrix(2, 2);
 9501|  4.06k|    }
 9502|  4.06k|#line 9503 "MachineIndependent/glslang_tab.cpp"
 9503|  4.06k|    break;
 9504|       |
 9505|  4.06k|  case 342: /* type_specifier_nonarray: DMAT3  */
  ------------------
  |  Branch (9505:3): [True: 4.06k, False: 314M]
  ------------------
 9506|  4.06k|#line 2468 "MachineIndependent/glslang.y"
 9507|  4.06k|            {
 9508|  4.06k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
 9509|  4.06k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9509:13): [True: 0, False: 4.06k]
  ------------------
 9510|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9511|  4.06k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
 9512|  4.06k|        (yyval.interm.type).basicType = EbtDouble;
 9513|  4.06k|        (yyval.interm.type).setMatrix(3, 3);
 9514|  4.06k|    }
 9515|  4.06k|#line 9516 "MachineIndependent/glslang_tab.cpp"
 9516|  4.06k|    break;
 9517|       |
 9518|  4.06k|  case 343: /* type_specifier_nonarray: DMAT4  */
  ------------------
  |  Branch (9518:3): [True: 4.06k, False: 314M]
  ------------------
 9519|  4.06k|#line 2476 "MachineIndependent/glslang.y"
 9520|  4.06k|            {
 9521|  4.06k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
 9522|  4.06k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9522:13): [True: 0, False: 4.06k]
  ------------------
 9523|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9524|  4.06k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.06k|#define parseContext (*pParseContext)
  ------------------
 9525|  4.06k|        (yyval.interm.type).basicType = EbtDouble;
 9526|  4.06k|        (yyval.interm.type).setMatrix(4, 4);
 9527|  4.06k|    }
 9528|  4.06k|#line 9529 "MachineIndependent/glslang_tab.cpp"
 9529|  4.06k|    break;
 9530|       |
 9531|      0|  case 344: /* type_specifier_nonarray: DMAT2X2  */
  ------------------
  |  Branch (9531:3): [True: 0, False: 314M]
  ------------------
 9532|      0|#line 2484 "MachineIndependent/glslang.y"
 9533|      0|              {
 9534|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9535|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9535:13): [True: 0, False: 0]
  ------------------
 9536|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9537|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9538|      0|        (yyval.interm.type).basicType = EbtDouble;
 9539|      0|        (yyval.interm.type).setMatrix(2, 2);
 9540|      0|    }
 9541|      0|#line 9542 "MachineIndependent/glslang_tab.cpp"
 9542|      0|    break;
 9543|       |
 9544|  2.71k|  case 345: /* type_specifier_nonarray: DMAT2X3  */
  ------------------
  |  Branch (9544:3): [True: 2.71k, False: 314M]
  ------------------
 9545|  2.71k|#line 2492 "MachineIndependent/glslang.y"
 9546|  2.71k|              {
 9547|  2.71k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9548|  2.71k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9548:13): [True: 0, False: 2.71k]
  ------------------
 9549|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9550|  2.71k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9551|  2.71k|        (yyval.interm.type).basicType = EbtDouble;
 9552|  2.71k|        (yyval.interm.type).setMatrix(2, 3);
 9553|  2.71k|    }
 9554|  2.71k|#line 9555 "MachineIndependent/glslang_tab.cpp"
 9555|  2.71k|    break;
 9556|       |
 9557|  2.71k|  case 346: /* type_specifier_nonarray: DMAT2X4  */
  ------------------
  |  Branch (9557:3): [True: 2.71k, False: 314M]
  ------------------
 9558|  2.71k|#line 2500 "MachineIndependent/glslang.y"
 9559|  2.71k|              {
 9560|  2.71k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9561|  2.71k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9561:13): [True: 0, False: 2.71k]
  ------------------
 9562|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9563|  2.71k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9564|  2.71k|        (yyval.interm.type).basicType = EbtDouble;
 9565|  2.71k|        (yyval.interm.type).setMatrix(2, 4);
 9566|  2.71k|    }
 9567|  2.71k|#line 9568 "MachineIndependent/glslang_tab.cpp"
 9568|  2.71k|    break;
 9569|       |
 9570|  2.71k|  case 347: /* type_specifier_nonarray: DMAT3X2  */
  ------------------
  |  Branch (9570:3): [True: 2.71k, False: 314M]
  ------------------
 9571|  2.71k|#line 2508 "MachineIndependent/glslang.y"
 9572|  2.71k|              {
 9573|  2.71k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9574|  2.71k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9574:13): [True: 0, False: 2.71k]
  ------------------
 9575|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9576|  2.71k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9577|  2.71k|        (yyval.interm.type).basicType = EbtDouble;
 9578|  2.71k|        (yyval.interm.type).setMatrix(3, 2);
 9579|  2.71k|    }
 9580|  2.71k|#line 9581 "MachineIndependent/glslang_tab.cpp"
 9581|  2.71k|    break;
 9582|       |
 9583|      0|  case 348: /* type_specifier_nonarray: DMAT3X3  */
  ------------------
  |  Branch (9583:3): [True: 0, False: 314M]
  ------------------
 9584|      0|#line 2516 "MachineIndependent/glslang.y"
 9585|      0|              {
 9586|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9587|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9587:13): [True: 0, False: 0]
  ------------------
 9588|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9589|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9590|      0|        (yyval.interm.type).basicType = EbtDouble;
 9591|      0|        (yyval.interm.type).setMatrix(3, 3);
 9592|      0|    }
 9593|      0|#line 9594 "MachineIndependent/glslang_tab.cpp"
 9594|      0|    break;
 9595|       |
 9596|  2.71k|  case 349: /* type_specifier_nonarray: DMAT3X4  */
  ------------------
  |  Branch (9596:3): [True: 2.71k, False: 314M]
  ------------------
 9597|  2.71k|#line 2524 "MachineIndependent/glslang.y"
 9598|  2.71k|              {
 9599|  2.71k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9600|  2.71k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9600:13): [True: 0, False: 2.71k]
  ------------------
 9601|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9602|  2.71k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9603|  2.71k|        (yyval.interm.type).basicType = EbtDouble;
 9604|  2.71k|        (yyval.interm.type).setMatrix(3, 4);
 9605|  2.71k|    }
 9606|  2.71k|#line 9607 "MachineIndependent/glslang_tab.cpp"
 9607|  2.71k|    break;
 9608|       |
 9609|  2.71k|  case 350: /* type_specifier_nonarray: DMAT4X2  */
  ------------------
  |  Branch (9609:3): [True: 2.71k, False: 314M]
  ------------------
 9610|  2.71k|#line 2532 "MachineIndependent/glslang.y"
 9611|  2.71k|              {
 9612|  2.71k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9613|  2.71k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9613:13): [True: 0, False: 2.71k]
  ------------------
 9614|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9615|  2.71k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9616|  2.71k|        (yyval.interm.type).basicType = EbtDouble;
 9617|  2.71k|        (yyval.interm.type).setMatrix(4, 2);
 9618|  2.71k|    }
 9619|  2.71k|#line 9620 "MachineIndependent/glslang_tab.cpp"
 9620|  2.71k|    break;
 9621|       |
 9622|  2.71k|  case 351: /* type_specifier_nonarray: DMAT4X3  */
  ------------------
  |  Branch (9622:3): [True: 2.71k, False: 314M]
  ------------------
 9623|  2.71k|#line 2540 "MachineIndependent/glslang.y"
 9624|  2.71k|              {
 9625|  2.71k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9626|  2.71k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9626:13): [True: 0, False: 2.71k]
  ------------------
 9627|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9628|  2.71k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.71k|#define parseContext (*pParseContext)
  ------------------
 9629|  2.71k|        (yyval.interm.type).basicType = EbtDouble;
 9630|  2.71k|        (yyval.interm.type).setMatrix(4, 3);
 9631|  2.71k|    }
 9632|  2.71k|#line 9633 "MachineIndependent/glslang_tab.cpp"
 9633|  2.71k|    break;
 9634|       |
 9635|      0|  case 352: /* type_specifier_nonarray: DMAT4X4  */
  ------------------
  |  Branch (9635:3): [True: 0, False: 314M]
  ------------------
 9636|      0|#line 2548 "MachineIndependent/glslang.y"
 9637|      0|              {
 9638|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9639|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (9639:13): [True: 0, False: 0]
  ------------------
 9640|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9641|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9642|      0|        (yyval.interm.type).basicType = EbtDouble;
 9643|      0|        (yyval.interm.type).setMatrix(4, 4);
 9644|      0|    }
 9645|      0|#line 9646 "MachineIndependent/glslang_tab.cpp"
 9646|      0|    break;
 9647|       |
 9648|  12.8k|  case 353: /* type_specifier_nonarray: F16MAT2  */
  ------------------
  |  Branch (9648:3): [True: 12.8k, False: 314M]
  ------------------
 9649|  12.8k|#line 2556 "MachineIndependent/glslang.y"
 9650|  12.8k|              {
 9651|  12.8k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
 9652|  12.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
 9653|  12.8k|        (yyval.interm.type).basicType = EbtFloat16;
 9654|  12.8k|        (yyval.interm.type).setMatrix(2, 2);
 9655|  12.8k|    }
 9656|  12.8k|#line 9657 "MachineIndependent/glslang_tab.cpp"
 9657|  12.8k|    break;
 9658|       |
 9659|  12.8k|  case 354: /* type_specifier_nonarray: F16MAT3  */
  ------------------
  |  Branch (9659:3): [True: 12.8k, False: 314M]
  ------------------
 9660|  12.8k|#line 2562 "MachineIndependent/glslang.y"
 9661|  12.8k|              {
 9662|  12.8k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
 9663|  12.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
 9664|  12.8k|        (yyval.interm.type).basicType = EbtFloat16;
 9665|  12.8k|        (yyval.interm.type).setMatrix(3, 3);
 9666|  12.8k|    }
 9667|  12.8k|#line 9668 "MachineIndependent/glslang_tab.cpp"
 9668|  12.8k|    break;
 9669|       |
 9670|  12.8k|  case 355: /* type_specifier_nonarray: F16MAT4  */
  ------------------
  |  Branch (9670:3): [True: 12.8k, False: 314M]
  ------------------
 9671|  12.8k|#line 2568 "MachineIndependent/glslang.y"
 9672|  12.8k|              {
 9673|  12.8k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
 9674|  12.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  12.8k|#define parseContext (*pParseContext)
  ------------------
 9675|  12.8k|        (yyval.interm.type).basicType = EbtFloat16;
 9676|  12.8k|        (yyval.interm.type).setMatrix(4, 4);
 9677|  12.8k|    }
 9678|  12.8k|#line 9679 "MachineIndependent/glslang_tab.cpp"
 9679|  12.8k|    break;
 9680|       |
 9681|      0|  case 356: /* type_specifier_nonarray: F16MAT2X2  */
  ------------------
  |  Branch (9681:3): [True: 0, False: 314M]
  ------------------
 9682|      0|#line 2574 "MachineIndependent/glslang.y"
 9683|      0|                {
 9684|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9685|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9686|      0|        (yyval.interm.type).basicType = EbtFloat16;
 9687|      0|        (yyval.interm.type).setMatrix(2, 2);
 9688|      0|    }
 9689|      0|#line 9690 "MachineIndependent/glslang_tab.cpp"
 9690|      0|    break;
 9691|       |
 9692|  8.59k|  case 357: /* type_specifier_nonarray: F16MAT2X3  */
  ------------------
  |  Branch (9692:3): [True: 8.59k, False: 314M]
  ------------------
 9693|  8.59k|#line 2580 "MachineIndependent/glslang.y"
 9694|  8.59k|                {
 9695|  8.59k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9696|  8.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9697|  8.59k|        (yyval.interm.type).basicType = EbtFloat16;
 9698|  8.59k|        (yyval.interm.type).setMatrix(2, 3);
 9699|  8.59k|    }
 9700|  8.59k|#line 9701 "MachineIndependent/glslang_tab.cpp"
 9701|  8.59k|    break;
 9702|       |
 9703|  8.59k|  case 358: /* type_specifier_nonarray: F16MAT2X4  */
  ------------------
  |  Branch (9703:3): [True: 8.59k, False: 314M]
  ------------------
 9704|  8.59k|#line 2586 "MachineIndependent/glslang.y"
 9705|  8.59k|                {
 9706|  8.59k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9707|  8.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9708|  8.59k|        (yyval.interm.type).basicType = EbtFloat16;
 9709|  8.59k|        (yyval.interm.type).setMatrix(2, 4);
 9710|  8.59k|    }
 9711|  8.59k|#line 9712 "MachineIndependent/glslang_tab.cpp"
 9712|  8.59k|    break;
 9713|       |
 9714|  8.59k|  case 359: /* type_specifier_nonarray: F16MAT3X2  */
  ------------------
  |  Branch (9714:3): [True: 8.59k, False: 314M]
  ------------------
 9715|  8.59k|#line 2592 "MachineIndependent/glslang.y"
 9716|  8.59k|                {
 9717|  8.59k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9718|  8.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9719|  8.59k|        (yyval.interm.type).basicType = EbtFloat16;
 9720|  8.59k|        (yyval.interm.type).setMatrix(3, 2);
 9721|  8.59k|    }
 9722|  8.59k|#line 9723 "MachineIndependent/glslang_tab.cpp"
 9723|  8.59k|    break;
 9724|       |
 9725|      0|  case 360: /* type_specifier_nonarray: F16MAT3X3  */
  ------------------
  |  Branch (9725:3): [True: 0, False: 314M]
  ------------------
 9726|      0|#line 2598 "MachineIndependent/glslang.y"
 9727|      0|                {
 9728|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9729|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9730|      0|        (yyval.interm.type).basicType = EbtFloat16;
 9731|      0|        (yyval.interm.type).setMatrix(3, 3);
 9732|      0|    }
 9733|      0|#line 9734 "MachineIndependent/glslang_tab.cpp"
 9734|      0|    break;
 9735|       |
 9736|  8.59k|  case 361: /* type_specifier_nonarray: F16MAT3X4  */
  ------------------
  |  Branch (9736:3): [True: 8.59k, False: 314M]
  ------------------
 9737|  8.59k|#line 2604 "MachineIndependent/glslang.y"
 9738|  8.59k|                {
 9739|  8.59k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9740|  8.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9741|  8.59k|        (yyval.interm.type).basicType = EbtFloat16;
 9742|  8.59k|        (yyval.interm.type).setMatrix(3, 4);
 9743|  8.59k|    }
 9744|  8.59k|#line 9745 "MachineIndependent/glslang_tab.cpp"
 9745|  8.59k|    break;
 9746|       |
 9747|  8.59k|  case 362: /* type_specifier_nonarray: F16MAT4X2  */
  ------------------
  |  Branch (9747:3): [True: 8.59k, False: 314M]
  ------------------
 9748|  8.59k|#line 2610 "MachineIndependent/glslang.y"
 9749|  8.59k|                {
 9750|  8.59k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9751|  8.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9752|  8.59k|        (yyval.interm.type).basicType = EbtFloat16;
 9753|  8.59k|        (yyval.interm.type).setMatrix(4, 2);
 9754|  8.59k|    }
 9755|  8.59k|#line 9756 "MachineIndependent/glslang_tab.cpp"
 9756|  8.59k|    break;
 9757|       |
 9758|  8.59k|  case 363: /* type_specifier_nonarray: F16MAT4X3  */
  ------------------
  |  Branch (9758:3): [True: 8.59k, False: 314M]
  ------------------
 9759|  8.59k|#line 2616 "MachineIndependent/glslang.y"
 9760|  8.59k|                {
 9761|  8.59k|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9762|  8.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.59k|#define parseContext (*pParseContext)
  ------------------
 9763|  8.59k|        (yyval.interm.type).basicType = EbtFloat16;
 9764|  8.59k|        (yyval.interm.type).setMatrix(4, 3);
 9765|  8.59k|    }
 9766|  8.59k|#line 9767 "MachineIndependent/glslang_tab.cpp"
 9767|  8.59k|    break;
 9768|       |
 9769|      0|  case 364: /* type_specifier_nonarray: F16MAT4X4  */
  ------------------
  |  Branch (9769:3): [True: 0, False: 314M]
  ------------------
 9770|      0|#line 2622 "MachineIndependent/glslang.y"
 9771|      0|                {
 9772|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9773|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9774|      0|        (yyval.interm.type).basicType = EbtFloat16;
 9775|      0|        (yyval.interm.type).setMatrix(4, 4);
 9776|      0|    }
 9777|      0|#line 9778 "MachineIndependent/glslang_tab.cpp"
 9778|      0|    break;
 9779|       |
 9780|      0|  case 365: /* type_specifier_nonarray: F32MAT2  */
  ------------------
  |  Branch (9780:3): [True: 0, False: 314M]
  ------------------
 9781|      0|#line 2628 "MachineIndependent/glslang.y"
 9782|      0|              {
 9783|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9784|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9785|      0|        (yyval.interm.type).basicType = EbtFloat;
 9786|      0|        (yyval.interm.type).setMatrix(2, 2);
 9787|      0|    }
 9788|      0|#line 9789 "MachineIndependent/glslang_tab.cpp"
 9789|      0|    break;
 9790|       |
 9791|      0|  case 366: /* type_specifier_nonarray: F32MAT3  */
  ------------------
  |  Branch (9791:3): [True: 0, False: 314M]
  ------------------
 9792|      0|#line 2634 "MachineIndependent/glslang.y"
 9793|      0|              {
 9794|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9795|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9796|      0|        (yyval.interm.type).basicType = EbtFloat;
 9797|      0|        (yyval.interm.type).setMatrix(3, 3);
 9798|      0|    }
 9799|      0|#line 9800 "MachineIndependent/glslang_tab.cpp"
 9800|      0|    break;
 9801|       |
 9802|      0|  case 367: /* type_specifier_nonarray: F32MAT4  */
  ------------------
  |  Branch (9802:3): [True: 0, False: 314M]
  ------------------
 9803|      0|#line 2640 "MachineIndependent/glslang.y"
 9804|      0|              {
 9805|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9806|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9807|      0|        (yyval.interm.type).basicType = EbtFloat;
 9808|      0|        (yyval.interm.type).setMatrix(4, 4);
 9809|      0|    }
 9810|      0|#line 9811 "MachineIndependent/glslang_tab.cpp"
 9811|      0|    break;
 9812|       |
 9813|      0|  case 368: /* type_specifier_nonarray: F32MAT2X2  */
  ------------------
  |  Branch (9813:3): [True: 0, False: 314M]
  ------------------
 9814|      0|#line 2646 "MachineIndependent/glslang.y"
 9815|      0|                {
 9816|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9817|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9818|      0|        (yyval.interm.type).basicType = EbtFloat;
 9819|      0|        (yyval.interm.type).setMatrix(2, 2);
 9820|      0|    }
 9821|      0|#line 9822 "MachineIndependent/glslang_tab.cpp"
 9822|      0|    break;
 9823|       |
 9824|      0|  case 369: /* type_specifier_nonarray: F32MAT2X3  */
  ------------------
  |  Branch (9824:3): [True: 0, False: 314M]
  ------------------
 9825|      0|#line 2652 "MachineIndependent/glslang.y"
 9826|      0|                {
 9827|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9828|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9829|      0|        (yyval.interm.type).basicType = EbtFloat;
 9830|      0|        (yyval.interm.type).setMatrix(2, 3);
 9831|      0|    }
 9832|      0|#line 9833 "MachineIndependent/glslang_tab.cpp"
 9833|      0|    break;
 9834|       |
 9835|      0|  case 370: /* type_specifier_nonarray: F32MAT2X4  */
  ------------------
  |  Branch (9835:3): [True: 0, False: 314M]
  ------------------
 9836|      0|#line 2658 "MachineIndependent/glslang.y"
 9837|      0|                {
 9838|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9839|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9840|      0|        (yyval.interm.type).basicType = EbtFloat;
 9841|      0|        (yyval.interm.type).setMatrix(2, 4);
 9842|      0|    }
 9843|      0|#line 9844 "MachineIndependent/glslang_tab.cpp"
 9844|      0|    break;
 9845|       |
 9846|      0|  case 371: /* type_specifier_nonarray: F32MAT3X2  */
  ------------------
  |  Branch (9846:3): [True: 0, False: 314M]
  ------------------
 9847|      0|#line 2664 "MachineIndependent/glslang.y"
 9848|      0|                {
 9849|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9850|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9851|      0|        (yyval.interm.type).basicType = EbtFloat;
 9852|      0|        (yyval.interm.type).setMatrix(3, 2);
 9853|      0|    }
 9854|      0|#line 9855 "MachineIndependent/glslang_tab.cpp"
 9855|      0|    break;
 9856|       |
 9857|      0|  case 372: /* type_specifier_nonarray: F32MAT3X3  */
  ------------------
  |  Branch (9857:3): [True: 0, False: 314M]
  ------------------
 9858|      0|#line 2670 "MachineIndependent/glslang.y"
 9859|      0|                {
 9860|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9861|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9862|      0|        (yyval.interm.type).basicType = EbtFloat;
 9863|      0|        (yyval.interm.type).setMatrix(3, 3);
 9864|      0|    }
 9865|      0|#line 9866 "MachineIndependent/glslang_tab.cpp"
 9866|      0|    break;
 9867|       |
 9868|      0|  case 373: /* type_specifier_nonarray: F32MAT3X4  */
  ------------------
  |  Branch (9868:3): [True: 0, False: 314M]
  ------------------
 9869|      0|#line 2676 "MachineIndependent/glslang.y"
 9870|      0|                {
 9871|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9872|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9873|      0|        (yyval.interm.type).basicType = EbtFloat;
 9874|      0|        (yyval.interm.type).setMatrix(3, 4);
 9875|      0|    }
 9876|      0|#line 9877 "MachineIndependent/glslang_tab.cpp"
 9877|      0|    break;
 9878|       |
 9879|      0|  case 374: /* type_specifier_nonarray: F32MAT4X2  */
  ------------------
  |  Branch (9879:3): [True: 0, False: 314M]
  ------------------
 9880|      0|#line 2682 "MachineIndependent/glslang.y"
 9881|      0|                {
 9882|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9883|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9884|      0|        (yyval.interm.type).basicType = EbtFloat;
 9885|      0|        (yyval.interm.type).setMatrix(4, 2);
 9886|      0|    }
 9887|      0|#line 9888 "MachineIndependent/glslang_tab.cpp"
 9888|      0|    break;
 9889|       |
 9890|      0|  case 375: /* type_specifier_nonarray: F32MAT4X3  */
  ------------------
  |  Branch (9890:3): [True: 0, False: 314M]
  ------------------
 9891|      0|#line 2688 "MachineIndependent/glslang.y"
 9892|      0|                {
 9893|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9894|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9895|      0|        (yyval.interm.type).basicType = EbtFloat;
 9896|      0|        (yyval.interm.type).setMatrix(4, 3);
 9897|      0|    }
 9898|      0|#line 9899 "MachineIndependent/glslang_tab.cpp"
 9899|      0|    break;
 9900|       |
 9901|      0|  case 376: /* type_specifier_nonarray: F32MAT4X4  */
  ------------------
  |  Branch (9901:3): [True: 0, False: 314M]
  ------------------
 9902|      0|#line 2694 "MachineIndependent/glslang.y"
 9903|      0|                {
 9904|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9905|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9906|      0|        (yyval.interm.type).basicType = EbtFloat;
 9907|      0|        (yyval.interm.type).setMatrix(4, 4);
 9908|      0|    }
 9909|      0|#line 9910 "MachineIndependent/glslang_tab.cpp"
 9910|      0|    break;
 9911|       |
 9912|  8.89k|  case 377: /* type_specifier_nonarray: F64MAT2  */
  ------------------
  |  Branch (9912:3): [True: 8.89k, False: 314M]
  ------------------
 9913|  8.89k|#line 2700 "MachineIndependent/glslang.y"
 9914|  8.89k|              {
 9915|  8.89k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
 9916|  8.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
 9917|  8.89k|        (yyval.interm.type).basicType = EbtDouble;
 9918|  8.89k|        (yyval.interm.type).setMatrix(2, 2);
 9919|  8.89k|    }
 9920|  8.89k|#line 9921 "MachineIndependent/glslang_tab.cpp"
 9921|  8.89k|    break;
 9922|       |
 9923|  8.89k|  case 378: /* type_specifier_nonarray: F64MAT3  */
  ------------------
  |  Branch (9923:3): [True: 8.89k, False: 314M]
  ------------------
 9924|  8.89k|#line 2706 "MachineIndependent/glslang.y"
 9925|  8.89k|              {
 9926|  8.89k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
 9927|  8.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
 9928|  8.89k|        (yyval.interm.type).basicType = EbtDouble;
 9929|  8.89k|        (yyval.interm.type).setMatrix(3, 3);
 9930|  8.89k|    }
 9931|  8.89k|#line 9932 "MachineIndependent/glslang_tab.cpp"
 9932|  8.89k|    break;
 9933|       |
 9934|  8.89k|  case 379: /* type_specifier_nonarray: F64MAT4  */
  ------------------
  |  Branch (9934:3): [True: 8.89k, False: 314M]
  ------------------
 9935|  8.89k|#line 2712 "MachineIndependent/glslang.y"
 9936|  8.89k|              {
 9937|  8.89k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
 9938|  8.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  8.89k|#define parseContext (*pParseContext)
  ------------------
 9939|  8.89k|        (yyval.interm.type).basicType = EbtDouble;
 9940|  8.89k|        (yyval.interm.type).setMatrix(4, 4);
 9941|  8.89k|    }
 9942|  8.89k|#line 9943 "MachineIndependent/glslang_tab.cpp"
 9943|  8.89k|    break;
 9944|       |
 9945|      0|  case 380: /* type_specifier_nonarray: F64MAT2X2  */
  ------------------
  |  Branch (9945:3): [True: 0, False: 314M]
  ------------------
 9946|      0|#line 2718 "MachineIndependent/glslang.y"
 9947|      0|                {
 9948|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9949|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9950|      0|        (yyval.interm.type).basicType = EbtDouble;
 9951|      0|        (yyval.interm.type).setMatrix(2, 2);
 9952|      0|    }
 9953|      0|#line 9954 "MachineIndependent/glslang_tab.cpp"
 9954|      0|    break;
 9955|       |
 9956|  5.92k|  case 381: /* type_specifier_nonarray: F64MAT2X3  */
  ------------------
  |  Branch (9956:3): [True: 5.92k, False: 314M]
  ------------------
 9957|  5.92k|#line 2724 "MachineIndependent/glslang.y"
 9958|  5.92k|                {
 9959|  5.92k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
 9960|  5.92k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
 9961|  5.92k|        (yyval.interm.type).basicType = EbtDouble;
 9962|  5.92k|        (yyval.interm.type).setMatrix(2, 3);
 9963|  5.92k|    }
 9964|  5.92k|#line 9965 "MachineIndependent/glslang_tab.cpp"
 9965|  5.92k|    break;
 9966|       |
 9967|  5.92k|  case 382: /* type_specifier_nonarray: F64MAT2X4  */
  ------------------
  |  Branch (9967:3): [True: 5.92k, False: 314M]
  ------------------
 9968|  5.92k|#line 2730 "MachineIndependent/glslang.y"
 9969|  5.92k|                {
 9970|  5.92k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
 9971|  5.92k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
 9972|  5.92k|        (yyval.interm.type).basicType = EbtDouble;
 9973|  5.92k|        (yyval.interm.type).setMatrix(2, 4);
 9974|  5.92k|    }
 9975|  5.92k|#line 9976 "MachineIndependent/glslang_tab.cpp"
 9976|  5.92k|    break;
 9977|       |
 9978|  5.92k|  case 383: /* type_specifier_nonarray: F64MAT3X2  */
  ------------------
  |  Branch (9978:3): [True: 5.92k, False: 314M]
  ------------------
 9979|  5.92k|#line 2736 "MachineIndependent/glslang.y"
 9980|  5.92k|                {
 9981|  5.92k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
 9982|  5.92k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
 9983|  5.92k|        (yyval.interm.type).basicType = EbtDouble;
 9984|  5.92k|        (yyval.interm.type).setMatrix(3, 2);
 9985|  5.92k|    }
 9986|  5.92k|#line 9987 "MachineIndependent/glslang_tab.cpp"
 9987|  5.92k|    break;
 9988|       |
 9989|      0|  case 384: /* type_specifier_nonarray: F64MAT3X3  */
  ------------------
  |  Branch (9989:3): [True: 0, False: 314M]
  ------------------
 9990|      0|#line 2742 "MachineIndependent/glslang.y"
 9991|      0|                {
 9992|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9993|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
 9994|      0|        (yyval.interm.type).basicType = EbtDouble;
 9995|      0|        (yyval.interm.type).setMatrix(3, 3);
 9996|      0|    }
 9997|      0|#line 9998 "MachineIndependent/glslang_tab.cpp"
 9998|      0|    break;
 9999|       |
10000|  5.92k|  case 385: /* type_specifier_nonarray: F64MAT3X4  */
  ------------------
  |  Branch (10000:3): [True: 5.92k, False: 314M]
  ------------------
10001|  5.92k|#line 2748 "MachineIndependent/glslang.y"
10002|  5.92k|                {
10003|  5.92k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
10004|  5.92k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
10005|  5.92k|        (yyval.interm.type).basicType = EbtDouble;
10006|  5.92k|        (yyval.interm.type).setMatrix(3, 4);
10007|  5.92k|    }
10008|  5.92k|#line 10009 "MachineIndependent/glslang_tab.cpp"
10009|  5.92k|    break;
10010|       |
10011|  5.92k|  case 386: /* type_specifier_nonarray: F64MAT4X2  */
  ------------------
  |  Branch (10011:3): [True: 5.92k, False: 314M]
  ------------------
10012|  5.92k|#line 2754 "MachineIndependent/glslang.y"
10013|  5.92k|                {
10014|  5.92k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
10015|  5.92k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
10016|  5.92k|        (yyval.interm.type).basicType = EbtDouble;
10017|  5.92k|        (yyval.interm.type).setMatrix(4, 2);
10018|  5.92k|    }
10019|  5.92k|#line 10020 "MachineIndependent/glslang_tab.cpp"
10020|  5.92k|    break;
10021|       |
10022|  5.92k|  case 387: /* type_specifier_nonarray: F64MAT4X3  */
  ------------------
  |  Branch (10022:3): [True: 5.92k, False: 314M]
  ------------------
10023|  5.92k|#line 2760 "MachineIndependent/glslang.y"
10024|  5.92k|                {
10025|  5.92k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
10026|  5.92k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.92k|#define parseContext (*pParseContext)
  ------------------
10027|  5.92k|        (yyval.interm.type).basicType = EbtDouble;
10028|  5.92k|        (yyval.interm.type).setMatrix(4, 3);
10029|  5.92k|    }
10030|  5.92k|#line 10031 "MachineIndependent/glslang_tab.cpp"
10031|  5.92k|    break;
10032|       |
10033|      0|  case 388: /* type_specifier_nonarray: F64MAT4X4  */
  ------------------
  |  Branch (10033:3): [True: 0, False: 314M]
  ------------------
10034|      0|#line 2766 "MachineIndependent/glslang.y"
10035|      0|                {
10036|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
10037|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
10038|      0|        (yyval.interm.type).basicType = EbtDouble;
10039|      0|        (yyval.interm.type).setMatrix(4, 4);
10040|      0|    }
10041|      0|#line 10042 "MachineIndependent/glslang_tab.cpp"
10042|      0|    break;
10043|       |
10044|      6|  case 389: /* type_specifier_nonarray: ACCSTRUCTNV  */
  ------------------
  |  Branch (10044:3): [True: 6, False: 314M]
  ------------------
10045|      6|#line 2772 "MachineIndependent/glslang.y"
10046|      6|                  {
10047|      6|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      6|#define parseContext (*pParseContext)
  ------------------
10048|      6|       (yyval.interm.type).basicType = EbtAccStruct;
10049|      6|    }
10050|      6|#line 10051 "MachineIndependent/glslang_tab.cpp"
10051|      6|    break;
10052|       |
10053|     50|  case 390: /* type_specifier_nonarray: ACCSTRUCTEXT  */
  ------------------
  |  Branch (10053:3): [True: 50, False: 314M]
  ------------------
10054|     50|#line 2776 "MachineIndependent/glslang.y"
10055|     50|                   {
10056|     50|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|     50|#define parseContext (*pParseContext)
  ------------------
10057|     50|       (yyval.interm.type).basicType = EbtAccStruct;
10058|     50|    }
10059|     50|#line 10060 "MachineIndependent/glslang_tab.cpp"
10060|     50|    break;
10061|       |
10062|     38|  case 391: /* type_specifier_nonarray: RAYQUERYEXT  */
  ------------------
  |  Branch (10062:3): [True: 38, False: 314M]
  ------------------
10063|     38|#line 2780 "MachineIndependent/glslang.y"
10064|     38|                  {
10065|     38|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|     38|#define parseContext (*pParseContext)
  ------------------
10066|     38|       (yyval.interm.type).basicType = EbtRayQuery;
10067|     38|    }
10068|     38|#line 10069 "MachineIndependent/glslang_tab.cpp"
10069|     38|    break;
10070|       |
10071|  7.68k|  case 392: /* type_specifier_nonarray: ATOMIC_UINT  */
  ------------------
  |  Branch (10071:3): [True: 7.68k, False: 314M]
  ------------------
10072|  7.68k|#line 2784 "MachineIndependent/glslang.y"
10073|  7.68k|                  {
10074|  7.68k|        parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
  ------------------
  |  |  783|  7.68k|#define parseContext (*pParseContext)
  ------------------
10075|  7.68k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  7.68k|#define parseContext (*pParseContext)
  ------------------
10076|  7.68k|        (yyval.interm.type).basicType = EbtAtomicUint;
10077|  7.68k|    }
10078|  7.68k|#line 10079 "MachineIndependent/glslang_tab.cpp"
10079|  7.68k|    break;
10080|       |
10081|  26.3k|  case 393: /* type_specifier_nonarray: SAMPLER1D  */
  ------------------
  |  Branch (10081:3): [True: 26.3k, False: 314M]
  ------------------
10082|  26.3k|#line 2789 "MachineIndependent/glslang.y"
10083|  26.3k|                {
10084|  26.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.3k|#define parseContext (*pParseContext)
  ------------------
10085|  26.3k|        (yyval.interm.type).basicType = EbtSampler;
10086|  26.3k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
10087|  26.3k|    }
10088|  26.3k|#line 10089 "MachineIndependent/glslang_tab.cpp"
10089|  26.3k|    break;
10090|       |
10091|   146k|  case 394: /* type_specifier_nonarray: SAMPLER2D  */
  ------------------
  |  Branch (10091:3): [True: 146k, False: 314M]
  ------------------
10092|   146k|#line 2794 "MachineIndependent/glslang.y"
10093|   146k|                {
10094|   146k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   146k|#define parseContext (*pParseContext)
  ------------------
10095|   146k|        (yyval.interm.type).basicType = EbtSampler;
10096|   146k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
10097|   146k|    }
10098|   146k|#line 10099 "MachineIndependent/glslang_tab.cpp"
10099|   146k|    break;
10100|       |
10101|  57.3k|  case 395: /* type_specifier_nonarray: SAMPLER3D  */
  ------------------
  |  Branch (10101:3): [True: 57.3k, False: 314M]
  ------------------
10102|  57.3k|#line 2799 "MachineIndependent/glslang.y"
10103|  57.3k|                {
10104|  57.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  57.3k|#define parseContext (*pParseContext)
  ------------------
10105|  57.3k|        (yyval.interm.type).basicType = EbtSampler;
10106|  57.3k|        (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
10107|  57.3k|    }
10108|  57.3k|#line 10109 "MachineIndependent/glslang_tab.cpp"
10109|  57.3k|    break;
10110|       |
10111|  27.2k|  case 396: /* type_specifier_nonarray: SAMPLERCUBE  */
  ------------------
  |  Branch (10111:3): [True: 27.2k, False: 314M]
  ------------------
10112|  27.2k|#line 2804 "MachineIndependent/glslang.y"
10113|  27.2k|                  {
10114|  27.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  27.2k|#define parseContext (*pParseContext)
  ------------------
10115|  27.2k|        (yyval.interm.type).basicType = EbtSampler;
10116|  27.2k|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
10117|  27.2k|    }
10118|  27.2k|#line 10119 "MachineIndependent/glslang_tab.cpp"
10119|  27.2k|    break;
10120|       |
10121|  48.5k|  case 397: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
  ------------------
  |  Branch (10121:3): [True: 48.5k, False: 314M]
  ------------------
10122|  48.5k|#line 2809 "MachineIndependent/glslang.y"
10123|  48.5k|                      {
10124|  48.5k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  48.5k|#define parseContext (*pParseContext)
  ------------------
10125|  48.5k|        (yyval.interm.type).basicType = EbtSampler;
10126|  48.5k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
10127|  48.5k|    }
10128|  48.5k|#line 10129 "MachineIndependent/glslang_tab.cpp"
10129|  48.5k|    break;
10130|       |
10131|  19.3k|  case 398: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
  ------------------
  |  Branch (10131:3): [True: 19.3k, False: 314M]
  ------------------
10132|  19.3k|#line 2814 "MachineIndependent/glslang.y"
10133|  19.3k|                        {
10134|  19.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  19.3k|#define parseContext (*pParseContext)
  ------------------
10135|  19.3k|        (yyval.interm.type).basicType = EbtSampler;
10136|  19.3k|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
10137|  19.3k|    }
10138|  19.3k|#line 10139 "MachineIndependent/glslang_tab.cpp"
10139|  19.3k|    break;
10140|       |
10141|  89.4k|  case 399: /* type_specifier_nonarray: SAMPLER2DARRAY  */
  ------------------
  |  Branch (10141:3): [True: 89.4k, False: 314M]
  ------------------
10142|  89.4k|#line 2819 "MachineIndependent/glslang.y"
10143|  89.4k|                     {
10144|  89.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  89.4k|#define parseContext (*pParseContext)
  ------------------
10145|  89.4k|        (yyval.interm.type).basicType = EbtSampler;
10146|  89.4k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
10147|  89.4k|    }
10148|  89.4k|#line 10149 "MachineIndependent/glslang_tab.cpp"
10149|  89.4k|    break;
10150|       |
10151|  29.4k|  case 400: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
  ------------------
  |  Branch (10151:3): [True: 29.4k, False: 314M]
  ------------------
10152|  29.4k|#line 2824 "MachineIndependent/glslang.y"
10153|  29.4k|                           {
10154|  29.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  29.4k|#define parseContext (*pParseContext)
  ------------------
10155|  29.4k|        (yyval.interm.type).basicType = EbtSampler;
10156|  29.4k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
10157|  29.4k|    }
10158|  29.4k|#line 10159 "MachineIndependent/glslang_tab.cpp"
10159|  29.4k|    break;
10160|       |
10161|  17.4k|  case 401: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
  ------------------
  |  Branch (10161:3): [True: 17.4k, False: 314M]
  ------------------
10162|  17.4k|#line 2829 "MachineIndependent/glslang.y"
10163|  17.4k|                      {
10164|  17.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  17.4k|#define parseContext (*pParseContext)
  ------------------
10165|  17.4k|        (yyval.interm.type).basicType = EbtSampler;
10166|  17.4k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
10167|  17.4k|    }
10168|  17.4k|#line 10169 "MachineIndependent/glslang_tab.cpp"
10169|  17.4k|    break;
10170|       |
10171|  16.2k|  case 402: /* type_specifier_nonarray: SAMPLER1DARRAY  */
  ------------------
  |  Branch (10171:3): [True: 16.2k, False: 314M]
  ------------------
10172|  16.2k|#line 2834 "MachineIndependent/glslang.y"
10173|  16.2k|                     {
10174|  16.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  16.2k|#define parseContext (*pParseContext)
  ------------------
10175|  16.2k|        (yyval.interm.type).basicType = EbtSampler;
10176|  16.2k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
10177|  16.2k|    }
10178|  16.2k|#line 10179 "MachineIndependent/glslang_tab.cpp"
10179|  16.2k|    break;
10180|       |
10181|  13.0k|  case 403: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
  ------------------
  |  Branch (10181:3): [True: 13.0k, False: 314M]
  ------------------
10182|  13.0k|#line 2839 "MachineIndependent/glslang.y"
10183|  13.0k|                           {
10184|  13.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  13.0k|#define parseContext (*pParseContext)
  ------------------
10185|  13.0k|        (yyval.interm.type).basicType = EbtSampler;
10186|  13.0k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
10187|  13.0k|    }
10188|  13.0k|#line 10189 "MachineIndependent/glslang_tab.cpp"
10189|  13.0k|    break;
10190|       |
10191|  26.9k|  case 404: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
  ------------------
  |  Branch (10191:3): [True: 26.9k, False: 314M]
  ------------------
10192|  26.9k|#line 2844 "MachineIndependent/glslang.y"
10193|  26.9k|                       {
10194|  26.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.9k|#define parseContext (*pParseContext)
  ------------------
10195|  26.9k|        (yyval.interm.type).basicType = EbtSampler;
10196|  26.9k|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
10197|  26.9k|    }
10198|  26.9k|#line 10199 "MachineIndependent/glslang_tab.cpp"
10199|  26.9k|    break;
10200|       |
10201|  16.4k|  case 405: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
  ------------------
  |  Branch (10201:3): [True: 16.4k, False: 314M]
  ------------------
10202|  16.4k|#line 2849 "MachineIndependent/glslang.y"
10203|  16.4k|                             {
10204|  16.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  16.4k|#define parseContext (*pParseContext)
  ------------------
10205|  16.4k|        (yyval.interm.type).basicType = EbtSampler;
10206|  16.4k|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
10207|  16.4k|    }
10208|  16.4k|#line 10209 "MachineIndependent/glslang_tab.cpp"
10209|  16.4k|    break;
10210|       |
10211|  48.4k|  case 406: /* type_specifier_nonarray: F16SAMPLER1D  */
  ------------------
  |  Branch (10211:3): [True: 48.4k, False: 314M]
  ------------------
10212|  48.4k|#line 2854 "MachineIndependent/glslang.y"
10213|  48.4k|                   {
10214|  48.4k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  48.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  48.4k|#define parseContext (*pParseContext)
  ------------------
10215|  48.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  48.4k|#define parseContext (*pParseContext)
  ------------------
10216|  48.4k|        (yyval.interm.type).basicType = EbtSampler;
10217|  48.4k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
10218|  48.4k|    }
10219|  48.4k|#line 10220 "MachineIndependent/glslang_tab.cpp"
10220|  48.4k|    break;
10221|       |
10222|   111k|  case 407: /* type_specifier_nonarray: F16SAMPLER2D  */
  ------------------
  |  Branch (10222:3): [True: 111k, False: 314M]
  ------------------
10223|   111k|#line 2860 "MachineIndependent/glslang.y"
10224|   111k|                   {
10225|   111k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   111k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   111k|#define parseContext (*pParseContext)
  ------------------
10226|   111k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   111k|#define parseContext (*pParseContext)
  ------------------
10227|   111k|        (yyval.interm.type).basicType = EbtSampler;
10228|   111k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
10229|   111k|    }
10230|   111k|#line 10231 "MachineIndependent/glslang_tab.cpp"
10231|   111k|    break;
10232|       |
10233|  57.8k|  case 408: /* type_specifier_nonarray: F16SAMPLER3D  */
  ------------------
  |  Branch (10233:3): [True: 57.8k, False: 314M]
  ------------------
10234|  57.8k|#line 2866 "MachineIndependent/glslang.y"
10235|  57.8k|                   {
10236|  57.8k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  57.8k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  57.8k|#define parseContext (*pParseContext)
  ------------------
10237|  57.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  57.8k|#define parseContext (*pParseContext)
  ------------------
10238|  57.8k|        (yyval.interm.type).basicType = EbtSampler;
10239|  57.8k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
10240|  57.8k|    }
10241|  57.8k|#line 10242 "MachineIndependent/glslang_tab.cpp"
10242|  57.8k|    break;
10243|       |
10244|  36.2k|  case 409: /* type_specifier_nonarray: F16SAMPLERCUBE  */
  ------------------
  |  Branch (10244:3): [True: 36.2k, False: 314M]
  ------------------
10245|  36.2k|#line 2872 "MachineIndependent/glslang.y"
10246|  36.2k|                     {
10247|  36.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  36.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  36.2k|#define parseContext (*pParseContext)
  ------------------
10248|  36.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  36.2k|#define parseContext (*pParseContext)
  ------------------
10249|  36.2k|        (yyval.interm.type).basicType = EbtSampler;
10250|  36.2k|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
10251|  36.2k|    }
10252|  36.2k|#line 10253 "MachineIndependent/glslang_tab.cpp"
10253|  36.2k|    break;
10254|       |
10255|  30.9k|  case 410: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
  ------------------
  |  Branch (10255:3): [True: 30.9k, False: 314M]
  ------------------
10256|  30.9k|#line 2878 "MachineIndependent/glslang.y"
10257|  30.9k|                         {
10258|  30.9k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  30.9k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  30.9k|#define parseContext (*pParseContext)
  ------------------
10259|  30.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  30.9k|#define parseContext (*pParseContext)
  ------------------
10260|  30.9k|        (yyval.interm.type).basicType = EbtSampler;
10261|  30.9k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
10262|  30.9k|    }
10263|  30.9k|#line 10264 "MachineIndependent/glslang_tab.cpp"
10264|  30.9k|    break;
10265|       |
10266|  53.3k|  case 411: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
  ------------------
  |  Branch (10266:3): [True: 53.3k, False: 314M]
  ------------------
10267|  53.3k|#line 2884 "MachineIndependent/glslang.y"
10268|  53.3k|                         {
10269|  53.3k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  53.3k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  53.3k|#define parseContext (*pParseContext)
  ------------------
10270|  53.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  53.3k|#define parseContext (*pParseContext)
  ------------------
10271|  53.3k|        (yyval.interm.type).basicType = EbtSampler;
10272|  53.3k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
10273|  53.3k|    }
10274|  53.3k|#line 10275 "MachineIndependent/glslang_tab.cpp"
10275|  53.3k|    break;
10276|       |
10277|  22.2k|  case 412: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
  ------------------
  |  Branch (10277:3): [True: 22.2k, False: 314M]
  ------------------
10278|  22.2k|#line 2890 "MachineIndependent/glslang.y"
10279|  22.2k|                           {
10280|  22.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  22.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  22.2k|#define parseContext (*pParseContext)
  ------------------
10281|  22.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  22.2k|#define parseContext (*pParseContext)
  ------------------
10282|  22.2k|        (yyval.interm.type).basicType = EbtSampler;
10283|  22.2k|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
10284|  22.2k|    }
10285|  22.2k|#line 10286 "MachineIndependent/glslang_tab.cpp"
10286|  22.2k|    break;
10287|       |
10288|  25.7k|  case 413: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
  ------------------
  |  Branch (10288:3): [True: 25.7k, False: 314M]
  ------------------
10289|  25.7k|#line 2896 "MachineIndependent/glslang.y"
10290|  25.7k|                        {
10291|  25.7k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  25.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  25.7k|#define parseContext (*pParseContext)
  ------------------
10292|  25.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  25.7k|#define parseContext (*pParseContext)
  ------------------
10293|  25.7k|        (yyval.interm.type).basicType = EbtSampler;
10294|  25.7k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
10295|  25.7k|    }
10296|  25.7k|#line 10297 "MachineIndependent/glslang_tab.cpp"
10297|  25.7k|    break;
10298|       |
10299|  88.4k|  case 414: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
  ------------------
  |  Branch (10299:3): [True: 88.4k, False: 314M]
  ------------------
10300|  88.4k|#line 2902 "MachineIndependent/glslang.y"
10301|  88.4k|                        {
10302|  88.4k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  88.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  88.4k|#define parseContext (*pParseContext)
  ------------------
10303|  88.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  88.4k|#define parseContext (*pParseContext)
  ------------------
10304|  88.4k|        (yyval.interm.type).basicType = EbtSampler;
10305|  88.4k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
10306|  88.4k|    }
10307|  88.4k|#line 10308 "MachineIndependent/glslang_tab.cpp"
10308|  88.4k|    break;
10309|       |
10310|  22.2k|  case 415: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
  ------------------
  |  Branch (10310:3): [True: 22.2k, False: 314M]
  ------------------
10311|  22.2k|#line 2908 "MachineIndependent/glslang.y"
10312|  22.2k|                              {
10313|  22.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  22.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  22.2k|#define parseContext (*pParseContext)
  ------------------
10314|  22.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  22.2k|#define parseContext (*pParseContext)
  ------------------
10315|  22.2k|        (yyval.interm.type).basicType = EbtSampler;
10316|  22.2k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
10317|  22.2k|    }
10318|  22.2k|#line 10319 "MachineIndependent/glslang_tab.cpp"
10319|  22.2k|    break;
10320|       |
10321|  27.7k|  case 416: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
  ------------------
  |  Branch (10321:3): [True: 27.7k, False: 314M]
  ------------------
10322|  27.7k|#line 2914 "MachineIndependent/glslang.y"
10323|  27.7k|                              {
10324|  27.7k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  27.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  27.7k|#define parseContext (*pParseContext)
  ------------------
10325|  27.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  27.7k|#define parseContext (*pParseContext)
  ------------------
10326|  27.7k|        (yyval.interm.type).basicType = EbtSampler;
10327|  27.7k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
10328|  27.7k|    }
10329|  27.7k|#line 10330 "MachineIndependent/glslang_tab.cpp"
10330|  27.7k|    break;
10331|       |
10332|  36.2k|  case 417: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
  ------------------
  |  Branch (10332:3): [True: 36.2k, False: 314M]
  ------------------
10333|  36.2k|#line 2920 "MachineIndependent/glslang.y"
10334|  36.2k|                          {
10335|  36.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  36.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  36.2k|#define parseContext (*pParseContext)
  ------------------
10336|  36.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  36.2k|#define parseContext (*pParseContext)
  ------------------
10337|  36.2k|        (yyval.interm.type).basicType = EbtSampler;
10338|  36.2k|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
10339|  36.2k|    }
10340|  36.2k|#line 10341 "MachineIndependent/glslang_tab.cpp"
10341|  36.2k|    break;
10342|       |
10343|  15.5k|  case 418: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
  ------------------
  |  Branch (10343:3): [True: 15.5k, False: 314M]
  ------------------
10344|  15.5k|#line 2926 "MachineIndependent/glslang.y"
10345|  15.5k|                                {
10346|  15.5k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  15.5k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  15.5k|#define parseContext (*pParseContext)
  ------------------
10347|  15.5k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  15.5k|#define parseContext (*pParseContext)
  ------------------
10348|  15.5k|        (yyval.interm.type).basicType = EbtSampler;
10349|  15.5k|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
10350|  15.5k|    }
10351|  15.5k|#line 10352 "MachineIndependent/glslang_tab.cpp"
10352|  15.5k|    break;
10353|       |
10354|  26.3k|  case 419: /* type_specifier_nonarray: ISAMPLER1D  */
  ------------------
  |  Branch (10354:3): [True: 26.3k, False: 314M]
  ------------------
10355|  26.3k|#line 2932 "MachineIndependent/glslang.y"
10356|  26.3k|                 {
10357|  26.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.3k|#define parseContext (*pParseContext)
  ------------------
10358|  26.3k|        (yyval.interm.type).basicType = EbtSampler;
10359|  26.3k|        (yyval.interm.type).sampler.set(EbtInt, Esd1D);
10360|  26.3k|    }
10361|  26.3k|#line 10362 "MachineIndependent/glslang_tab.cpp"
10362|  26.3k|    break;
10363|       |
10364|   121k|  case 420: /* type_specifier_nonarray: ISAMPLER2D  */
  ------------------
  |  Branch (10364:3): [True: 121k, False: 314M]
  ------------------
10365|   121k|#line 2937 "MachineIndependent/glslang.y"
10366|   121k|                 {
10367|   121k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   121k|#define parseContext (*pParseContext)
  ------------------
10368|   121k|        (yyval.interm.type).basicType = EbtSampler;
10369|   121k|        (yyval.interm.type).sampler.set(EbtInt, Esd2D);
10370|   121k|    }
10371|   121k|#line 10372 "MachineIndependent/glslang_tab.cpp"
10372|   121k|    break;
10373|       |
10374|  54.6k|  case 421: /* type_specifier_nonarray: ISAMPLER3D  */
  ------------------
  |  Branch (10374:3): [True: 54.6k, False: 314M]
  ------------------
10375|  54.6k|#line 2942 "MachineIndependent/glslang.y"
10376|  54.6k|                 {
10377|  54.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  54.6k|#define parseContext (*pParseContext)
  ------------------
10378|  54.6k|        (yyval.interm.type).basicType = EbtSampler;
10379|  54.6k|        (yyval.interm.type).sampler.set(EbtInt, Esd3D);
10380|  54.6k|    }
10381|  54.6k|#line 10382 "MachineIndependent/glslang_tab.cpp"
10382|  54.6k|    break;
10383|       |
10384|  26.9k|  case 422: /* type_specifier_nonarray: ISAMPLERCUBE  */
  ------------------
  |  Branch (10384:3): [True: 26.9k, False: 314M]
  ------------------
10385|  26.9k|#line 2947 "MachineIndependent/glslang.y"
10386|  26.9k|                   {
10387|  26.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.9k|#define parseContext (*pParseContext)
  ------------------
10388|  26.9k|        (yyval.interm.type).basicType = EbtSampler;
10389|  26.9k|        (yyval.interm.type).sampler.set(EbtInt, EsdCube);
10390|  26.9k|    }
10391|  26.9k|#line 10392 "MachineIndependent/glslang_tab.cpp"
10392|  26.9k|    break;
10393|       |
10394|  88.0k|  case 423: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
  ------------------
  |  Branch (10394:3): [True: 88.0k, False: 314M]
  ------------------
10395|  88.0k|#line 2952 "MachineIndependent/glslang.y"
10396|  88.0k|                      {
10397|  88.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  88.0k|#define parseContext (*pParseContext)
  ------------------
10398|  88.0k|        (yyval.interm.type).basicType = EbtSampler;
10399|  88.0k|        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
10400|  88.0k|    }
10401|  88.0k|#line 10402 "MachineIndependent/glslang_tab.cpp"
10402|  88.0k|    break;
10403|       |
10404|   121k|  case 424: /* type_specifier_nonarray: USAMPLER2D  */
  ------------------
  |  Branch (10404:3): [True: 121k, False: 314M]
  ------------------
10405|   121k|#line 2957 "MachineIndependent/glslang.y"
10406|   121k|                 {
10407|   121k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   121k|#define parseContext (*pParseContext)
  ------------------
10408|   121k|        (yyval.interm.type).basicType = EbtSampler;
10409|   121k|        (yyval.interm.type).sampler.set(EbtUint, Esd2D);
10410|   121k|    }
10411|   121k|#line 10412 "MachineIndependent/glslang_tab.cpp"
10412|   121k|    break;
10413|       |
10414|  54.6k|  case 425: /* type_specifier_nonarray: USAMPLER3D  */
  ------------------
  |  Branch (10414:3): [True: 54.6k, False: 314M]
  ------------------
10415|  54.6k|#line 2962 "MachineIndependent/glslang.y"
10416|  54.6k|                 {
10417|  54.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  54.6k|#define parseContext (*pParseContext)
  ------------------
10418|  54.6k|        (yyval.interm.type).basicType = EbtSampler;
10419|  54.6k|        (yyval.interm.type).sampler.set(EbtUint, Esd3D);
10420|  54.6k|    }
10421|  54.6k|#line 10422 "MachineIndependent/glslang_tab.cpp"
10422|  54.6k|    break;
10423|       |
10424|  26.9k|  case 426: /* type_specifier_nonarray: USAMPLERCUBE  */
  ------------------
  |  Branch (10424:3): [True: 26.9k, False: 314M]
  ------------------
10425|  26.9k|#line 2967 "MachineIndependent/glslang.y"
10426|  26.9k|                   {
10427|  26.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.9k|#define parseContext (*pParseContext)
  ------------------
10428|  26.9k|        (yyval.interm.type).basicType = EbtSampler;
10429|  26.9k|        (yyval.interm.type).sampler.set(EbtUint, EsdCube);
10430|  26.9k|    }
10431|  26.9k|#line 10432 "MachineIndependent/glslang_tab.cpp"
10432|  26.9k|    break;
10433|       |
10434|  14.8k|  case 427: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
  ------------------
  |  Branch (10434:3): [True: 14.8k, False: 314M]
  ------------------
10435|  14.8k|#line 2972 "MachineIndependent/glslang.y"
10436|  14.8k|                      {
10437|  14.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  14.8k|#define parseContext (*pParseContext)
  ------------------
10438|  14.8k|        (yyval.interm.type).basicType = EbtSampler;
10439|  14.8k|        (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
10440|  14.8k|    }
10441|  14.8k|#line 10442 "MachineIndependent/glslang_tab.cpp"
10442|  14.8k|    break;
10443|       |
10444|  26.9k|  case 428: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
  ------------------
  |  Branch (10444:3): [True: 26.9k, False: 314M]
  ------------------
10445|  26.9k|#line 2977 "MachineIndependent/glslang.y"
10446|  26.9k|                        {
10447|  26.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.9k|#define parseContext (*pParseContext)
  ------------------
10448|  26.9k|        (yyval.interm.type).basicType = EbtSampler;
10449|  26.9k|        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
10450|  26.9k|    }
10451|  26.9k|#line 10452 "MachineIndependent/glslang_tab.cpp"
10452|  26.9k|    break;
10453|       |
10454|  26.3k|  case 429: /* type_specifier_nonarray: USAMPLER1D  */
  ------------------
  |  Branch (10454:3): [True: 26.3k, False: 314M]
  ------------------
10455|  26.3k|#line 2982 "MachineIndependent/glslang.y"
10456|  26.3k|                 {
10457|  26.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.3k|#define parseContext (*pParseContext)
  ------------------
10458|  26.3k|        (yyval.interm.type).basicType = EbtSampler;
10459|  26.3k|        (yyval.interm.type).sampler.set(EbtUint, Esd1D);
10460|  26.3k|    }
10461|  26.3k|#line 10462 "MachineIndependent/glslang_tab.cpp"
10462|  26.3k|    break;
10463|       |
10464|  14.8k|  case 430: /* type_specifier_nonarray: USAMPLER1DARRAY  */
  ------------------
  |  Branch (10464:3): [True: 14.8k, False: 314M]
  ------------------
10465|  14.8k|#line 2987 "MachineIndependent/glslang.y"
10466|  14.8k|                      {
10467|  14.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  14.8k|#define parseContext (*pParseContext)
  ------------------
10468|  14.8k|        (yyval.interm.type).basicType = EbtSampler;
10469|  14.8k|        (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
10470|  14.8k|    }
10471|  14.8k|#line 10472 "MachineIndependent/glslang_tab.cpp"
10472|  14.8k|    break;
10473|       |
10474|  26.9k|  case 431: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
  ------------------
  |  Branch (10474:3): [True: 26.9k, False: 314M]
  ------------------
10475|  26.9k|#line 2992 "MachineIndependent/glslang.y"
10476|  26.9k|                        {
10477|  26.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.9k|#define parseContext (*pParseContext)
  ------------------
10478|  26.9k|        (yyval.interm.type).basicType = EbtSampler;
10479|  26.9k|        (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
10480|  26.9k|    }
10481|  26.9k|#line 10482 "MachineIndependent/glslang_tab.cpp"
10482|  26.9k|    break;
10483|       |
10484|    106|  case 432: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
  ------------------
  |  Branch (10484:3): [True: 106, False: 314M]
  ------------------
10485|    106|#line 2997 "MachineIndependent/glslang.y"
10486|    106|                       {
10487|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10488|    106|        (yyval.interm.type).basicType = EbtSampler;
10489|    106|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
10490|    106|    }
10491|    106|#line 10492 "MachineIndependent/glslang_tab.cpp"
10492|    106|    break;
10493|       |
10494|    106|  case 433: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
  ------------------
  |  Branch (10494:3): [True: 106, False: 314M]
  ------------------
10495|    106|#line 3002 "MachineIndependent/glslang.y"
10496|    106|                        {
10497|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10498|    106|        (yyval.interm.type).basicType = EbtSampler;
10499|    106|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
10500|    106|    }
10501|    106|#line 10502 "MachineIndependent/glslang_tab.cpp"
10502|    106|    break;
10503|       |
10504|    106|  case 434: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
  ------------------
  |  Branch (10504:3): [True: 106, False: 314M]
  ------------------
10505|    106|#line 3007 "MachineIndependent/glslang.y"
10506|    106|                        {
10507|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10508|    106|        (yyval.interm.type).basicType = EbtSampler;
10509|    106|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
10510|    106|    }
10511|    106|#line 10512 "MachineIndependent/glslang_tab.cpp"
10512|    106|    break;
10513|       |
10514|  88.0k|  case 435: /* type_specifier_nonarray: USAMPLER2DARRAY  */
  ------------------
  |  Branch (10514:3): [True: 88.0k, False: 314M]
  ------------------
10515|  88.0k|#line 3012 "MachineIndependent/glslang.y"
10516|  88.0k|                      {
10517|  88.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  88.0k|#define parseContext (*pParseContext)
  ------------------
10518|  88.0k|        (yyval.interm.type).basicType = EbtSampler;
10519|  88.0k|        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
10520|  88.0k|    }
10521|  88.0k|#line 10522 "MachineIndependent/glslang_tab.cpp"
10522|  88.0k|    break;
10523|       |
10524|    318|  case 436: /* type_specifier_nonarray: TEXTURE2D  */
  ------------------
  |  Branch (10524:3): [True: 318, False: 314M]
  ------------------
10525|    318|#line 3017 "MachineIndependent/glslang.y"
10526|    318|                {
10527|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10528|    318|        (yyval.interm.type).basicType = EbtSampler;
10529|    318|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
10530|    318|    }
10531|    318|#line 10532 "MachineIndependent/glslang_tab.cpp"
10532|    318|    break;
10533|       |
10534|    318|  case 437: /* type_specifier_nonarray: TEXTURE3D  */
  ------------------
  |  Branch (10534:3): [True: 318, False: 314M]
  ------------------
10535|    318|#line 3022 "MachineIndependent/glslang.y"
10536|    318|                {
10537|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10538|    318|        (yyval.interm.type).basicType = EbtSampler;
10539|    318|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
10540|    318|    }
10541|    318|#line 10542 "MachineIndependent/glslang_tab.cpp"
10542|    318|    break;
10543|       |
10544|    318|  case 438: /* type_specifier_nonarray: TEXTURE2DARRAY  */
  ------------------
  |  Branch (10544:3): [True: 318, False: 314M]
  ------------------
10545|    318|#line 3027 "MachineIndependent/glslang.y"
10546|    318|                     {
10547|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10548|    318|        (yyval.interm.type).basicType = EbtSampler;
10549|    318|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
10550|    318|    }
10551|    318|#line 10552 "MachineIndependent/glslang_tab.cpp"
10552|    318|    break;
10553|       |
10554|    106|  case 439: /* type_specifier_nonarray: TEXTURECUBE  */
  ------------------
  |  Branch (10554:3): [True: 106, False: 314M]
  ------------------
10555|    106|#line 3032 "MachineIndependent/glslang.y"
10556|    106|                  {
10557|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10558|    106|        (yyval.interm.type).basicType = EbtSampler;
10559|    106|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
10560|    106|    }
10561|    106|#line 10562 "MachineIndependent/glslang_tab.cpp"
10562|    106|    break;
10563|       |
10564|    318|  case 440: /* type_specifier_nonarray: ITEXTURE2D  */
  ------------------
  |  Branch (10564:3): [True: 318, False: 314M]
  ------------------
10565|    318|#line 3037 "MachineIndependent/glslang.y"
10566|    318|                 {
10567|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10568|    318|        (yyval.interm.type).basicType = EbtSampler;
10569|    318|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
10570|    318|    }
10571|    318|#line 10572 "MachineIndependent/glslang_tab.cpp"
10572|    318|    break;
10573|       |
10574|    318|  case 441: /* type_specifier_nonarray: ITEXTURE3D  */
  ------------------
  |  Branch (10574:3): [True: 318, False: 314M]
  ------------------
10575|    318|#line 3042 "MachineIndependent/glslang.y"
10576|    318|                 {
10577|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10578|    318|        (yyval.interm.type).basicType = EbtSampler;
10579|    318|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
10580|    318|    }
10581|    318|#line 10582 "MachineIndependent/glslang_tab.cpp"
10582|    318|    break;
10583|       |
10584|    106|  case 442: /* type_specifier_nonarray: ITEXTURECUBE  */
  ------------------
  |  Branch (10584:3): [True: 106, False: 314M]
  ------------------
10585|    106|#line 3047 "MachineIndependent/glslang.y"
10586|    106|                   {
10587|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10588|    106|        (yyval.interm.type).basicType = EbtSampler;
10589|    106|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
10590|    106|    }
10591|    106|#line 10592 "MachineIndependent/glslang_tab.cpp"
10592|    106|    break;
10593|       |
10594|    318|  case 443: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
  ------------------
  |  Branch (10594:3): [True: 318, False: 314M]
  ------------------
10595|    318|#line 3052 "MachineIndependent/glslang.y"
10596|    318|                      {
10597|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10598|    318|        (yyval.interm.type).basicType = EbtSampler;
10599|    318|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
10600|    318|    }
10601|    318|#line 10602 "MachineIndependent/glslang_tab.cpp"
10602|    318|    break;
10603|       |
10604|    318|  case 444: /* type_specifier_nonarray: UTEXTURE2D  */
  ------------------
  |  Branch (10604:3): [True: 318, False: 314M]
  ------------------
10605|    318|#line 3057 "MachineIndependent/glslang.y"
10606|    318|                 {
10607|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10608|    318|        (yyval.interm.type).basicType = EbtSampler;
10609|    318|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
10610|    318|    }
10611|    318|#line 10612 "MachineIndependent/glslang_tab.cpp"
10612|    318|    break;
10613|       |
10614|    318|  case 445: /* type_specifier_nonarray: UTEXTURE3D  */
  ------------------
  |  Branch (10614:3): [True: 318, False: 314M]
  ------------------
10615|    318|#line 3062 "MachineIndependent/glslang.y"
10616|    318|                 {
10617|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10618|    318|        (yyval.interm.type).basicType = EbtSampler;
10619|    318|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
10620|    318|    }
10621|    318|#line 10622 "MachineIndependent/glslang_tab.cpp"
10622|    318|    break;
10623|       |
10624|    106|  case 446: /* type_specifier_nonarray: UTEXTURECUBE  */
  ------------------
  |  Branch (10624:3): [True: 106, False: 314M]
  ------------------
10625|    106|#line 3067 "MachineIndependent/glslang.y"
10626|    106|                   {
10627|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10628|    106|        (yyval.interm.type).basicType = EbtSampler;
10629|    106|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
10630|    106|    }
10631|    106|#line 10632 "MachineIndependent/glslang_tab.cpp"
10632|    106|    break;
10633|       |
10634|    318|  case 447: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
  ------------------
  |  Branch (10634:3): [True: 318, False: 314M]
  ------------------
10635|    318|#line 3072 "MachineIndependent/glslang.y"
10636|    318|                      {
10637|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10638|    318|        (yyval.interm.type).basicType = EbtSampler;
10639|    318|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
10640|    318|    }
10641|    318|#line 10642 "MachineIndependent/glslang_tab.cpp"
10642|    318|    break;
10643|       |
10644|      0|  case 448: /* type_specifier_nonarray: SAMPLER  */
  ------------------
  |  Branch (10644:3): [True: 0, False: 314M]
  ------------------
10645|      0|#line 3077 "MachineIndependent/glslang.y"
10646|      0|              {
10647|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
10648|      0|        (yyval.interm.type).basicType = EbtSampler;
10649|      0|        (yyval.interm.type).sampler.setPureSampler(false);
10650|      0|    }
10651|      0|#line 10652 "MachineIndependent/glslang_tab.cpp"
10652|      0|    break;
10653|       |
10654|      0|  case 449: /* type_specifier_nonarray: SAMPLERSHADOW  */
  ------------------
  |  Branch (10654:3): [True: 0, False: 314M]
  ------------------
10655|      0|#line 3082 "MachineIndependent/glslang.y"
10656|      0|                    {
10657|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
10658|      0|        (yyval.interm.type).basicType = EbtSampler;
10659|      0|        (yyval.interm.type).sampler.setPureSampler(true);
10660|      0|    }
10661|      0|#line 10662 "MachineIndependent/glslang_tab.cpp"
10662|      0|    break;
10663|       |
10664|  24.4k|  case 450: /* type_specifier_nonarray: SAMPLER2DRECT  */
  ------------------
  |  Branch (10664:3): [True: 24.4k, False: 314M]
  ------------------
10665|  24.4k|#line 3087 "MachineIndependent/glslang.y"
10666|  24.4k|                    {
10667|  24.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  24.4k|#define parseContext (*pParseContext)
  ------------------
10668|  24.4k|        (yyval.interm.type).basicType = EbtSampler;
10669|  24.4k|        (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
10670|  24.4k|    }
10671|  24.4k|#line 10672 "MachineIndependent/glslang_tab.cpp"
10672|  24.4k|    break;
10673|       |
10674|  13.6k|  case 451: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
  ------------------
  |  Branch (10674:3): [True: 13.6k, False: 314M]
  ------------------
10675|  13.6k|#line 3092 "MachineIndependent/glslang.y"
10676|  13.6k|                          {
10677|  13.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  13.6k|#define parseContext (*pParseContext)
  ------------------
10678|  13.6k|        (yyval.interm.type).basicType = EbtSampler;
10679|  13.6k|        (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
10680|  13.6k|    }
10681|  13.6k|#line 10682 "MachineIndependent/glslang_tab.cpp"
10682|  13.6k|    break;
10683|       |
10684|  47.9k|  case 452: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
  ------------------
  |  Branch (10684:3): [True: 47.9k, False: 314M]
  ------------------
10685|  47.9k|#line 3097 "MachineIndependent/glslang.y"
10686|  47.9k|                       {
10687|  47.9k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  47.9k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  47.9k|#define parseContext (*pParseContext)
  ------------------
10688|  47.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  47.9k|#define parseContext (*pParseContext)
  ------------------
10689|  47.9k|        (yyval.interm.type).basicType = EbtSampler;
10690|  47.9k|        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
10691|  47.9k|    }
10692|  47.9k|#line 10693 "MachineIndependent/glslang_tab.cpp"
10693|  47.9k|    break;
10694|       |
10695|  26.6k|  case 453: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
  ------------------
  |  Branch (10695:3): [True: 26.6k, False: 314M]
  ------------------
10696|  26.6k|#line 3103 "MachineIndependent/glslang.y"
10697|  26.6k|                             {
10698|  26.6k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
10699|  26.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
10700|  26.6k|        (yyval.interm.type).basicType = EbtSampler;
10701|  26.6k|        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
10702|  26.6k|    }
10703|  26.6k|#line 10704 "MachineIndependent/glslang_tab.cpp"
10704|  26.6k|    break;
10705|       |
10706|  24.4k|  case 454: /* type_specifier_nonarray: ISAMPLER2DRECT  */
  ------------------
  |  Branch (10706:3): [True: 24.4k, False: 314M]
  ------------------
10707|  24.4k|#line 3109 "MachineIndependent/glslang.y"
10708|  24.4k|                     {
10709|  24.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  24.4k|#define parseContext (*pParseContext)
  ------------------
10710|  24.4k|        (yyval.interm.type).basicType = EbtSampler;
10711|  24.4k|        (yyval.interm.type).sampler.set(EbtInt, EsdRect);
10712|  24.4k|    }
10713|  24.4k|#line 10714 "MachineIndependent/glslang_tab.cpp"
10714|  24.4k|    break;
10715|       |
10716|  24.4k|  case 455: /* type_specifier_nonarray: USAMPLER2DRECT  */
  ------------------
  |  Branch (10716:3): [True: 24.4k, False: 314M]
  ------------------
10717|  24.4k|#line 3114 "MachineIndependent/glslang.y"
10718|  24.4k|                     {
10719|  24.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  24.4k|#define parseContext (*pParseContext)
  ------------------
10720|  24.4k|        (yyval.interm.type).basicType = EbtSampler;
10721|  24.4k|        (yyval.interm.type).sampler.set(EbtUint, EsdRect);
10722|  24.4k|    }
10723|  24.4k|#line 10724 "MachineIndependent/glslang_tab.cpp"
10724|  24.4k|    break;
10725|       |
10726|  2.88k|  case 456: /* type_specifier_nonarray: SAMPLERBUFFER  */
  ------------------
  |  Branch (10726:3): [True: 2.88k, False: 314M]
  ------------------
10727|  2.88k|#line 3119 "MachineIndependent/glslang.y"
10728|  2.88k|                    {
10729|  2.88k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.88k|#define parseContext (*pParseContext)
  ------------------
10730|  2.88k|        (yyval.interm.type).basicType = EbtSampler;
10731|  2.88k|        (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
10732|  2.88k|    }
10733|  2.88k|#line 10734 "MachineIndependent/glslang_tab.cpp"
10734|  2.88k|    break;
10735|       |
10736|  1.33k|  case 457: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
  ------------------
  |  Branch (10736:3): [True: 1.33k, False: 314M]
  ------------------
10737|  1.33k|#line 3124 "MachineIndependent/glslang.y"
10738|  1.33k|                       {
10739|  1.33k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.33k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  1.33k|#define parseContext (*pParseContext)
  ------------------
10740|  1.33k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  1.33k|#define parseContext (*pParseContext)
  ------------------
10741|  1.33k|        (yyval.interm.type).basicType = EbtSampler;
10742|  1.33k|        (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
10743|  1.33k|    }
10744|  1.33k|#line 10745 "MachineIndependent/glslang_tab.cpp"
10745|  1.33k|    break;
10746|       |
10747|  2.88k|  case 458: /* type_specifier_nonarray: ISAMPLERBUFFER  */
  ------------------
  |  Branch (10747:3): [True: 2.88k, False: 314M]
  ------------------
10748|  2.88k|#line 3130 "MachineIndependent/glslang.y"
10749|  2.88k|                     {
10750|  2.88k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.88k|#define parseContext (*pParseContext)
  ------------------
10751|  2.88k|        (yyval.interm.type).basicType = EbtSampler;
10752|  2.88k|        (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
10753|  2.88k|    }
10754|  2.88k|#line 10755 "MachineIndependent/glslang_tab.cpp"
10755|  2.88k|    break;
10756|       |
10757|  2.88k|  case 459: /* type_specifier_nonarray: USAMPLERBUFFER  */
  ------------------
  |  Branch (10757:3): [True: 2.88k, False: 314M]
  ------------------
10758|  2.88k|#line 3135 "MachineIndependent/glslang.y"
10759|  2.88k|                     {
10760|  2.88k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.88k|#define parseContext (*pParseContext)
  ------------------
10761|  2.88k|        (yyval.interm.type).basicType = EbtSampler;
10762|  2.88k|        (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
10763|  2.88k|    }
10764|  2.88k|#line 10765 "MachineIndependent/glslang_tab.cpp"
10765|  2.88k|    break;
10766|       |
10767|  4.65k|  case 460: /* type_specifier_nonarray: SAMPLER2DMS  */
  ------------------
  |  Branch (10767:3): [True: 4.65k, False: 314M]
  ------------------
10768|  4.65k|#line 3140 "MachineIndependent/glslang.y"
10769|  4.65k|                  {
10770|  4.65k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.65k|#define parseContext (*pParseContext)
  ------------------
10771|  4.65k|        (yyval.interm.type).basicType = EbtSampler;
10772|  4.65k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
10773|  4.65k|    }
10774|  4.65k|#line 10775 "MachineIndependent/glslang_tab.cpp"
10775|  4.65k|    break;
10776|       |
10777|  2.66k|  case 461: /* type_specifier_nonarray: F16SAMPLER2DMS  */
  ------------------
  |  Branch (10777:3): [True: 2.66k, False: 314M]
  ------------------
10778|  2.66k|#line 3145 "MachineIndependent/glslang.y"
10779|  2.66k|                     {
10780|  2.66k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  2.66k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  2.66k|#define parseContext (*pParseContext)
  ------------------
10781|  2.66k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.66k|#define parseContext (*pParseContext)
  ------------------
10782|  2.66k|        (yyval.interm.type).basicType = EbtSampler;
10783|  2.66k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
10784|  2.66k|    }
10785|  2.66k|#line 10786 "MachineIndependent/glslang_tab.cpp"
10786|  2.66k|    break;
10787|       |
10788|  4.65k|  case 462: /* type_specifier_nonarray: ISAMPLER2DMS  */
  ------------------
  |  Branch (10788:3): [True: 4.65k, False: 314M]
  ------------------
10789|  4.65k|#line 3151 "MachineIndependent/glslang.y"
10790|  4.65k|                   {
10791|  4.65k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.65k|#define parseContext (*pParseContext)
  ------------------
10792|  4.65k|        (yyval.interm.type).basicType = EbtSampler;
10793|  4.65k|        (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
10794|  4.65k|    }
10795|  4.65k|#line 10796 "MachineIndependent/glslang_tab.cpp"
10796|  4.65k|    break;
10797|       |
10798|  4.65k|  case 463: /* type_specifier_nonarray: USAMPLER2DMS  */
  ------------------
  |  Branch (10798:3): [True: 4.65k, False: 314M]
  ------------------
10799|  4.65k|#line 3156 "MachineIndependent/glslang.y"
10800|  4.65k|                   {
10801|  4.65k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.65k|#define parseContext (*pParseContext)
  ------------------
10802|  4.65k|        (yyval.interm.type).basicType = EbtSampler;
10803|  4.65k|        (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
10804|  4.65k|    }
10805|  4.65k|#line 10806 "MachineIndependent/glslang_tab.cpp"
10806|  4.65k|    break;
10807|       |
10808|  4.65k|  case 464: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10808:3): [True: 4.65k, False: 314M]
  ------------------
10809|  4.65k|#line 3161 "MachineIndependent/glslang.y"
10810|  4.65k|                       {
10811|  4.65k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.65k|#define parseContext (*pParseContext)
  ------------------
10812|  4.65k|        (yyval.interm.type).basicType = EbtSampler;
10813|  4.65k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
10814|  4.65k|    }
10815|  4.65k|#line 10816 "MachineIndependent/glslang_tab.cpp"
10816|  4.65k|    break;
10817|       |
10818|  2.66k|  case 465: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10818:3): [True: 2.66k, False: 314M]
  ------------------
10819|  2.66k|#line 3166 "MachineIndependent/glslang.y"
10820|  2.66k|                          {
10821|  2.66k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  2.66k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  2.66k|#define parseContext (*pParseContext)
  ------------------
10822|  2.66k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.66k|#define parseContext (*pParseContext)
  ------------------
10823|  2.66k|        (yyval.interm.type).basicType = EbtSampler;
10824|  2.66k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
10825|  2.66k|    }
10826|  2.66k|#line 10827 "MachineIndependent/glslang_tab.cpp"
10827|  2.66k|    break;
10828|       |
10829|  4.65k|  case 466: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10829:3): [True: 4.65k, False: 314M]
  ------------------
10830|  4.65k|#line 3172 "MachineIndependent/glslang.y"
10831|  4.65k|                        {
10832|  4.65k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.65k|#define parseContext (*pParseContext)
  ------------------
10833|  4.65k|        (yyval.interm.type).basicType = EbtSampler;
10834|  4.65k|        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
10835|  4.65k|    }
10836|  4.65k|#line 10837 "MachineIndependent/glslang_tab.cpp"
10837|  4.65k|    break;
10838|       |
10839|  4.65k|  case 467: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10839:3): [True: 4.65k, False: 314M]
  ------------------
10840|  4.65k|#line 3177 "MachineIndependent/glslang.y"
10841|  4.65k|                        {
10842|  4.65k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  4.65k|#define parseContext (*pParseContext)
  ------------------
10843|  4.65k|        (yyval.interm.type).basicType = EbtSampler;
10844|  4.65k|        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
10845|  4.65k|    }
10846|  4.65k|#line 10847 "MachineIndependent/glslang_tab.cpp"
10847|  4.65k|    break;
10848|       |
10849|    212|  case 468: /* type_specifier_nonarray: TEXTURE1D  */
  ------------------
  |  Branch (10849:3): [True: 212, False: 314M]
  ------------------
10850|    212|#line 3182 "MachineIndependent/glslang.y"
10851|    212|                {
10852|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
10853|    212|        (yyval.interm.type).basicType = EbtSampler;
10854|    212|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
10855|    212|    }
10856|    212|#line 10857 "MachineIndependent/glslang_tab.cpp"
10857|    212|    break;
10858|       |
10859|    318|  case 469: /* type_specifier_nonarray: F16TEXTURE1D  */
  ------------------
  |  Branch (10859:3): [True: 318, False: 314M]
  ------------------
10860|    318|#line 3187 "MachineIndependent/glslang.y"
10861|    318|                   {
10862|    318|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10863|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10864|    318|        (yyval.interm.type).basicType = EbtSampler;
10865|    318|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
10866|    318|    }
10867|    318|#line 10868 "MachineIndependent/glslang_tab.cpp"
10868|    318|    break;
10869|       |
10870|    530|  case 470: /* type_specifier_nonarray: F16TEXTURE2D  */
  ------------------
  |  Branch (10870:3): [True: 530, False: 314M]
  ------------------
10871|    530|#line 3193 "MachineIndependent/glslang.y"
10872|    530|                   {
10873|    530|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
10874|    530|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
10875|    530|        (yyval.interm.type).basicType = EbtSampler;
10876|    530|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
10877|    530|    }
10878|    530|#line 10879 "MachineIndependent/glslang_tab.cpp"
10879|    530|    break;
10880|       |
10881|    530|  case 471: /* type_specifier_nonarray: F16TEXTURE3D  */
  ------------------
  |  Branch (10881:3): [True: 530, False: 314M]
  ------------------
10882|    530|#line 3199 "MachineIndependent/glslang.y"
10883|    530|                   {
10884|    530|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
10885|    530|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
10886|    530|        (yyval.interm.type).basicType = EbtSampler;
10887|    530|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
10888|    530|    }
10889|    530|#line 10890 "MachineIndependent/glslang_tab.cpp"
10890|    530|    break;
10891|       |
10892|    106|  case 472: /* type_specifier_nonarray: F16TEXTURECUBE  */
  ------------------
  |  Branch (10892:3): [True: 106, False: 314M]
  ------------------
10893|    106|#line 3205 "MachineIndependent/glslang.y"
10894|    106|                     {
10895|    106|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10896|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10897|    106|        (yyval.interm.type).basicType = EbtSampler;
10898|    106|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
10899|    106|    }
10900|    106|#line 10901 "MachineIndependent/glslang_tab.cpp"
10901|    106|    break;
10902|       |
10903|    212|  case 473: /* type_specifier_nonarray: TEXTURE1DARRAY  */
  ------------------
  |  Branch (10903:3): [True: 212, False: 314M]
  ------------------
10904|    212|#line 3211 "MachineIndependent/glslang.y"
10905|    212|                     {
10906|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
10907|    212|        (yyval.interm.type).basicType = EbtSampler;
10908|    212|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
10909|    212|    }
10910|    212|#line 10911 "MachineIndependent/glslang_tab.cpp"
10911|    212|    break;
10912|       |
10913|    318|  case 474: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
  ------------------
  |  Branch (10913:3): [True: 318, False: 314M]
  ------------------
10914|    318|#line 3216 "MachineIndependent/glslang.y"
10915|    318|                        {
10916|    318|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10917|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
10918|    318|        (yyval.interm.type).basicType = EbtSampler;
10919|    318|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
10920|    318|    }
10921|    318|#line 10922 "MachineIndependent/glslang_tab.cpp"
10922|    318|    break;
10923|       |
10924|    530|  case 475: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
  ------------------
  |  Branch (10924:3): [True: 530, False: 314M]
  ------------------
10925|    530|#line 3222 "MachineIndependent/glslang.y"
10926|    530|                        {
10927|    530|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
10928|    530|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    530|#define parseContext (*pParseContext)
  ------------------
10929|    530|        (yyval.interm.type).basicType = EbtSampler;
10930|    530|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
10931|    530|    }
10932|    530|#line 10933 "MachineIndependent/glslang_tab.cpp"
10933|    530|    break;
10934|       |
10935|    106|  case 476: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
  ------------------
  |  Branch (10935:3): [True: 106, False: 314M]
  ------------------
10936|    106|#line 3228 "MachineIndependent/glslang.y"
10937|    106|                          {
10938|    106|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10939|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
10940|    106|        (yyval.interm.type).basicType = EbtSampler;
10941|    106|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
10942|    106|    }
10943|    106|#line 10944 "MachineIndependent/glslang_tab.cpp"
10944|    106|    break;
10945|       |
10946|    212|  case 477: /* type_specifier_nonarray: ITEXTURE1D  */
  ------------------
  |  Branch (10946:3): [True: 212, False: 314M]
  ------------------
10947|    212|#line 3234 "MachineIndependent/glslang.y"
10948|    212|                 {
10949|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
10950|    212|        (yyval.interm.type).basicType = EbtSampler;
10951|    212|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
10952|    212|    }
10953|    212|#line 10954 "MachineIndependent/glslang_tab.cpp"
10954|    212|    break;
10955|       |
10956|    212|  case 478: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
  ------------------
  |  Branch (10956:3): [True: 212, False: 314M]
  ------------------
10957|    212|#line 3239 "MachineIndependent/glslang.y"
10958|    212|                      {
10959|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
10960|    212|        (yyval.interm.type).basicType = EbtSampler;
10961|    212|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
10962|    212|    }
10963|    212|#line 10964 "MachineIndependent/glslang_tab.cpp"
10964|    212|    break;
10965|       |
10966|    212|  case 479: /* type_specifier_nonarray: UTEXTURE1D  */
  ------------------
  |  Branch (10966:3): [True: 212, False: 314M]
  ------------------
10967|    212|#line 3244 "MachineIndependent/glslang.y"
10968|    212|                 {
10969|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
10970|    212|        (yyval.interm.type).basicType = EbtSampler;
10971|    212|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
10972|    212|    }
10973|    212|#line 10974 "MachineIndependent/glslang_tab.cpp"
10974|    212|    break;
10975|       |
10976|    212|  case 480: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
  ------------------
  |  Branch (10976:3): [True: 212, False: 314M]
  ------------------
10977|    212|#line 3249 "MachineIndependent/glslang.y"
10978|    212|                      {
10979|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
10980|    212|        (yyval.interm.type).basicType = EbtSampler;
10981|    212|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
10982|    212|    }
10983|    212|#line 10984 "MachineIndependent/glslang_tab.cpp"
10984|    212|    break;
10985|       |
10986|    265|  case 481: /* type_specifier_nonarray: TEXTURE2DRECT  */
  ------------------
  |  Branch (10986:3): [True: 265, False: 314M]
  ------------------
10987|    265|#line 3254 "MachineIndependent/glslang.y"
10988|    265|                    {
10989|    265|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    265|#define parseContext (*pParseContext)
  ------------------
10990|    265|        (yyval.interm.type).basicType = EbtSampler;
10991|    265|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
10992|    265|    }
10993|    265|#line 10994 "MachineIndependent/glslang_tab.cpp"
10994|    265|    break;
10995|       |
10996|    477|  case 482: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
  ------------------
  |  Branch (10996:3): [True: 477, False: 314M]
  ------------------
10997|    477|#line 3259 "MachineIndependent/glslang.y"
10998|    477|                       {
10999|    477|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    477|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    477|#define parseContext (*pParseContext)
  ------------------
11000|    477|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    477|#define parseContext (*pParseContext)
  ------------------
11001|    477|        (yyval.interm.type).basicType = EbtSampler;
11002|    477|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
11003|    477|    }
11004|    477|#line 11005 "MachineIndependent/glslang_tab.cpp"
11005|    477|    break;
11006|       |
11007|    265|  case 483: /* type_specifier_nonarray: ITEXTURE2DRECT  */
  ------------------
  |  Branch (11007:3): [True: 265, False: 314M]
  ------------------
11008|    265|#line 3265 "MachineIndependent/glslang.y"
11009|    265|                     {
11010|    265|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    265|#define parseContext (*pParseContext)
  ------------------
11011|    265|        (yyval.interm.type).basicType = EbtSampler;
11012|    265|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
11013|    265|    }
11014|    265|#line 11015 "MachineIndependent/glslang_tab.cpp"
11015|    265|    break;
11016|       |
11017|    265|  case 484: /* type_specifier_nonarray: UTEXTURE2DRECT  */
  ------------------
  |  Branch (11017:3): [True: 265, False: 314M]
  ------------------
11018|    265|#line 3270 "MachineIndependent/glslang.y"
11019|    265|                     {
11020|    265|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    265|#define parseContext (*pParseContext)
  ------------------
11021|    265|        (yyval.interm.type).basicType = EbtSampler;
11022|    265|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
11023|    265|    }
11024|    265|#line 11025 "MachineIndependent/glslang_tab.cpp"
11025|    265|    break;
11026|       |
11027|    106|  case 485: /* type_specifier_nonarray: TEXTUREBUFFER  */
  ------------------
  |  Branch (11027:3): [True: 106, False: 314M]
  ------------------
11028|    106|#line 3275 "MachineIndependent/glslang.y"
11029|    106|                    {
11030|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
11031|    106|        (yyval.interm.type).basicType = EbtSampler;
11032|    106|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
11033|    106|    }
11034|    106|#line 11035 "MachineIndependent/glslang_tab.cpp"
11035|    106|    break;
11036|       |
11037|    159|  case 486: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
  ------------------
  |  Branch (11037:3): [True: 159, False: 314M]
  ------------------
11038|    159|#line 3280 "MachineIndependent/glslang.y"
11039|    159|                       {
11040|    159|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    159|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    159|#define parseContext (*pParseContext)
  ------------------
11041|    159|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    159|#define parseContext (*pParseContext)
  ------------------
11042|    159|        (yyval.interm.type).basicType = EbtSampler;
11043|    159|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
11044|    159|    }
11045|    159|#line 11046 "MachineIndependent/glslang_tab.cpp"
11046|    159|    break;
11047|       |
11048|    106|  case 487: /* type_specifier_nonarray: ITEXTUREBUFFER  */
  ------------------
  |  Branch (11048:3): [True: 106, False: 314M]
  ------------------
11049|    106|#line 3286 "MachineIndependent/glslang.y"
11050|    106|                     {
11051|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
11052|    106|        (yyval.interm.type).basicType = EbtSampler;
11053|    106|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
11054|    106|    }
11055|    106|#line 11056 "MachineIndependent/glslang_tab.cpp"
11056|    106|    break;
11057|       |
11058|    106|  case 488: /* type_specifier_nonarray: UTEXTUREBUFFER  */
  ------------------
  |  Branch (11058:3): [True: 106, False: 314M]
  ------------------
11059|    106|#line 3291 "MachineIndependent/glslang.y"
11060|    106|                     {
11061|    106|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    106|#define parseContext (*pParseContext)
  ------------------
11062|    106|        (yyval.interm.type).basicType = EbtSampler;
11063|    106|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
11064|    106|    }
11065|    106|#line 11066 "MachineIndependent/glslang_tab.cpp"
11066|    106|    break;
11067|       |
11068|    212|  case 489: /* type_specifier_nonarray: TEXTURE2DMS  */
  ------------------
  |  Branch (11068:3): [True: 212, False: 314M]
  ------------------
11069|    212|#line 3296 "MachineIndependent/glslang.y"
11070|    212|                  {
11071|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
11072|    212|        (yyval.interm.type).basicType = EbtSampler;
11073|    212|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
11074|    212|    }
11075|    212|#line 11076 "MachineIndependent/glslang_tab.cpp"
11076|    212|    break;
11077|       |
11078|    318|  case 490: /* type_specifier_nonarray: F16TEXTURE2DMS  */
  ------------------
  |  Branch (11078:3): [True: 318, False: 314M]
  ------------------
11079|    318|#line 3301 "MachineIndependent/glslang.y"
11080|    318|                     {
11081|    318|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
11082|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
11083|    318|        (yyval.interm.type).basicType = EbtSampler;
11084|    318|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
11085|    318|    }
11086|    318|#line 11087 "MachineIndependent/glslang_tab.cpp"
11087|    318|    break;
11088|       |
11089|    212|  case 491: /* type_specifier_nonarray: ITEXTURE2DMS  */
  ------------------
  |  Branch (11089:3): [True: 212, False: 314M]
  ------------------
11090|    212|#line 3307 "MachineIndependent/glslang.y"
11091|    212|                   {
11092|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
11093|    212|        (yyval.interm.type).basicType = EbtSampler;
11094|    212|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
11095|    212|    }
11096|    212|#line 11097 "MachineIndependent/glslang_tab.cpp"
11097|    212|    break;
11098|       |
11099|    212|  case 492: /* type_specifier_nonarray: UTEXTURE2DMS  */
  ------------------
  |  Branch (11099:3): [True: 212, False: 314M]
  ------------------
11100|    212|#line 3312 "MachineIndependent/glslang.y"
11101|    212|                   {
11102|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
11103|    212|        (yyval.interm.type).basicType = EbtSampler;
11104|    212|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
11105|    212|    }
11106|    212|#line 11107 "MachineIndependent/glslang_tab.cpp"
11107|    212|    break;
11108|       |
11109|    212|  case 493: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
  ------------------
  |  Branch (11109:3): [True: 212, False: 314M]
  ------------------
11110|    212|#line 3317 "MachineIndependent/glslang.y"
11111|    212|                       {
11112|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
11113|    212|        (yyval.interm.type).basicType = EbtSampler;
11114|    212|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
11115|    212|    }
11116|    212|#line 11117 "MachineIndependent/glslang_tab.cpp"
11117|    212|    break;
11118|       |
11119|    318|  case 494: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
  ------------------
  |  Branch (11119:3): [True: 318, False: 314M]
  ------------------
11120|    318|#line 3322 "MachineIndependent/glslang.y"
11121|    318|                          {
11122|    318|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
11123|    318|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    318|#define parseContext (*pParseContext)
  ------------------
11124|    318|        (yyval.interm.type).basicType = EbtSampler;
11125|    318|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
11126|    318|    }
11127|    318|#line 11128 "MachineIndependent/glslang_tab.cpp"
11128|    318|    break;
11129|       |
11130|    212|  case 495: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
  ------------------
  |  Branch (11130:3): [True: 212, False: 314M]
  ------------------
11131|    212|#line 3328 "MachineIndependent/glslang.y"
11132|    212|                        {
11133|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
11134|    212|        (yyval.interm.type).basicType = EbtSampler;
11135|    212|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
11136|    212|    }
11137|    212|#line 11138 "MachineIndependent/glslang_tab.cpp"
11138|    212|    break;
11139|       |
11140|    212|  case 496: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
  ------------------
  |  Branch (11140:3): [True: 212, False: 314M]
  ------------------
11141|    212|#line 3333 "MachineIndependent/glslang.y"
11142|    212|                        {
11143|    212|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    212|#define parseContext (*pParseContext)
  ------------------
11144|    212|        (yyval.interm.type).basicType = EbtSampler;
11145|    212|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
11146|    212|    }
11147|    212|#line 11148 "MachineIndependent/glslang_tab.cpp"
11148|    212|    break;
11149|       |
11150|  10.2k|  case 497: /* type_specifier_nonarray: IMAGE1D  */
  ------------------
  |  Branch (11150:3): [True: 10.2k, False: 314M]
  ------------------
11151|  10.2k|#line 3338 "MachineIndependent/glslang.y"
11152|  10.2k|              {
11153|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11154|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11155|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
11156|  10.2k|    }
11157|  10.2k|#line 11158 "MachineIndependent/glslang_tab.cpp"
11158|  10.2k|    break;
11159|       |
11160|  10.2k|  case 498: /* type_specifier_nonarray: F16IMAGE1D  */
  ------------------
  |  Branch (11160:3): [True: 10.2k, False: 314M]
  ------------------
11161|  10.2k|#line 3343 "MachineIndependent/glslang.y"
11162|  10.2k|                 {
11163|  10.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11164|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11165|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11166|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
11167|  10.2k|    }
11168|  10.2k|#line 11169 "MachineIndependent/glslang_tab.cpp"
11169|  10.2k|    break;
11170|       |
11171|  10.3k|  case 499: /* type_specifier_nonarray: IIMAGE1D  */
  ------------------
  |  Branch (11171:3): [True: 10.3k, False: 314M]
  ------------------
11172|  10.3k|#line 3349 "MachineIndependent/glslang.y"
11173|  10.3k|               {
11174|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11175|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11176|  10.3k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
11177|  10.3k|    }
11178|  10.3k|#line 11179 "MachineIndependent/glslang_tab.cpp"
11179|  10.3k|    break;
11180|       |
11181|  10.3k|  case 500: /* type_specifier_nonarray: UIMAGE1D  */
  ------------------
  |  Branch (11181:3): [True: 10.3k, False: 314M]
  ------------------
11182|  10.3k|#line 3354 "MachineIndependent/glslang.y"
11183|  10.3k|               {
11184|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11185|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11186|  10.3k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
11187|  10.3k|    }
11188|  10.3k|#line 11189 "MachineIndependent/glslang_tab.cpp"
11189|  10.3k|    break;
11190|       |
11191|  15.0k|  case 501: /* type_specifier_nonarray: IMAGE2D  */
  ------------------
  |  Branch (11191:3): [True: 15.0k, False: 314M]
  ------------------
11192|  15.0k|#line 3359 "MachineIndependent/glslang.y"
11193|  15.0k|              {
11194|  15.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  15.0k|#define parseContext (*pParseContext)
  ------------------
11195|  15.0k|        (yyval.interm.type).basicType = EbtSampler;
11196|  15.0k|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
11197|  15.0k|    }
11198|  15.0k|#line 11199 "MachineIndependent/glslang_tab.cpp"
11199|  15.0k|    break;
11200|       |
11201|  11.1k|  case 502: /* type_specifier_nonarray: F16IMAGE2D  */
  ------------------
  |  Branch (11201:3): [True: 11.1k, False: 314M]
  ------------------
11202|  11.1k|#line 3364 "MachineIndependent/glslang.y"
11203|  11.1k|                 {
11204|  11.1k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11205|  11.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11206|  11.1k|        (yyval.interm.type).basicType = EbtSampler;
11207|  11.1k|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
11208|  11.1k|    }
11209|  11.1k|#line 11210 "MachineIndependent/glslang_tab.cpp"
11210|  11.1k|    break;
11211|       |
11212|  32.0k|  case 503: /* type_specifier_nonarray: IIMAGE2D  */
  ------------------
  |  Branch (11212:3): [True: 32.0k, False: 314M]
  ------------------
11213|  32.0k|#line 3370 "MachineIndependent/glslang.y"
11214|  32.0k|               {
11215|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11216|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11217|  32.0k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
11218|  32.0k|    }
11219|  32.0k|#line 11220 "MachineIndependent/glslang_tab.cpp"
11220|  32.0k|    break;
11221|       |
11222|  32.0k|  case 504: /* type_specifier_nonarray: UIMAGE2D  */
  ------------------
  |  Branch (11222:3): [True: 32.0k, False: 314M]
  ------------------
11223|  32.0k|#line 3375 "MachineIndependent/glslang.y"
11224|  32.0k|               {
11225|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11226|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11227|  32.0k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
11228|  32.0k|    }
11229|  32.0k|#line 11230 "MachineIndependent/glslang_tab.cpp"
11230|  32.0k|    break;
11231|       |
11232|  15.0k|  case 505: /* type_specifier_nonarray: IMAGE3D  */
  ------------------
  |  Branch (11232:3): [True: 15.0k, False: 314M]
  ------------------
11233|  15.0k|#line 3380 "MachineIndependent/glslang.y"
11234|  15.0k|              {
11235|  15.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  15.0k|#define parseContext (*pParseContext)
  ------------------
11236|  15.0k|        (yyval.interm.type).basicType = EbtSampler;
11237|  15.0k|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
11238|  15.0k|    }
11239|  15.0k|#line 11240 "MachineIndependent/glslang_tab.cpp"
11240|  15.0k|    break;
11241|       |
11242|  11.1k|  case 506: /* type_specifier_nonarray: F16IMAGE3D  */
  ------------------
  |  Branch (11242:3): [True: 11.1k, False: 314M]
  ------------------
11243|  11.1k|#line 3385 "MachineIndependent/glslang.y"
11244|  11.1k|                 {
11245|  11.1k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11246|  11.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11247|  11.1k|        (yyval.interm.type).basicType = EbtSampler;
11248|  11.1k|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
11249|  11.1k|    }
11250|  11.1k|#line 11251 "MachineIndependent/glslang_tab.cpp"
11251|  11.1k|    break;
11252|       |
11253|  32.0k|  case 507: /* type_specifier_nonarray: IIMAGE3D  */
  ------------------
  |  Branch (11253:3): [True: 32.0k, False: 314M]
  ------------------
11254|  32.0k|#line 3391 "MachineIndependent/glslang.y"
11255|  32.0k|               {
11256|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11257|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11258|  32.0k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
11259|  32.0k|    }
11260|  32.0k|#line 11261 "MachineIndependent/glslang_tab.cpp"
11261|  32.0k|    break;
11262|       |
11263|  32.0k|  case 508: /* type_specifier_nonarray: UIMAGE3D  */
  ------------------
  |  Branch (11263:3): [True: 32.0k, False: 314M]
  ------------------
11264|  32.0k|#line 3396 "MachineIndependent/glslang.y"
11265|  32.0k|               {
11266|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11267|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11268|  32.0k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
11269|  32.0k|    }
11270|  32.0k|#line 11271 "MachineIndependent/glslang_tab.cpp"
11271|  32.0k|    break;
11272|       |
11273|  9.81k|  case 509: /* type_specifier_nonarray: IMAGE2DRECT  */
  ------------------
  |  Branch (11273:3): [True: 9.81k, False: 314M]
  ------------------
11274|  9.81k|#line 3401 "MachineIndependent/glslang.y"
11275|  9.81k|                  {
11276|  9.81k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.81k|#define parseContext (*pParseContext)
  ------------------
11277|  9.81k|        (yyval.interm.type).basicType = EbtSampler;
11278|  9.81k|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
11279|  9.81k|    }
11280|  9.81k|#line 11281 "MachineIndependent/glslang_tab.cpp"
11281|  9.81k|    break;
11282|       |
11283|  9.76k|  case 510: /* type_specifier_nonarray: F16IMAGE2DRECT  */
  ------------------
  |  Branch (11283:3): [True: 9.76k, False: 314M]
  ------------------
11284|  9.76k|#line 3406 "MachineIndependent/glslang.y"
11285|  9.76k|                     {
11286|  9.76k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.76k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.76k|#define parseContext (*pParseContext)
  ------------------
11287|  9.76k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.76k|#define parseContext (*pParseContext)
  ------------------
11288|  9.76k|        (yyval.interm.type).basicType = EbtSampler;
11289|  9.76k|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
11290|  9.76k|    }
11291|  9.76k|#line 11292 "MachineIndependent/glslang_tab.cpp"
11292|  9.76k|    break;
11293|       |
11294|  9.93k|  case 511: /* type_specifier_nonarray: IIMAGE2DRECT  */
  ------------------
  |  Branch (11294:3): [True: 9.93k, False: 314M]
  ------------------
11295|  9.93k|#line 3412 "MachineIndependent/glslang.y"
11296|  9.93k|                   {
11297|  9.93k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.93k|#define parseContext (*pParseContext)
  ------------------
11298|  9.93k|        (yyval.interm.type).basicType = EbtSampler;
11299|  9.93k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
11300|  9.93k|    }
11301|  9.93k|#line 11302 "MachineIndependent/glslang_tab.cpp"
11302|  9.93k|    break;
11303|       |
11304|  9.93k|  case 512: /* type_specifier_nonarray: UIMAGE2DRECT  */
  ------------------
  |  Branch (11304:3): [True: 9.93k, False: 314M]
  ------------------
11305|  9.93k|#line 3417 "MachineIndependent/glslang.y"
11306|  9.93k|                   {
11307|  9.93k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.93k|#define parseContext (*pParseContext)
  ------------------
11308|  9.93k|        (yyval.interm.type).basicType = EbtSampler;
11309|  9.93k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
11310|  9.93k|    }
11311|  9.93k|#line 11312 "MachineIndependent/glslang_tab.cpp"
11312|  9.93k|    break;
11313|       |
11314|  15.0k|  case 513: /* type_specifier_nonarray: IMAGECUBE  */
  ------------------
  |  Branch (11314:3): [True: 15.0k, False: 314M]
  ------------------
11315|  15.0k|#line 3422 "MachineIndependent/glslang.y"
11316|  15.0k|                {
11317|  15.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  15.0k|#define parseContext (*pParseContext)
  ------------------
11318|  15.0k|        (yyval.interm.type).basicType = EbtSampler;
11319|  15.0k|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
11320|  15.0k|    }
11321|  15.0k|#line 11322 "MachineIndependent/glslang_tab.cpp"
11322|  15.0k|    break;
11323|       |
11324|  11.1k|  case 514: /* type_specifier_nonarray: F16IMAGECUBE  */
  ------------------
  |  Branch (11324:3): [True: 11.1k, False: 314M]
  ------------------
11325|  11.1k|#line 3427 "MachineIndependent/glslang.y"
11326|  11.1k|                   {
11327|  11.1k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11328|  11.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11329|  11.1k|        (yyval.interm.type).basicType = EbtSampler;
11330|  11.1k|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
11331|  11.1k|    }
11332|  11.1k|#line 11333 "MachineIndependent/glslang_tab.cpp"
11333|  11.1k|    break;
11334|       |
11335|  32.0k|  case 515: /* type_specifier_nonarray: IIMAGECUBE  */
  ------------------
  |  Branch (11335:3): [True: 32.0k, False: 314M]
  ------------------
11336|  32.0k|#line 3433 "MachineIndependent/glslang.y"
11337|  32.0k|                 {
11338|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11339|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11340|  32.0k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
11341|  32.0k|    }
11342|  32.0k|#line 11343 "MachineIndependent/glslang_tab.cpp"
11343|  32.0k|    break;
11344|       |
11345|  32.0k|  case 516: /* type_specifier_nonarray: UIMAGECUBE  */
  ------------------
  |  Branch (11345:3): [True: 32.0k, False: 314M]
  ------------------
11346|  32.0k|#line 3438 "MachineIndependent/glslang.y"
11347|  32.0k|                 {
11348|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11349|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11350|  32.0k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
11351|  32.0k|    }
11352|  32.0k|#line 11353 "MachineIndependent/glslang_tab.cpp"
11353|  32.0k|    break;
11354|       |
11355|  13.3k|  case 517: /* type_specifier_nonarray: IMAGEBUFFER  */
  ------------------
  |  Branch (11355:3): [True: 13.3k, False: 314M]
  ------------------
11356|  13.3k|#line 3443 "MachineIndependent/glslang.y"
11357|  13.3k|                  {
11358|  13.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  13.3k|#define parseContext (*pParseContext)
  ------------------
11359|  13.3k|        (yyval.interm.type).basicType = EbtSampler;
11360|  13.3k|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
11361|  13.3k|    }
11362|  13.3k|#line 11363 "MachineIndependent/glslang_tab.cpp"
11363|  13.3k|    break;
11364|       |
11365|  9.32k|  case 518: /* type_specifier_nonarray: F16IMAGEBUFFER  */
  ------------------
  |  Branch (11365:3): [True: 9.32k, False: 314M]
  ------------------
11366|  9.32k|#line 3448 "MachineIndependent/glslang.y"
11367|  9.32k|                     {
11368|  9.32k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.32k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.32k|#define parseContext (*pParseContext)
  ------------------
11369|  9.32k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.32k|#define parseContext (*pParseContext)
  ------------------
11370|  9.32k|        (yyval.interm.type).basicType = EbtSampler;
11371|  9.32k|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
11372|  9.32k|    }
11373|  9.32k|#line 11374 "MachineIndependent/glslang_tab.cpp"
11374|  9.32k|    break;
11375|       |
11376|  30.2k|  case 519: /* type_specifier_nonarray: IIMAGEBUFFER  */
  ------------------
  |  Branch (11376:3): [True: 30.2k, False: 314M]
  ------------------
11377|  30.2k|#line 3454 "MachineIndependent/glslang.y"
11378|  30.2k|                   {
11379|  30.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  30.2k|#define parseContext (*pParseContext)
  ------------------
11380|  30.2k|        (yyval.interm.type).basicType = EbtSampler;
11381|  30.2k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
11382|  30.2k|    }
11383|  30.2k|#line 11384 "MachineIndependent/glslang_tab.cpp"
11384|  30.2k|    break;
11385|       |
11386|  30.2k|  case 520: /* type_specifier_nonarray: UIMAGEBUFFER  */
  ------------------
  |  Branch (11386:3): [True: 30.2k, False: 314M]
  ------------------
11387|  30.2k|#line 3459 "MachineIndependent/glslang.y"
11388|  30.2k|                   {
11389|  30.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  30.2k|#define parseContext (*pParseContext)
  ------------------
11390|  30.2k|        (yyval.interm.type).basicType = EbtSampler;
11391|  30.2k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
11392|  30.2k|    }
11393|  30.2k|#line 11394 "MachineIndependent/glslang_tab.cpp"
11394|  30.2k|    break;
11395|       |
11396|  10.2k|  case 521: /* type_specifier_nonarray: IMAGE1DARRAY  */
  ------------------
  |  Branch (11396:3): [True: 10.2k, False: 314M]
  ------------------
11397|  10.2k|#line 3464 "MachineIndependent/glslang.y"
11398|  10.2k|                   {
11399|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11400|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11401|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
11402|  10.2k|    }
11403|  10.2k|#line 11404 "MachineIndependent/glslang_tab.cpp"
11404|  10.2k|    break;
11405|       |
11406|  10.2k|  case 522: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
  ------------------
  |  Branch (11406:3): [True: 10.2k, False: 314M]
  ------------------
11407|  10.2k|#line 3469 "MachineIndependent/glslang.y"
11408|  10.2k|                      {
11409|  10.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11410|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11411|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11412|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
11413|  10.2k|    }
11414|  10.2k|#line 11415 "MachineIndependent/glslang_tab.cpp"
11415|  10.2k|    break;
11416|       |
11417|  10.3k|  case 523: /* type_specifier_nonarray: IIMAGE1DARRAY  */
  ------------------
  |  Branch (11417:3): [True: 10.3k, False: 314M]
  ------------------
11418|  10.3k|#line 3475 "MachineIndependent/glslang.y"
11419|  10.3k|                    {
11420|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11421|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11422|  10.3k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
11423|  10.3k|    }
11424|  10.3k|#line 11425 "MachineIndependent/glslang_tab.cpp"
11425|  10.3k|    break;
11426|       |
11427|  10.3k|  case 524: /* type_specifier_nonarray: UIMAGE1DARRAY  */
  ------------------
  |  Branch (11427:3): [True: 10.3k, False: 314M]
  ------------------
11428|  10.3k|#line 3480 "MachineIndependent/glslang.y"
11429|  10.3k|                    {
11430|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11431|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11432|  10.3k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
11433|  10.3k|    }
11434|  10.3k|#line 11435 "MachineIndependent/glslang_tab.cpp"
11435|  10.3k|    break;
11436|       |
11437|  15.0k|  case 525: /* type_specifier_nonarray: IMAGE2DARRAY  */
  ------------------
  |  Branch (11437:3): [True: 15.0k, False: 314M]
  ------------------
11438|  15.0k|#line 3485 "MachineIndependent/glslang.y"
11439|  15.0k|                   {
11440|  15.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  15.0k|#define parseContext (*pParseContext)
  ------------------
11441|  15.0k|        (yyval.interm.type).basicType = EbtSampler;
11442|  15.0k|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
11443|  15.0k|    }
11444|  15.0k|#line 11445 "MachineIndependent/glslang_tab.cpp"
11445|  15.0k|    break;
11446|       |
11447|  11.1k|  case 526: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
  ------------------
  |  Branch (11447:3): [True: 11.1k, False: 314M]
  ------------------
11448|  11.1k|#line 3490 "MachineIndependent/glslang.y"
11449|  11.1k|                      {
11450|  11.1k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11451|  11.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11452|  11.1k|        (yyval.interm.type).basicType = EbtSampler;
11453|  11.1k|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
11454|  11.1k|    }
11455|  11.1k|#line 11456 "MachineIndependent/glslang_tab.cpp"
11456|  11.1k|    break;
11457|       |
11458|  32.0k|  case 527: /* type_specifier_nonarray: IIMAGE2DARRAY  */
  ------------------
  |  Branch (11458:3): [True: 32.0k, False: 314M]
  ------------------
11459|  32.0k|#line 3496 "MachineIndependent/glslang.y"
11460|  32.0k|                    {
11461|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11462|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11463|  32.0k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
11464|  32.0k|    }
11465|  32.0k|#line 11466 "MachineIndependent/glslang_tab.cpp"
11466|  32.0k|    break;
11467|       |
11468|  32.0k|  case 528: /* type_specifier_nonarray: UIMAGE2DARRAY  */
  ------------------
  |  Branch (11468:3): [True: 32.0k, False: 314M]
  ------------------
11469|  32.0k|#line 3501 "MachineIndependent/glslang.y"
11470|  32.0k|                    {
11471|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11472|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11473|  32.0k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
11474|  32.0k|    }
11475|  32.0k|#line 11476 "MachineIndependent/glslang_tab.cpp"
11476|  32.0k|    break;
11477|       |
11478|  15.0k|  case 529: /* type_specifier_nonarray: IMAGECUBEARRAY  */
  ------------------
  |  Branch (11478:3): [True: 15.0k, False: 314M]
  ------------------
11479|  15.0k|#line 3506 "MachineIndependent/glslang.y"
11480|  15.0k|                     {
11481|  15.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  15.0k|#define parseContext (*pParseContext)
  ------------------
11482|  15.0k|        (yyval.interm.type).basicType = EbtSampler;
11483|  15.0k|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
11484|  15.0k|    }
11485|  15.0k|#line 11486 "MachineIndependent/glslang_tab.cpp"
11486|  15.0k|    break;
11487|       |
11488|  11.1k|  case 530: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
  ------------------
  |  Branch (11488:3): [True: 11.1k, False: 314M]
  ------------------
11489|  11.1k|#line 3511 "MachineIndependent/glslang.y"
11490|  11.1k|                        {
11491|  11.1k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11492|  11.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
11493|  11.1k|        (yyval.interm.type).basicType = EbtSampler;
11494|  11.1k|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
11495|  11.1k|    }
11496|  11.1k|#line 11497 "MachineIndependent/glslang_tab.cpp"
11497|  11.1k|    break;
11498|       |
11499|  32.0k|  case 531: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
  ------------------
  |  Branch (11499:3): [True: 32.0k, False: 314M]
  ------------------
11500|  32.0k|#line 3517 "MachineIndependent/glslang.y"
11501|  32.0k|                      {
11502|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11503|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11504|  32.0k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
11505|  32.0k|    }
11506|  32.0k|#line 11507 "MachineIndependent/glslang_tab.cpp"
11507|  32.0k|    break;
11508|       |
11509|  32.0k|  case 532: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
  ------------------
  |  Branch (11509:3): [True: 32.0k, False: 314M]
  ------------------
11510|  32.0k|#line 3522 "MachineIndependent/glslang.y"
11511|  32.0k|                      {
11512|  32.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  32.0k|#define parseContext (*pParseContext)
  ------------------
11513|  32.0k|        (yyval.interm.type).basicType = EbtSampler;
11514|  32.0k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
11515|  32.0k|    }
11516|  32.0k|#line 11517 "MachineIndependent/glslang_tab.cpp"
11517|  32.0k|    break;
11518|       |
11519|  10.2k|  case 533: /* type_specifier_nonarray: IMAGE2DMS  */
  ------------------
  |  Branch (11519:3): [True: 10.2k, False: 314M]
  ------------------
11520|  10.2k|#line 3527 "MachineIndependent/glslang.y"
11521|  10.2k|                {
11522|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11523|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11524|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
11525|  10.2k|    }
11526|  10.2k|#line 11527 "MachineIndependent/glslang_tab.cpp"
11527|  10.2k|    break;
11528|       |
11529|  10.2k|  case 534: /* type_specifier_nonarray: F16IMAGE2DMS  */
  ------------------
  |  Branch (11529:3): [True: 10.2k, False: 314M]
  ------------------
11530|  10.2k|#line 3532 "MachineIndependent/glslang.y"
11531|  10.2k|                   {
11532|  10.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11533|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11534|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11535|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
11536|  10.2k|    }
11537|  10.2k|#line 11538 "MachineIndependent/glslang_tab.cpp"
11538|  10.2k|    break;
11539|       |
11540|  10.3k|  case 535: /* type_specifier_nonarray: IIMAGE2DMS  */
  ------------------
  |  Branch (11540:3): [True: 10.3k, False: 314M]
  ------------------
11541|  10.3k|#line 3538 "MachineIndependent/glslang.y"
11542|  10.3k|                 {
11543|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11544|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11545|  10.3k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
11546|  10.3k|    }
11547|  10.3k|#line 11548 "MachineIndependent/glslang_tab.cpp"
11548|  10.3k|    break;
11549|       |
11550|  10.3k|  case 536: /* type_specifier_nonarray: UIMAGE2DMS  */
  ------------------
  |  Branch (11550:3): [True: 10.3k, False: 314M]
  ------------------
11551|  10.3k|#line 3543 "MachineIndependent/glslang.y"
11552|  10.3k|                 {
11553|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11554|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11555|  10.3k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
11556|  10.3k|    }
11557|  10.3k|#line 11558 "MachineIndependent/glslang_tab.cpp"
11558|  10.3k|    break;
11559|       |
11560|  10.2k|  case 537: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
  ------------------
  |  Branch (11560:3): [True: 10.2k, False: 314M]
  ------------------
11561|  10.2k|#line 3548 "MachineIndependent/glslang.y"
11562|  10.2k|                     {
11563|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11564|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11565|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
11566|  10.2k|    }
11567|  10.2k|#line 11568 "MachineIndependent/glslang_tab.cpp"
11568|  10.2k|    break;
11569|       |
11570|  10.2k|  case 538: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
  ------------------
  |  Branch (11570:3): [True: 10.2k, False: 314M]
  ------------------
11571|  10.2k|#line 3553 "MachineIndependent/glslang.y"
11572|  10.2k|                        {
11573|  10.2k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11574|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11575|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11576|  10.2k|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
11577|  10.2k|    }
11578|  10.2k|#line 11579 "MachineIndependent/glslang_tab.cpp"
11579|  10.2k|    break;
11580|       |
11581|  10.3k|  case 539: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
  ------------------
  |  Branch (11581:3): [True: 10.3k, False: 314M]
  ------------------
11582|  10.3k|#line 3559 "MachineIndependent/glslang.y"
11583|  10.3k|                      {
11584|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11585|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11586|  10.3k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
11587|  10.3k|    }
11588|  10.3k|#line 11589 "MachineIndependent/glslang_tab.cpp"
11589|  10.3k|    break;
11590|       |
11591|  10.3k|  case 540: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
  ------------------
  |  Branch (11591:3): [True: 10.3k, False: 314M]
  ------------------
11592|  10.3k|#line 3564 "MachineIndependent/glslang.y"
11593|  10.3k|                      {
11594|  10.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.3k|#define parseContext (*pParseContext)
  ------------------
11595|  10.3k|        (yyval.interm.type).basicType = EbtSampler;
11596|  10.3k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
11597|  10.3k|    }
11598|  10.3k|#line 11599 "MachineIndependent/glslang_tab.cpp"
11599|  10.3k|    break;
11600|       |
11601|  10.2k|  case 541: /* type_specifier_nonarray: I64IMAGE1D  */
  ------------------
  |  Branch (11601:3): [True: 10.2k, False: 314M]
  ------------------
11602|  10.2k|#line 3569 "MachineIndependent/glslang.y"
11603|  10.2k|                 {
11604|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11605|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11606|  10.2k|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D);
11607|  10.2k|    }
11608|  10.2k|#line 11609 "MachineIndependent/glslang_tab.cpp"
11609|  10.2k|    break;
11610|       |
11611|  10.2k|  case 542: /* type_specifier_nonarray: U64IMAGE1D  */
  ------------------
  |  Branch (11611:3): [True: 10.2k, False: 314M]
  ------------------
11612|  10.2k|#line 3574 "MachineIndependent/glslang.y"
11613|  10.2k|                 {
11614|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11615|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11616|  10.2k|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D);
11617|  10.2k|    }
11618|  10.2k|#line 11619 "MachineIndependent/glslang_tab.cpp"
11619|  10.2k|    break;
11620|       |
11621|  31.9k|  case 543: /* type_specifier_nonarray: I64IMAGE2D  */
  ------------------
  |  Branch (11621:3): [True: 31.9k, False: 314M]
  ------------------
11622|  31.9k|#line 3579 "MachineIndependent/glslang.y"
11623|  31.9k|                 {
11624|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11625|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11626|  31.9k|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D);
11627|  31.9k|    }
11628|  31.9k|#line 11629 "MachineIndependent/glslang_tab.cpp"
11629|  31.9k|    break;
11630|       |
11631|  31.9k|  case 544: /* type_specifier_nonarray: U64IMAGE2D  */
  ------------------
  |  Branch (11631:3): [True: 31.9k, False: 314M]
  ------------------
11632|  31.9k|#line 3584 "MachineIndependent/glslang.y"
11633|  31.9k|                 {
11634|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11635|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11636|  31.9k|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D);
11637|  31.9k|    }
11638|  31.9k|#line 11639 "MachineIndependent/glslang_tab.cpp"
11639|  31.9k|    break;
11640|       |
11641|  31.9k|  case 545: /* type_specifier_nonarray: I64IMAGE3D  */
  ------------------
  |  Branch (11641:3): [True: 31.9k, False: 314M]
  ------------------
11642|  31.9k|#line 3589 "MachineIndependent/glslang.y"
11643|  31.9k|                 {
11644|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11645|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11646|  31.9k|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D);
11647|  31.9k|    }
11648|  31.9k|#line 11649 "MachineIndependent/glslang_tab.cpp"
11649|  31.9k|    break;
11650|       |
11651|  31.9k|  case 546: /* type_specifier_nonarray: U64IMAGE3D  */
  ------------------
  |  Branch (11651:3): [True: 31.9k, False: 314M]
  ------------------
11652|  31.9k|#line 3594 "MachineIndependent/glslang.y"
11653|  31.9k|                 {
11654|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11655|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11656|  31.9k|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D);
11657|  31.9k|    }
11658|  31.9k|#line 11659 "MachineIndependent/glslang_tab.cpp"
11659|  31.9k|    break;
11660|       |
11661|  9.85k|  case 547: /* type_specifier_nonarray: I64IMAGE2DRECT  */
  ------------------
  |  Branch (11661:3): [True: 9.85k, False: 314M]
  ------------------
11662|  9.85k|#line 3599 "MachineIndependent/glslang.y"
11663|  9.85k|                     {
11664|  9.85k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.85k|#define parseContext (*pParseContext)
  ------------------
11665|  9.85k|        (yyval.interm.type).basicType = EbtSampler;
11666|  9.85k|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect);
11667|  9.85k|    }
11668|  9.85k|#line 11669 "MachineIndependent/glslang_tab.cpp"
11669|  9.85k|    break;
11670|       |
11671|  9.85k|  case 548: /* type_specifier_nonarray: U64IMAGE2DRECT  */
  ------------------
  |  Branch (11671:3): [True: 9.85k, False: 314M]
  ------------------
11672|  9.85k|#line 3604 "MachineIndependent/glslang.y"
11673|  9.85k|                     {
11674|  9.85k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.85k|#define parseContext (*pParseContext)
  ------------------
11675|  9.85k|        (yyval.interm.type).basicType = EbtSampler;
11676|  9.85k|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect);
11677|  9.85k|    }
11678|  9.85k|#line 11679 "MachineIndependent/glslang_tab.cpp"
11679|  9.85k|    break;
11680|       |
11681|  31.9k|  case 549: /* type_specifier_nonarray: I64IMAGECUBE  */
  ------------------
  |  Branch (11681:3): [True: 31.9k, False: 314M]
  ------------------
11682|  31.9k|#line 3609 "MachineIndependent/glslang.y"
11683|  31.9k|                   {
11684|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11685|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11686|  31.9k|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube);
11687|  31.9k|    }
11688|  31.9k|#line 11689 "MachineIndependent/glslang_tab.cpp"
11689|  31.9k|    break;
11690|       |
11691|  31.9k|  case 550: /* type_specifier_nonarray: U64IMAGECUBE  */
  ------------------
  |  Branch (11691:3): [True: 31.9k, False: 314M]
  ------------------
11692|  31.9k|#line 3614 "MachineIndependent/glslang.y"
11693|  31.9k|                   {
11694|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11695|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11696|  31.9k|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube);
11697|  31.9k|    }
11698|  31.9k|#line 11699 "MachineIndependent/glslang_tab.cpp"
11699|  31.9k|    break;
11700|       |
11701|  30.1k|  case 551: /* type_specifier_nonarray: I64IMAGEBUFFER  */
  ------------------
  |  Branch (11701:3): [True: 30.1k, False: 314M]
  ------------------
11702|  30.1k|#line 3619 "MachineIndependent/glslang.y"
11703|  30.1k|                     {
11704|  30.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  30.1k|#define parseContext (*pParseContext)
  ------------------
11705|  30.1k|        (yyval.interm.type).basicType = EbtSampler;
11706|  30.1k|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer);
11707|  30.1k|    }
11708|  30.1k|#line 11709 "MachineIndependent/glslang_tab.cpp"
11709|  30.1k|    break;
11710|       |
11711|  30.1k|  case 552: /* type_specifier_nonarray: U64IMAGEBUFFER  */
  ------------------
  |  Branch (11711:3): [True: 30.1k, False: 314M]
  ------------------
11712|  30.1k|#line 3624 "MachineIndependent/glslang.y"
11713|  30.1k|                     {
11714|  30.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  30.1k|#define parseContext (*pParseContext)
  ------------------
11715|  30.1k|        (yyval.interm.type).basicType = EbtSampler;
11716|  30.1k|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer);
11717|  30.1k|    }
11718|  30.1k|#line 11719 "MachineIndependent/glslang_tab.cpp"
11719|  30.1k|    break;
11720|       |
11721|  10.2k|  case 553: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
  ------------------
  |  Branch (11721:3): [True: 10.2k, False: 314M]
  ------------------
11722|  10.2k|#line 3629 "MachineIndependent/glslang.y"
11723|  10.2k|                      {
11724|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11725|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11726|  10.2k|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true);
11727|  10.2k|    }
11728|  10.2k|#line 11729 "MachineIndependent/glslang_tab.cpp"
11729|  10.2k|    break;
11730|       |
11731|  10.2k|  case 554: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
  ------------------
  |  Branch (11731:3): [True: 10.2k, False: 314M]
  ------------------
11732|  10.2k|#line 3634 "MachineIndependent/glslang.y"
11733|  10.2k|                      {
11734|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  10.2k|#define parseContext (*pParseContext)
  ------------------
11735|  10.2k|        (yyval.interm.type).basicType = EbtSampler;
11736|  10.2k|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true);
11737|  10.2k|    }
11738|  10.2k|#line 11739 "MachineIndependent/glslang_tab.cpp"
11739|  10.2k|    break;
11740|       |
11741|  31.9k|  case 555: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
  ------------------
  |  Branch (11741:3): [True: 31.9k, False: 314M]
  ------------------
11742|  31.9k|#line 3639 "MachineIndependent/glslang.y"
11743|  31.9k|                      {
11744|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11745|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11746|  31.9k|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true);
11747|  31.9k|    }
11748|  31.9k|#line 11749 "MachineIndependent/glslang_tab.cpp"
11749|  31.9k|    break;
11750|       |
11751|  31.9k|  case 556: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
  ------------------
  |  Branch (11751:3): [True: 31.9k, False: 314M]
  ------------------
11752|  31.9k|#line 3644 "MachineIndependent/glslang.y"
11753|  31.9k|                      {
11754|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11755|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11756|  31.9k|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true);
11757|  31.9k|    }
11758|  31.9k|#line 11759 "MachineIndependent/glslang_tab.cpp"
11759|  31.9k|    break;
11760|       |
11761|  31.9k|  case 557: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
  ------------------
  |  Branch (11761:3): [True: 31.9k, False: 314M]
  ------------------
11762|  31.9k|#line 3649 "MachineIndependent/glslang.y"
11763|  31.9k|                        {
11764|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11765|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11766|  31.9k|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true);
11767|  31.9k|    }
11768|  31.9k|#line 11769 "MachineIndependent/glslang_tab.cpp"
11769|  31.9k|    break;
11770|       |
11771|  31.9k|  case 558: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
  ------------------
  |  Branch (11771:3): [True: 31.9k, False: 314M]
  ------------------
11772|  31.9k|#line 3654 "MachineIndependent/glslang.y"
11773|  31.9k|                        {
11774|  31.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.9k|#define parseContext (*pParseContext)
  ------------------
11775|  31.9k|        (yyval.interm.type).basicType = EbtSampler;
11776|  31.9k|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true);
11777|  31.9k|    }
11778|  31.9k|#line 11779 "MachineIndependent/glslang_tab.cpp"
11779|  31.9k|    break;
11780|       |
11781|  31.0k|  case 559: /* type_specifier_nonarray: I64IMAGE2DMS  */
  ------------------
  |  Branch (11781:3): [True: 31.0k, False: 314M]
  ------------------
11782|  31.0k|#line 3659 "MachineIndependent/glslang.y"
11783|  31.0k|                   {
11784|  31.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.0k|#define parseContext (*pParseContext)
  ------------------
11785|  31.0k|        (yyval.interm.type).basicType = EbtSampler;
11786|  31.0k|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true);
11787|  31.0k|    }
11788|  31.0k|#line 11789 "MachineIndependent/glslang_tab.cpp"
11789|  31.0k|    break;
11790|       |
11791|  31.0k|  case 560: /* type_specifier_nonarray: U64IMAGE2DMS  */
  ------------------
  |  Branch (11791:3): [True: 31.0k, False: 314M]
  ------------------
11792|  31.0k|#line 3664 "MachineIndependent/glslang.y"
11793|  31.0k|                   {
11794|  31.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.0k|#define parseContext (*pParseContext)
  ------------------
11795|  31.0k|        (yyval.interm.type).basicType = EbtSampler;
11796|  31.0k|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true);
11797|  31.0k|    }
11798|  31.0k|#line 11799 "MachineIndependent/glslang_tab.cpp"
11799|  31.0k|    break;
11800|       |
11801|  31.0k|  case 561: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
  ------------------
  |  Branch (11801:3): [True: 31.0k, False: 314M]
  ------------------
11802|  31.0k|#line 3669 "MachineIndependent/glslang.y"
11803|  31.0k|                        {
11804|  31.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.0k|#define parseContext (*pParseContext)
  ------------------
11805|  31.0k|        (yyval.interm.type).basicType = EbtSampler;
11806|  31.0k|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true);
11807|  31.0k|    }
11808|  31.0k|#line 11809 "MachineIndependent/glslang_tab.cpp"
11809|  31.0k|    break;
11810|       |
11811|  31.0k|  case 562: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
  ------------------
  |  Branch (11811:3): [True: 31.0k, False: 314M]
  ------------------
11812|  31.0k|#line 3674 "MachineIndependent/glslang.y"
11813|  31.0k|                        {
11814|  31.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  31.0k|#define parseContext (*pParseContext)
  ------------------
11815|  31.0k|        (yyval.interm.type).basicType = EbtSampler;
11816|  31.0k|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true);
11817|  31.0k|    }
11818|  31.0k|#line 11819 "MachineIndependent/glslang_tab.cpp"
11819|  31.0k|    break;
11820|       |
11821|    120|  case 563: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
  ------------------
  |  Branch (11821:3): [True: 120, False: 314M]
  ------------------
11822|    120|#line 3679 "MachineIndependent/glslang.y"
11823|    120|                         {  // GL_OES_EGL_image_external
11824|    120|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    120|#define parseContext (*pParseContext)
  ------------------
11825|    120|        (yyval.interm.type).basicType = EbtSampler;
11826|    120|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
11827|    120|        (yyval.interm.type).sampler.external = true;
11828|    120|    }
11829|    120|#line 11830 "MachineIndependent/glslang_tab.cpp"
11830|    120|    break;
11831|       |
11832|    320|  case 564: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
  ------------------
  |  Branch (11832:3): [True: 320, False: 314M]
  ------------------
11833|    320|#line 3685 "MachineIndependent/glslang.y"
11834|    320|                              { // GL_EXT_YUV_target
11835|    320|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    320|#define parseContext (*pParseContext)
  ------------------
11836|    320|        (yyval.interm.type).basicType = EbtSampler;
11837|    320|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
11838|    320|        (yyval.interm.type).sampler.yuv = true;
11839|    320|    }
11840|    320|#line 11841 "MachineIndependent/glslang_tab.cpp"
11841|    320|    break;
11842|       |
11843|      0|  case 565: /* type_specifier_nonarray: ATTACHMENTEXT  */
  ------------------
  |  Branch (11843:3): [True: 0, False: 314M]
  ------------------
11844|      0|#line 3691 "MachineIndependent/glslang.y"
11845|      0|                    {
11846|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11847|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11848|      0|        (yyval.interm.type).basicType = EbtSampler;
11849|      0|        (yyval.interm.type).sampler.setAttachmentEXT(EbtFloat);
11850|      0|    }
11851|      0|#line 11852 "MachineIndependent/glslang_tab.cpp"
11852|      0|    break;
11853|       |
11854|      0|  case 566: /* type_specifier_nonarray: IATTACHMENTEXT  */
  ------------------
  |  Branch (11854:3): [True: 0, False: 314M]
  ------------------
11855|      0|#line 3697 "MachineIndependent/glslang.y"
11856|      0|                     {
11857|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11858|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11859|      0|        (yyval.interm.type).basicType = EbtSampler;
11860|      0|        (yyval.interm.type).sampler.setAttachmentEXT(EbtInt);
11861|      0|    }
11862|      0|#line 11863 "MachineIndependent/glslang_tab.cpp"
11863|      0|    break;
11864|       |
11865|      0|  case 567: /* type_specifier_nonarray: UATTACHMENTEXT  */
  ------------------
  |  Branch (11865:3): [True: 0, False: 314M]
  ------------------
11866|      0|#line 3703 "MachineIndependent/glslang.y"
11867|      0|                     {
11868|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11869|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11870|      0|        (yyval.interm.type).basicType = EbtSampler;
11871|      0|        (yyval.interm.type).sampler.setAttachmentEXT(EbtUint);
11872|      0|    }
11873|      0|#line 11874 "MachineIndependent/glslang_tab.cpp"
11874|      0|    break;
11875|       |
11876|      0|  case 568: /* type_specifier_nonarray: SUBPASSINPUT  */
  ------------------
  |  Branch (11876:3): [True: 0, False: 314M]
  ------------------
11877|      0|#line 3709 "MachineIndependent/glslang.y"
11878|      0|                   {
11879|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11880|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11881|      0|        (yyval.interm.type).basicType = EbtSampler;
11882|      0|        (yyval.interm.type).sampler.setSubpass(EbtFloat);
11883|      0|    }
11884|      0|#line 11885 "MachineIndependent/glslang_tab.cpp"
11885|      0|    break;
11886|       |
11887|      0|  case 569: /* type_specifier_nonarray: SUBPASSINPUTMS  */
  ------------------
  |  Branch (11887:3): [True: 0, False: 314M]
  ------------------
11888|      0|#line 3715 "MachineIndependent/glslang.y"
11889|      0|                     {
11890|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11891|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11892|      0|        (yyval.interm.type).basicType = EbtSampler;
11893|      0|        (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
11894|      0|    }
11895|      0|#line 11896 "MachineIndependent/glslang_tab.cpp"
11896|      0|    break;
11897|       |
11898|      0|  case 570: /* type_specifier_nonarray: F16SUBPASSINPUT  */
  ------------------
  |  Branch (11898:3): [True: 0, False: 314M]
  ------------------
11899|      0|#line 3721 "MachineIndependent/glslang.y"
11900|      0|                      {
11901|      0|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11902|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11903|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11904|      0|        (yyval.interm.type).basicType = EbtSampler;
11905|      0|        (yyval.interm.type).sampler.setSubpass(EbtFloat16);
11906|      0|    }
11907|      0|#line 11908 "MachineIndependent/glslang_tab.cpp"
11908|      0|    break;
11909|       |
11910|      0|  case 571: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
  ------------------
  |  Branch (11910:3): [True: 0, False: 314M]
  ------------------
11911|      0|#line 3728 "MachineIndependent/glslang.y"
11912|      0|                        {
11913|      0|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11914|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11915|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11916|      0|        (yyval.interm.type).basicType = EbtSampler;
11917|      0|        (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
11918|      0|    }
11919|      0|#line 11920 "MachineIndependent/glslang_tab.cpp"
11920|      0|    break;
11921|       |
11922|      0|  case 572: /* type_specifier_nonarray: ISUBPASSINPUT  */
  ------------------
  |  Branch (11922:3): [True: 0, False: 314M]
  ------------------
11923|      0|#line 3735 "MachineIndependent/glslang.y"
11924|      0|                    {
11925|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11926|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11927|      0|        (yyval.interm.type).basicType = EbtSampler;
11928|      0|        (yyval.interm.type).sampler.setSubpass(EbtInt);
11929|      0|    }
11930|      0|#line 11931 "MachineIndependent/glslang_tab.cpp"
11931|      0|    break;
11932|       |
11933|      0|  case 573: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
  ------------------
  |  Branch (11933:3): [True: 0, False: 314M]
  ------------------
11934|      0|#line 3741 "MachineIndependent/glslang.y"
11935|      0|                      {
11936|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11937|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11938|      0|        (yyval.interm.type).basicType = EbtSampler;
11939|      0|        (yyval.interm.type).sampler.setSubpass(EbtInt, true);
11940|      0|    }
11941|      0|#line 11942 "MachineIndependent/glslang_tab.cpp"
11942|      0|    break;
11943|       |
11944|      0|  case 574: /* type_specifier_nonarray: USUBPASSINPUT  */
  ------------------
  |  Branch (11944:3): [True: 0, False: 314M]
  ------------------
11945|      0|#line 3747 "MachineIndependent/glslang.y"
11946|      0|                    {
11947|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11948|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11949|      0|        (yyval.interm.type).basicType = EbtSampler;
11950|      0|        (yyval.interm.type).sampler.setSubpass(EbtUint);
11951|      0|    }
11952|      0|#line 11953 "MachineIndependent/glslang_tab.cpp"
11953|      0|    break;
11954|       |
11955|      0|  case 575: /* type_specifier_nonarray: USUBPASSINPUTMS  */
  ------------------
  |  Branch (11955:3): [True: 0, False: 314M]
  ------------------
11956|      0|#line 3753 "MachineIndependent/glslang.y"
11957|      0|                      {
11958|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11959|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
11960|      0|        (yyval.interm.type).basicType = EbtSampler;
11961|      0|        (yyval.interm.type).sampler.setSubpass(EbtUint, true);
11962|      0|    }
11963|      0|#line 11964 "MachineIndependent/glslang_tab.cpp"
11964|      0|    break;
11965|       |
11966|  9.32k|  case 576: /* type_specifier_nonarray: FCOOPMATNV  */
  ------------------
  |  Branch (11966:3): [True: 9.32k, False: 314M]
  ------------------
11967|  9.32k|#line 3759 "MachineIndependent/glslang.y"
11968|  9.32k|                 {
11969|  9.32k|        parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.32k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  9.32k|#define parseContext (*pParseContext)
  ------------------
11970|  9.32k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  9.32k|#define parseContext (*pParseContext)
  ------------------
11971|  9.32k|        (yyval.interm.type).basicType = EbtFloat;
11972|  9.32k|        (yyval.interm.type).coopmatNV = true;
11973|  9.32k|        (yyval.interm.type).coopmatKHR = false;
11974|  9.32k|    }
11975|  9.32k|#line 11976 "MachineIndependent/glslang_tab.cpp"
11976|  9.32k|    break;
11977|       |
11978|  12.4k|  case 577: /* type_specifier_nonarray: ICOOPMATNV  */
  ------------------
  |  Branch (11978:3): [True: 12.4k, False: 314M]
  ------------------
11979|  12.4k|#line 3766 "MachineIndependent/glslang.y"
11980|  12.4k|                 {
11981|  12.4k|        parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.4k|#define parseContext (*pParseContext)
  ------------------
11982|  12.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  12.4k|#define parseContext (*pParseContext)
  ------------------
11983|  12.4k|        (yyval.interm.type).basicType = EbtInt;
11984|  12.4k|        (yyval.interm.type).coopmatNV = true;
11985|  12.4k|        (yyval.interm.type).coopmatKHR = false;
11986|  12.4k|    }
11987|  12.4k|#line 11988 "MachineIndependent/glslang_tab.cpp"
11988|  12.4k|    break;
11989|       |
11990|  12.4k|  case 578: /* type_specifier_nonarray: UCOOPMATNV  */
  ------------------
  |  Branch (11990:3): [True: 12.4k, False: 314M]
  ------------------
11991|  12.4k|#line 3773 "MachineIndependent/glslang.y"
11992|  12.4k|                 {
11993|  12.4k|        parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  12.4k|#define parseContext (*pParseContext)
  ------------------
11994|  12.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  12.4k|#define parseContext (*pParseContext)
  ------------------
11995|  12.4k|        (yyval.interm.type).basicType = EbtUint;
11996|  12.4k|        (yyval.interm.type).coopmatNV = true;
11997|  12.4k|        (yyval.interm.type).coopmatKHR = false;
11998|  12.4k|    }
11999|  12.4k|#line 12000 "MachineIndependent/glslang_tab.cpp"
12000|  12.4k|    break;
12001|       |
12002|  96.3k|  case 579: /* type_specifier_nonarray: COOPMAT  */
  ------------------
  |  Branch (12002:3): [True: 96.3k, False: 314M]
  ------------------
12003|  96.3k|#line 3780 "MachineIndependent/glslang.y"
12004|  96.3k|              {
12005|  96.3k|        parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  96.3k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  96.3k|#define parseContext (*pParseContext)
  ------------------
12006|  96.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  96.3k|#define parseContext (*pParseContext)
  ------------------
12007|  96.3k|        (yyval.interm.type).basicType = EbtCoopmat;
12008|  96.3k|        (yyval.interm.type).coopmatNV = false;
12009|  96.3k|        (yyval.interm.type).coopmatKHR = true;
12010|  96.3k|    }
12011|  96.3k|#line 12012 "MachineIndependent/glslang_tab.cpp"
12012|  96.3k|    break;
12013|       |
12014|  26.6k|  case 580: /* type_specifier_nonarray: TENSORLAYOUTNV  */
  ------------------
  |  Branch (12014:3): [True: 26.6k, False: 314M]
  ------------------
12015|  26.6k|#line 3787 "MachineIndependent/glslang.y"
12016|  26.6k|                     {
12017|  26.6k|        parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorLayoutNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorLayoutNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
12018|  26.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  26.6k|#define parseContext (*pParseContext)
  ------------------
12019|  26.6k|        (yyval.interm.type).basicType = EbtTensorLayoutNV;
12020|  26.6k|    }
12021|  26.6k|#line 12022 "MachineIndependent/glslang_tab.cpp"
12022|  26.6k|    break;
12023|       |
12024|  16.4k|  case 581: /* type_specifier_nonarray: TENSORVIEWNV  */
  ------------------
  |  Branch (12024:3): [True: 16.4k, False: 314M]
  ------------------
12025|  16.4k|#line 3792 "MachineIndependent/glslang.y"
12026|  16.4k|                   {
12027|  16.4k|        parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorViewNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  16.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorViewNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  16.4k|#define parseContext (*pParseContext)
  ------------------
12028|  16.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  16.4k|#define parseContext (*pParseContext)
  ------------------
12029|  16.4k|        (yyval.interm.type).basicType = EbtTensorViewNV;
12030|  16.4k|    }
12031|  16.4k|#line 12032 "MachineIndependent/glslang_tab.cpp"
12032|  16.4k|    break;
12033|       |
12034|  6.21k|  case 582: /* type_specifier_nonarray: FUNCTION  */
  ------------------
  |  Branch (12034:3): [True: 6.21k, False: 314M]
  ------------------
12035|  6.21k|#line 3797 "MachineIndependent/glslang.y"
12036|  6.21k|               {
12037|  6.21k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
12038|  6.21k|        (yyval.interm.type).basicType = EbtFunction;
12039|  6.21k|    }
12040|  6.21k|#line 12041 "MachineIndependent/glslang_tab.cpp"
12041|  6.21k|    break;
12042|       |
12043|   352k|  case 583: /* type_specifier_nonarray: COOPVECNV  */
  ------------------
  |  Branch (12043:3): [True: 352k, False: 314M]
  ------------------
12044|   352k|#line 3801 "MachineIndependent/glslang.y"
12045|   352k|                {
12046|   352k|        parseContext.coopvecCheck((yyvsp[0].lex).loc, "coopvecNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   352k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.coopvecCheck((yyvsp[0].lex).loc, "coopvecNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   352k|#define parseContext (*pParseContext)
  ------------------
12047|   352k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   352k|#define parseContext (*pParseContext)
  ------------------
12048|   352k|        (yyval.interm.type).basicType = EbtCoopvecNV;
12049|   352k|        (yyval.interm.type).coopvecNV = true;
12050|   352k|    }
12051|   352k|#line 12052 "MachineIndependent/glslang_tab.cpp"
12052|   352k|    break;
12053|       |
12054|  27.0k|  case 584: /* type_specifier_nonarray: TENSORARM  */
  ------------------
  |  Branch (12054:3): [True: 27.0k, False: 314M]
  ------------------
12055|  27.0k|#line 3807 "MachineIndependent/glslang.y"
12056|  27.0k|                {
12057|  27.0k|        parseContext.tensorCheckARM((yyvsp[0].lex).loc, "tensorARM", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  27.0k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.tensorCheckARM((yyvsp[0].lex).loc, "tensorARM", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|  27.0k|#define parseContext (*pParseContext)
  ------------------
12058|  27.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  27.0k|#define parseContext (*pParseContext)
  ------------------
12059|  27.0k|        (yyval.interm.type).tensorRankARM = 1; // placeholder value
12060|  27.0k|        (yyval.interm.type).basicType = EbtTensorARM;
12061|  27.0k|    }
12062|  27.0k|#line 12063 "MachineIndependent/glslang_tab.cpp"
12063|  27.0k|    break;
12064|       |
12065|   415k|  case 585: /* type_specifier_nonarray: VECTOR  */
  ------------------
  |  Branch (12065:3): [True: 415k, False: 314M]
  ------------------
12066|   415k|#line 3813 "MachineIndependent/glslang.y"
12067|   415k|             {
12068|   415k|        parseContext.longVectorCheck((yyvsp[0].lex).loc, "vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   415k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.longVectorCheck((yyvsp[0].lex).loc, "vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  783|   415k|#define parseContext (*pParseContext)
  ------------------
12069|   415k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|   415k|#define parseContext (*pParseContext)
  ------------------
12070|   415k|        (yyval.interm.type).basicType = EbtLongVector;
12071|   415k|        (yyval.interm.type).longVector = true;
12072|   415k|    }
12073|   415k|#line 12074 "MachineIndependent/glslang_tab.cpp"
12074|   415k|    break;
12075|       |
12076|      0|  case 586: /* type_specifier_nonarray: spirv_type_specifier  */
  ------------------
  |  Branch (12076:3): [True: 0, False: 314M]
  ------------------
12077|      0|#line 3819 "MachineIndependent/glslang.y"
12078|      0|                           {
12079|      0|        parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12080|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
12081|      0|    }
12082|      0|#line 12083 "MachineIndependent/glslang_tab.cpp"
12083|      0|    break;
12084|       |
12085|    113|  case 587: /* type_specifier_nonarray: HITOBJECTNV  */
  ------------------
  |  Branch (12085:3): [True: 113, False: 314M]
  ------------------
12086|    113|#line 3823 "MachineIndependent/glslang.y"
12087|    113|                  {
12088|    113|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    113|#define parseContext (*pParseContext)
  ------------------
12089|    113|       (yyval.interm.type).basicType = EbtHitObjectNV;
12090|    113|    }
12091|    113|#line 12092 "MachineIndependent/glslang_tab.cpp"
12092|    113|    break;
12093|       |
12094|    101|  case 588: /* type_specifier_nonarray: HITOBJECTEXT  */
  ------------------
  |  Branch (12094:3): [True: 101, False: 314M]
  ------------------
12095|    101|#line 3827 "MachineIndependent/glslang.y"
12096|    101|                   {
12097|    101|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|    101|#define parseContext (*pParseContext)
  ------------------
12098|    101|       (yyval.interm.type).basicType = EbtHitObjectEXT;
12099|    101|    }
12100|    101|#line 12101 "MachineIndependent/glslang_tab.cpp"
12101|    101|    break;
12102|       |
12103|    995|  case 589: /* type_specifier_nonarray: struct_specifier  */
  ------------------
  |  Branch (12103:3): [True: 995, False: 314M]
  ------------------
12104|    995|#line 3831 "MachineIndependent/glslang.y"
12105|    995|                       {
12106|    995|        (yyval.interm.type) = (yyvsp[0].interm.type);
12107|    995|        (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
  ------------------
  |  |  783|    995|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12107:49): [True: 995, False: 0]
  ------------------
12108|    995|        parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
  ------------------
  |  |  783|    995|#define parseContext (*pParseContext)
  ------------------
12109|    995|    }
12110|    995|#line 12111 "MachineIndependent/glslang_tab.cpp"
12111|    995|    break;
12112|       |
12113|  5.49k|  case 590: /* type_specifier_nonarray: TYPE_NAME  */
  ------------------
  |  Branch (12113:3): [True: 5.49k, False: 314M]
  ------------------
12114|  5.49k|#line 3836 "MachineIndependent/glslang.y"
12115|  5.49k|                {
12116|       |        //
12117|       |        // This is for user defined type names.  The lexical phase looked up the
12118|       |        // type.
12119|       |        //
12120|  5.49k|        if (const TVariable* variable = ((yyvsp[0].lex).symbol)->getAsVariable()) {
  ------------------
  |  Branch (12120:30): [True: 5.49k, False: 0]
  ------------------
12121|  5.49k|            const TType& structure = variable->getType();
12122|  5.49k|            (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  5.49k|#define parseContext (*pParseContext)
  ------------------
12123|  5.49k|            (yyval.interm.type).basicType = EbtStruct;
12124|  5.49k|            (yyval.interm.type).userDef = &structure;
12125|  5.49k|            if (structure.getQualifier().isBufferType())
  ------------------
  |  Branch (12125:17): [True: 0, False: 5.49k]
  ------------------
12126|      0|                (yyval.interm.type).qualifier = structure.getQualifier();
12127|  5.49k|        } else
12128|      0|            parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12129|  5.49k|    }
12130|  5.49k|#line 12131 "MachineIndependent/glslang_tab.cpp"
12131|  5.49k|    break;
12132|       |
12133|  2.20M|  case 591: /* precision_qualifier: HIGH_PRECISION  */
  ------------------
  |  Branch (12133:3): [True: 2.20M, False: 312M]
  ------------------
12134|  2.20M|#line 3854 "MachineIndependent/glslang.y"
12135|  2.20M|                     {
12136|  2.20M|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
  ------------------
  |  |  783|  2.20M|#define parseContext (*pParseContext)
  ------------------
12137|  2.20M|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  2.20M|#define parseContext (*pParseContext)
  ------------------
12138|  2.20M|        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
  ------------------
  |  |  783|  2.20M|#define parseContext (*pParseContext)
  ------------------
12139|  2.20M|    }
12140|  2.20M|#line 12141 "MachineIndependent/glslang_tab.cpp"
12141|  2.20M|    break;
12142|       |
12143|  29.5k|  case 592: /* precision_qualifier: MEDIUM_PRECISION  */
  ------------------
  |  Branch (12143:3): [True: 29.5k, False: 314M]
  ------------------
12144|  29.5k|#line 3859 "MachineIndependent/glslang.y"
12145|  29.5k|                       {
12146|  29.5k|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
  ------------------
  |  |  783|  29.5k|#define parseContext (*pParseContext)
  ------------------
12147|  29.5k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  29.5k|#define parseContext (*pParseContext)
  ------------------
12148|  29.5k|        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
  ------------------
  |  |  783|  29.5k|#define parseContext (*pParseContext)
  ------------------
12149|  29.5k|    }
12150|  29.5k|#line 12151 "MachineIndependent/glslang_tab.cpp"
12151|  29.5k|    break;
12152|       |
12153|  36.6k|  case 593: /* precision_qualifier: LOW_PRECISION  */
  ------------------
  |  Branch (12153:3): [True: 36.6k, False: 314M]
  ------------------
12154|  36.6k|#line 3864 "MachineIndependent/glslang.y"
12155|  36.6k|                    {
12156|  36.6k|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
  ------------------
  |  |  783|  36.6k|#define parseContext (*pParseContext)
  ------------------
12157|  36.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|  36.6k|#define parseContext (*pParseContext)
  ------------------
12158|  36.6k|        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
  ------------------
  |  |  783|  36.6k|#define parseContext (*pParseContext)
  ------------------
12159|  36.6k|    }
12160|  36.6k|#line 12161 "MachineIndependent/glslang_tab.cpp"
12161|  36.6k|    break;
12162|       |
12163|    995|  case 594: /* $@3: %empty  */
  ------------------
  |  Branch (12163:3): [True: 995, False: 314M]
  ------------------
12164|    995|#line 3872 "MachineIndependent/glslang.y"
12165|    995|                                   { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
  ------------------
  |  |  783|    995|#define parseContext (*pParseContext)
  ------------------
12166|    995|#line 12167 "MachineIndependent/glslang_tab.cpp"
12167|    995|    break;
12168|       |
12169|    995|  case 595: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
  ------------------
  |  Branch (12169:3): [True: 995, False: 314M]
  ------------------
12170|    995|#line 3872 "MachineIndependent/glslang.y"
12171|    995|                                                                                                                   {
12172|    995|        TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
12173|    995|        parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
  ------------------
  |  |  783|    995|#define parseContext (*pParseContext)
  ------------------
12174|       |
12175|    995|        TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true);
12176|    995|        if (! parseContext.symbolTable.insert(*userTypeDef))
  ------------------
  |  |  783|    995|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12176:13): [True: 0, False: 995]
  ------------------
12177|      0|            parseContext.error((yyvsp[-4].lex).loc, "redefinition", (yyvsp[-4].lex).string->c_str(), "struct");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12178|    995|        else if (parseContext.spvVersion.vulkanRelaxed
  ------------------
  |  |  783|    995|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12178:18): [True: 0, False: 995]
  ------------------
12179|      0|                 && structure->containsOpaque())
  ------------------
  |  Branch (12179:21): [True: 0, False: 0]
  ------------------
12180|      0|            parseContext.relaxedSymbols.push_back(structure->getTypeName());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12181|       |
12182|    995|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
12183|    995|        (yyval.interm.type).basicType = EbtStruct;
12184|    995|        (yyval.interm.type).userDef = structure;
12185|    995|        --parseContext.structNestingLevel;
  ------------------
  |  |  783|    995|#define parseContext (*pParseContext)
  ------------------
12186|    995|    }
12187|    995|#line 12188 "MachineIndependent/glslang_tab.cpp"
12188|    995|    break;
12189|       |
12190|      0|  case 596: /* $@4: %empty  */
  ------------------
  |  Branch (12190:3): [True: 0, False: 314M]
  ------------------
12191|      0|#line 3888 "MachineIndependent/glslang.y"
12192|      0|                        { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12193|      0|#line 12194 "MachineIndependent/glslang_tab.cpp"
12194|      0|    break;
12195|       |
12196|      0|  case 597: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
  ------------------
  |  Branch (12196:3): [True: 0, False: 314M]
  ------------------
12197|      0|#line 3888 "MachineIndependent/glslang.y"
12198|      0|                                                                                                        {
12199|      0|        TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
12200|      0|        (yyval.interm.type).init((yyvsp[-4].lex).loc);
12201|      0|        (yyval.interm.type).basicType = EbtStruct;
12202|      0|        (yyval.interm.type).userDef = structure;
12203|      0|        --parseContext.structNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12204|      0|    }
12205|      0|#line 12206 "MachineIndependent/glslang_tab.cpp"
12206|      0|    break;
12207|       |
12208|  7.53k|  case 598: /* struct_declaration_list: struct_declaration  */
  ------------------
  |  Branch (12208:3): [True: 7.53k, False: 314M]
  ------------------
12209|  7.53k|#line 3898 "MachineIndependent/glslang.y"
12210|  7.53k|                         {
12211|  7.53k|        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
12212|  7.53k|    }
12213|  7.53k|#line 12214 "MachineIndependent/glslang_tab.cpp"
12214|  7.53k|    break;
12215|       |
12216|  24.1k|  case 599: /* struct_declaration_list: struct_declaration_list struct_declaration  */
  ------------------
  |  Branch (12216:3): [True: 24.1k, False: 314M]
  ------------------
12217|  24.1k|#line 3901 "MachineIndependent/glslang.y"
12218|  24.1k|                                                 {
12219|  24.1k|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
12220|  48.3k|        for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (12220:34): [True: 24.1k, False: 24.1k]
  ------------------
12221|  90.0k|            for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
  ------------------
  |  Branch (12221:38): [True: 65.8k, False: 24.1k]
  ------------------
12222|  65.8k|                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
  ------------------
  |  Branch (12222:21): [True: 0, False: 65.8k]
  ------------------
12223|      0|                    parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12224|  65.8k|            }
12225|  24.1k|            (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
12226|  24.1k|        }
12227|  24.1k|    }
12228|  24.1k|#line 12229 "MachineIndependent/glslang_tab.cpp"
12229|  24.1k|    break;
12230|       |
12231|  31.7k|  case 600: /* struct_declaration: struct_declaration_no_inline_block  */
  ------------------
  |  Branch (12231:3): [True: 31.7k, False: 314M]
  ------------------
12232|  31.7k|#line 3914 "MachineIndependent/glslang.y"
12233|  31.7k|                                         {
12234|  31.7k|        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
12235|  31.7k|    }
12236|  31.7k|#line 12237 "MachineIndependent/glslang_tab.cpp"
12237|  31.7k|    break;
12238|       |
12239|      0|  case 601: /* struct_declaration: block_heap_inner_structure struct_declarator_list SEMICOLON  */
  ------------------
  |  Branch (12239:3): [True: 0, False: 314M]
  ------------------
12240|      0|#line 3917 "MachineIndependent/glslang.y"
12241|      0|                                                                  {
12242|      0|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
12243|      0|        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12244|      0|        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).hasTypeParameter());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12245|       |
12246|      0|        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (12246:34): [True: 0, False: 0]
  ------------------
12247|      0|            TType type((yyvsp[-2].interm.type));
12248|      0|            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
12249|      0|            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
12250|      0|            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
12251|      0|            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12252|      0|            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
12253|      0|        }
12254|      0|    }
12255|      0|#line 12256 "MachineIndependent/glslang_tab.cpp"
12256|      0|    break;
12257|       |
12258|      0|  case 602: /* $@5: %empty  */
  ------------------
  |  Branch (12258:3): [True: 0, False: 314M]
  ------------------
12259|      0|#line 3934 "MachineIndependent/glslang.y"
12260|      0|                                { parseContext.nestedBlockCheck((yyvsp[-1].interm.type).loc, true); }
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12261|      0|#line 12262 "MachineIndependent/glslang_tab.cpp"
12262|      0|    break;
12263|       |
12264|      0|  case 603: /* block_heap_inner_structure: type_qualifier LEFT_BRACE $@5 struct_declaration_no_inline_block_list RIGHT_BRACE  */
  ------------------
  |  Branch (12264:3): [True: 0, False: 314M]
  ------------------
12265|      0|#line 3934 "MachineIndependent/glslang.y"
12266|      0|                                                                                                                                     {
12267|      0|        --parseContext.blockNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12268|      0|        parseContext.globalQualifierFixCheck((yyvsp[-4].interm.type).loc, (yyvsp[-4].interm.type).qualifier);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12269|      0|        parseContext.checkNoShaderLayouts((yyvsp[-4].interm.type).loc, (yyvsp[-4].interm.type).shaderQualifiers);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12270|      0|        (yyval.interm.type).init((yyvsp[-4].interm.type).loc);
12271|      0|        TType* innerStructure = new TType((yyvsp[-1].interm.typeList), TString(""), (yyvsp[-4].interm.type).qualifier);
12272|      0|        if (! (yyvsp[-4].interm.type).qualifier.hasBufferReference())
  ------------------
  |  Branch (12272:13): [True: 0, False: 0]
  ------------------
12273|      0|            parseContext.error((yyvsp[-4].interm.type).loc, "only buffer_reference blocks can be declared inline inside a heap block", "", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12274|      0|        TType* referenceType = new TType(EbtReference, *innerStructure, TString(""));
12275|      0|        (yyval.interm.type).basicType = EbtReference;
12276|      0|        (yyval.interm.type).userDef = referenceType;
12277|      0|        (yyval.interm.type).qualifier.layoutDescriptorHeap = true;
12278|      0|    }
12279|      0|#line 12280 "MachineIndependent/glslang_tab.cpp"
12280|      0|    break;
12281|       |
12282|      0|  case 604: /* struct_declaration_no_inline_block_list: struct_declaration_no_inline_block  */
  ------------------
  |  Branch (12282:3): [True: 0, False: 314M]
  ------------------
12283|      0|#line 3950 "MachineIndependent/glslang.y"
12284|      0|                                         {
12285|      0|        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
12286|      0|    }
12287|      0|#line 12288 "MachineIndependent/glslang_tab.cpp"
12288|      0|    break;
12289|       |
12290|      0|  case 605: /* struct_declaration_no_inline_block_list: struct_declaration_no_inline_block_list struct_declaration_no_inline_block  */
  ------------------
  |  Branch (12290:3): [True: 0, False: 314M]
  ------------------
12291|      0|#line 3953 "MachineIndependent/glslang.y"
12292|      0|                                                                                 {
12293|      0|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
12294|      0|        for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (12294:34): [True: 0, False: 0]
  ------------------
12295|      0|            for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
  ------------------
  |  Branch (12295:38): [True: 0, False: 0]
  ------------------
12296|      0|                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
  ------------------
  |  Branch (12296:21): [True: 0, False: 0]
  ------------------
12297|      0|                    parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12298|      0|            }
12299|      0|            (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
12300|      0|        }
12301|      0|    }
12302|      0|#line 12303 "MachineIndependent/glslang_tab.cpp"
12303|      0|    break;
12304|       |
12305|  24.4k|  case 606: /* struct_declaration_no_inline_block: type_specifier struct_declarator_list SEMICOLON  */
  ------------------
  |  Branch (12305:3): [True: 24.4k, False: 314M]
  ------------------
12306|  24.4k|#line 3966 "MachineIndependent/glslang.y"
12307|  24.4k|                                                      {
12308|  24.4k|        if ((yyvsp[-2].interm.type).arraySizes) {
  ------------------
  |  Branch (12308:13): [True: 0, False: 24.4k]
  ------------------
12309|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12310|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12311|      0|            if (parseContext.isEsProfile())
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12311:17): [True: 0, False: 0]
  ------------------
12312|      0|                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12313|      0|        }
12314|       |
12315|  24.4k|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
12316|       |
12317|  24.4k|        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
  ------------------
  |  |  783|  24.4k|#define parseContext (*pParseContext)
  ------------------
12318|  24.4k|        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).hasTypeParameter());
  ------------------
  |  |  783|  24.4k|#define parseContext (*pParseContext)
  ------------------
12319|       |
12320|  48.8k|        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (12320:34): [True: 24.4k, False: 24.4k]
  ------------------
12321|  24.4k|            TType type((yyvsp[-2].interm.type));
12322|  24.4k|            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
12323|  24.4k|            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
12324|  24.4k|            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
12325|  24.4k|            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
  ------------------
  |  |  783|  24.4k|#define parseContext (*pParseContext)
  ------------------
12326|  24.4k|            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
12327|  24.4k|        }
12328|  24.4k|    }
12329|  24.4k|#line 12330 "MachineIndependent/glslang_tab.cpp"
12330|  24.4k|    break;
12331|       |
12332|  7.29k|  case 607: /* struct_declaration_no_inline_block: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
  ------------------
  |  Branch (12332:3): [True: 7.29k, False: 314M]
  ------------------
12333|  7.29k|#line 3988 "MachineIndependent/glslang.y"
12334|  7.29k|                                                                     {
12335|  7.29k|        if ((yyvsp[-2].interm.type).arraySizes) {
  ------------------
  |  Branch (12335:13): [True: 0, False: 7.29k]
  ------------------
12336|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12337|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12338|      0|            if (parseContext.isEsProfile())
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12338:17): [True: 0, False: 0]
  ------------------
12339|      0|                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12340|      0|        }
12341|       |
12342|  7.29k|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
12343|       |
12344|  7.29k|        parseContext.memberQualifierCheck((yyvsp[-3].interm.type));
  ------------------
  |  |  783|  7.29k|#define parseContext (*pParseContext)
  ------------------
12345|  7.29k|        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
  ------------------
  |  |  783|  7.29k|#define parseContext (*pParseContext)
  ------------------
12346|  7.29k|        parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true);
  ------------------
  |  |  783|  7.29k|#define parseContext (*pParseContext)
  ------------------
12347|  7.29k|        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).hasTypeParameter());
  ------------------
  |  |  783|  7.29k|#define parseContext (*pParseContext)
  ------------------
12348|       |
12349|  14.5k|        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (12349:34): [True: 7.29k, False: 7.29k]
  ------------------
12350|  7.29k|            TType type((yyvsp[-2].interm.type));
12351|  7.29k|            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
12352|  7.29k|            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
12353|  7.29k|            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
12354|  7.29k|            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
  ------------------
  |  |  783|  7.29k|#define parseContext (*pParseContext)
  ------------------
12355|  7.29k|            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
12356|  7.29k|        }
12357|  7.29k|    }
12358|  7.29k|#line 12359 "MachineIndependent/glslang_tab.cpp"
12359|  7.29k|    break;
12360|       |
12361|  31.7k|  case 608: /* struct_declarator_list: struct_declarator  */
  ------------------
  |  Branch (12361:3): [True: 31.7k, False: 314M]
  ------------------
12362|  31.7k|#line 4015 "MachineIndependent/glslang.y"
12363|  31.7k|                        {
12364|  31.7k|        (yyval.interm.typeList) = new TTypeList;
12365|  31.7k|        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
12366|  31.7k|    }
12367|  31.7k|#line 12368 "MachineIndependent/glslang_tab.cpp"
12368|  31.7k|    break;
12369|       |
12370|      0|  case 609: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
  ------------------
  |  Branch (12370:3): [True: 0, False: 314M]
  ------------------
12371|      0|#line 4019 "MachineIndependent/glslang.y"
12372|      0|                                                     {
12373|      0|        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
12374|      0|    }
12375|      0|#line 12376 "MachineIndependent/glslang_tab.cpp"
12376|      0|    break;
12377|       |
12378|  20.5k|  case 610: /* struct_declarator: IDENTIFIER  */
  ------------------
  |  Branch (12378:3): [True: 20.5k, False: 314M]
  ------------------
12379|  20.5k|#line 4025 "MachineIndependent/glslang.y"
12380|  20.5k|                 {
12381|  20.5k|        (yyval.interm.typeLine).type = new TType(EbtVoid);
12382|  20.5k|        (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
12383|  20.5k|        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
12384|  20.5k|    }
12385|  20.5k|#line 12386 "MachineIndependent/glslang_tab.cpp"
12386|  20.5k|    break;
12387|       |
12388|  11.1k|  case 611: /* struct_declarator: IDENTIFIER array_specifier  */
  ------------------
  |  Branch (12388:3): [True: 11.1k, False: 314M]
  ------------------
12389|  11.1k|#line 4030 "MachineIndependent/glslang.y"
12390|  11.1k|                                 {
12391|  11.1k|        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  783|  11.1k|#define parseContext (*pParseContext)
  ------------------
12392|       |
12393|  11.1k|        (yyval.interm.typeLine).type = new TType(EbtVoid);
12394|  11.1k|        (yyval.interm.typeLine).loc = (yyvsp[-1].lex).loc;
12395|  11.1k|        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
12396|  11.1k|        (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
12397|  11.1k|    }
12398|  11.1k|#line 12399 "MachineIndependent/glslang_tab.cpp"
12399|  11.1k|    break;
12400|       |
12401|   169k|  case 612: /* initializer: assignment_expression  */
  ------------------
  |  Branch (12401:3): [True: 169k, False: 314M]
  ------------------
12402|   169k|#line 4041 "MachineIndependent/glslang.y"
12403|   169k|                            {
12404|   169k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
12405|   169k|    }
12406|   169k|#line 12407 "MachineIndependent/glslang_tab.cpp"
12407|   169k|    break;
12408|       |
12409|      0|  case 613: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
  ------------------
  |  Branch (12409:3): [True: 0, False: 314M]
  ------------------
12410|      0|#line 4044 "MachineIndependent/glslang.y"
12411|      0|                                              {
12412|      0|        const char* initFeature = "{ } style initializers";
12413|      0|        parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12414|      0|        parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12415|      0|        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
12416|      0|    }
12417|      0|#line 12418 "MachineIndependent/glslang_tab.cpp"
12418|      0|    break;
12419|       |
12420|      0|  case 614: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
  ------------------
  |  Branch (12420:3): [True: 0, False: 314M]
  ------------------
12421|      0|#line 4050 "MachineIndependent/glslang.y"
12422|      0|                                                    {
12423|      0|        const char* initFeature = "{ } style initializers";
12424|      0|        parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12425|      0|        parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12426|      0|        (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
12427|      0|    }
12428|      0|#line 12429 "MachineIndependent/glslang_tab.cpp"
12429|      0|    break;
12430|       |
12431|      0|  case 615: /* initializer: LEFT_BRACE RIGHT_BRACE  */
  ------------------
  |  Branch (12431:3): [True: 0, False: 314M]
  ------------------
12432|      0|#line 4056 "MachineIndependent/glslang.y"
12433|      0|                             {
12434|      0|        const char* initFeature = "empty { } initializer";
12435|      0|        parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12436|      0|        parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12437|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12438|      0|    }
12439|      0|#line 12440 "MachineIndependent/glslang_tab.cpp"
12440|      0|    break;
12441|       |
12442|      0|  case 616: /* initializer_list: initializer  */
  ------------------
  |  Branch (12442:3): [True: 0, False: 314M]
  ------------------
12443|      0|#line 4065 "MachineIndependent/glslang.y"
12444|      0|                  {
12445|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12446|      0|    }
12447|      0|#line 12448 "MachineIndependent/glslang_tab.cpp"
12448|      0|    break;
12449|       |
12450|      0|  case 617: /* initializer_list: initializer_list COMMA initializer  */
  ------------------
  |  Branch (12450:3): [True: 0, False: 314M]
  ------------------
12451|      0|#line 4068 "MachineIndependent/glslang.y"
12452|      0|                                         {
12453|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12454|      0|    }
12455|      0|#line 12456 "MachineIndependent/glslang_tab.cpp"
12456|      0|    break;
12457|       |
12458|      0|  case 618: /* declaration_statement: declaration  */
  ------------------
  |  Branch (12458:3): [True: 0, False: 314M]
  ------------------
12459|      0|#line 4074 "MachineIndependent/glslang.y"
12460|      0|                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12461|      0|#line 12462 "MachineIndependent/glslang_tab.cpp"
12462|      0|    break;
12463|       |
12464|      0|  case 619: /* statement: compound_statement  */
  ------------------
  |  Branch (12464:3): [True: 0, False: 314M]
  ------------------
12465|      0|#line 4078 "MachineIndependent/glslang.y"
12466|      0|                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12467|      0|#line 12468 "MachineIndependent/glslang_tab.cpp"
12468|      0|    break;
12469|       |
12470|      0|  case 620: /* statement: simple_statement  */
  ------------------
  |  Branch (12470:3): [True: 0, False: 314M]
  ------------------
12471|      0|#line 4079 "MachineIndependent/glslang.y"
12472|      0|                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12473|      0|#line 12474 "MachineIndependent/glslang_tab.cpp"
12474|      0|    break;
12475|       |
12476|      0|  case 621: /* simple_statement: declaration_statement  */
  ------------------
  |  Branch (12476:3): [True: 0, False: 314M]
  ------------------
12477|      0|#line 4085 "MachineIndependent/glslang.y"
12478|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12479|      0|#line 12480 "MachineIndependent/glslang_tab.cpp"
12480|      0|    break;
12481|       |
12482|      0|  case 622: /* simple_statement: expression_statement  */
  ------------------
  |  Branch (12482:3): [True: 0, False: 314M]
  ------------------
12483|      0|#line 4086 "MachineIndependent/glslang.y"
12484|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12485|      0|#line 12486 "MachineIndependent/glslang_tab.cpp"
12486|      0|    break;
12487|       |
12488|      0|  case 623: /* simple_statement: selection_statement  */
  ------------------
  |  Branch (12488:3): [True: 0, False: 314M]
  ------------------
12489|      0|#line 4087 "MachineIndependent/glslang.y"
12490|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12491|      0|#line 12492 "MachineIndependent/glslang_tab.cpp"
12492|      0|    break;
12493|       |
12494|      0|  case 624: /* simple_statement: switch_statement  */
  ------------------
  |  Branch (12494:3): [True: 0, False: 314M]
  ------------------
12495|      0|#line 4088 "MachineIndependent/glslang.y"
12496|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12497|      0|#line 12498 "MachineIndependent/glslang_tab.cpp"
12498|      0|    break;
12499|       |
12500|      0|  case 625: /* simple_statement: case_label  */
  ------------------
  |  Branch (12500:3): [True: 0, False: 314M]
  ------------------
12501|      0|#line 4089 "MachineIndependent/glslang.y"
12502|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12503|      0|#line 12504 "MachineIndependent/glslang_tab.cpp"
12504|      0|    break;
12505|       |
12506|      0|  case 626: /* simple_statement: iteration_statement  */
  ------------------
  |  Branch (12506:3): [True: 0, False: 314M]
  ------------------
12507|      0|#line 4090 "MachineIndependent/glslang.y"
12508|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12509|      0|#line 12510 "MachineIndependent/glslang_tab.cpp"
12510|      0|    break;
12511|       |
12512|      0|  case 627: /* simple_statement: jump_statement  */
  ------------------
  |  Branch (12512:3): [True: 0, False: 314M]
  ------------------
12513|      0|#line 4091 "MachineIndependent/glslang.y"
12514|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12515|      0|#line 12516 "MachineIndependent/glslang_tab.cpp"
12516|      0|    break;
12517|       |
12518|      0|  case 628: /* simple_statement: demote_statement  */
  ------------------
  |  Branch (12518:3): [True: 0, False: 314M]
  ------------------
12519|      0|#line 4092 "MachineIndependent/glslang.y"
12520|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12521|      0|#line 12522 "MachineIndependent/glslang_tab.cpp"
12522|      0|    break;
12523|       |
12524|      0|  case 629: /* demote_statement: DEMOTE SEMICOLON  */
  ------------------
  |  Branch (12524:3): [True: 0, False: 314M]
  ------------------
12525|      0|#line 4096 "MachineIndependent/glslang.y"
12526|      0|                       {
12527|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12528|      0|        parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12529|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12530|      0|    }
12531|      0|#line 12532 "MachineIndependent/glslang_tab.cpp"
12532|      0|    break;
12533|       |
12534|      0|  case 630: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
  ------------------
  |  Branch (12534:3): [True: 0, False: 314M]
  ------------------
12535|      0|#line 4104 "MachineIndependent/glslang.y"
12536|      0|                             { (yyval.interm.intermNode) = 0; }
12537|      0|#line 12538 "MachineIndependent/glslang_tab.cpp"
12538|      0|    break;
12539|       |
12540|      0|  case 631: /* $@6: %empty  */
  ------------------
  |  Branch (12540:3): [True: 0, False: 314M]
  ------------------
12541|      0|#line 4105 "MachineIndependent/glslang.y"
12542|      0|                 {
12543|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12544|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12545|      0|    }
12546|      0|#line 12547 "MachineIndependent/glslang_tab.cpp"
12547|      0|    break;
12548|       |
12549|      0|  case 632: /* $@7: %empty  */
  ------------------
  |  Branch (12549:3): [True: 0, False: 314M]
  ------------------
12550|      0|#line 4109 "MachineIndependent/glslang.y"
12551|      0|                     {
12552|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12553|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12554|      0|    }
12555|      0|#line 12556 "MachineIndependent/glslang_tab.cpp"
12556|      0|    break;
12557|       |
12558|      0|  case 633: /* compound_statement: LEFT_BRACE $@6 statement_list $@7 RIGHT_BRACE  */
  ------------------
  |  Branch (12558:3): [True: 0, False: 314M]
  ------------------
12559|      0|#line 4113 "MachineIndependent/glslang.y"
12560|      0|                  {
12561|      0|        if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) {
  ------------------
  |  Branch (12561:13): [True: 0, False: 0]
  |  Branch (12561:46): [True: 0, False: 0]
  ------------------
12562|      0|            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12562:74): [True: 0, False: 0]
  ------------------
12563|      0|            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc);
12564|      0|        }
12565|      0|        (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
12566|      0|    }
12567|      0|#line 12568 "MachineIndependent/glslang_tab.cpp"
12568|      0|    break;
12569|       |
12570|      0|  case 634: /* statement_no_new_scope: compound_statement_no_new_scope  */
  ------------------
  |  Branch (12570:3): [True: 0, False: 314M]
  ------------------
12571|      0|#line 4123 "MachineIndependent/glslang.y"
12572|      0|                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12573|      0|#line 12574 "MachineIndependent/glslang_tab.cpp"
12574|      0|    break;
12575|       |
12576|      0|  case 635: /* statement_no_new_scope: simple_statement  */
  ------------------
  |  Branch (12576:3): [True: 0, False: 314M]
  ------------------
12577|      0|#line 4124 "MachineIndependent/glslang.y"
12578|      0|                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
12579|      0|#line 12580 "MachineIndependent/glslang_tab.cpp"
12580|      0|    break;
12581|       |
12582|      0|  case 636: /* $@8: %empty  */
  ------------------
  |  Branch (12582:3): [True: 0, False: 314M]
  ------------------
12583|      0|#line 4128 "MachineIndependent/glslang.y"
12584|      0|      {
12585|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12586|      0|    }
12587|      0|#line 12588 "MachineIndependent/glslang_tab.cpp"
12588|      0|    break;
12589|       |
12590|      0|  case 637: /* statement_scoped: $@8 compound_statement  */
  ------------------
  |  Branch (12590:3): [True: 0, False: 314M]
  ------------------
12591|      0|#line 4131 "MachineIndependent/glslang.y"
12592|      0|                          {
12593|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12594|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12595|      0|    }
12596|      0|#line 12597 "MachineIndependent/glslang_tab.cpp"
12597|      0|    break;
12598|       |
12599|      0|  case 638: /* $@9: %empty  */
  ------------------
  |  Branch (12599:3): [True: 0, False: 314M]
  ------------------
12600|      0|#line 4135 "MachineIndependent/glslang.y"
12601|      0|      {
12602|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12603|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12604|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12605|      0|    }
12606|      0|#line 12607 "MachineIndependent/glslang_tab.cpp"
12607|      0|    break;
12608|       |
12609|      0|  case 639: /* statement_scoped: $@9 simple_statement  */
  ------------------
  |  Branch (12609:3): [True: 0, False: 314M]
  ------------------
12610|      0|#line 4140 "MachineIndependent/glslang.y"
12611|      0|                       {
12612|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12613|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12614|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12615|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12616|      0|    }
12617|      0|#line 12618 "MachineIndependent/glslang_tab.cpp"
12618|      0|    break;
12619|       |
12620|      0|  case 640: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
  ------------------
  |  Branch (12620:3): [True: 0, False: 314M]
  ------------------
12621|      0|#line 4149 "MachineIndependent/glslang.y"
12622|      0|                             {
12623|      0|        (yyval.interm.intermNode) = 0;
12624|      0|    }
12625|      0|#line 12626 "MachineIndependent/glslang_tab.cpp"
12626|      0|    break;
12627|       |
12628|      0|  case 641: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
  ------------------
  |  Branch (12628:3): [True: 0, False: 314M]
  ------------------
12629|      0|#line 4152 "MachineIndependent/glslang.y"
12630|      0|                                            {
12631|      0|        if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) {
  ------------------
  |  Branch (12631:13): [True: 0, False: 0]
  |  Branch (12631:46): [True: 0, False: 0]
  ------------------
12632|      0|            (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
12633|      0|            (yyvsp[-1].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc);
12634|      0|        }
12635|      0|        (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
12636|      0|    }
12637|      0|#line 12638 "MachineIndependent/glslang_tab.cpp"
12638|      0|    break;
12639|       |
12640|      0|  case 642: /* statement_list: statement  */
  ------------------
  |  Branch (12640:3): [True: 0, False: 314M]
  ------------------
12641|      0|#line 4162 "MachineIndependent/glslang.y"
12642|      0|                {
12643|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12644|      0|        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
  ------------------
  |  Branch (12644:13): [True: 0, False: 0]
  |  Branch (12644:45): [True: 0, False: 0]
  |  Branch (12644:97): [True: 0, False: 0]
  ------------------
12645|      0|                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
  ------------------
  |  Branch (12645:45): [True: 0, False: 0]
  ------------------
12646|      0|            parseContext.wrapupSwitchSubsequence(0, (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12647|      0|            (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
12648|      0|        }
12649|      0|    }
12650|      0|#line 12651 "MachineIndependent/glslang_tab.cpp"
12651|      0|    break;
12652|       |
12653|      0|  case 643: /* statement_list: statement_list statement  */
  ------------------
  |  Branch (12653:3): [True: 0, False: 314M]
  ------------------
12654|      0|#line 4170 "MachineIndependent/glslang.y"
12655|      0|                               {
12656|      0|        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
  ------------------
  |  Branch (12656:13): [True: 0, False: 0]
  |  Branch (12656:45): [True: 0, False: 0]
  |  Branch (12656:97): [True: 0, False: 0]
  ------------------
12657|      0|                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
  ------------------
  |  Branch (12657:45): [True: 0, False: 0]
  ------------------
12658|      0|            parseContext.wrapupSwitchSubsequence((yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0, (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12658:50): [True: 0, False: 0]
  ------------------
12659|      0|            (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
12660|      0|        } else
12661|      0|            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12662|      0|    }
12663|      0|#line 12664 "MachineIndependent/glslang_tab.cpp"
12664|      0|    break;
12665|       |
12666|      0|  case 644: /* expression_statement: SEMICOLON  */
  ------------------
  |  Branch (12666:3): [True: 0, False: 314M]
  ------------------
12667|      0|#line 4181 "MachineIndependent/glslang.y"
12668|      0|                 { (yyval.interm.intermNode) = 0; }
12669|      0|#line 12670 "MachineIndependent/glslang_tab.cpp"
12670|      0|    break;
12671|       |
12672|      0|  case 645: /* expression_statement: expression SEMICOLON  */
  ------------------
  |  Branch (12672:3): [True: 0, False: 314M]
  ------------------
12673|      0|#line 4182 "MachineIndependent/glslang.y"
12674|      0|                            { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
12675|      0|#line 12676 "MachineIndependent/glslang_tab.cpp"
12676|      0|    break;
12677|       |
12678|      0|  case 646: /* selection_statement: selection_statement_nonattributed  */
  ------------------
  |  Branch (12678:3): [True: 0, False: 314M]
  ------------------
12679|      0|#line 4186 "MachineIndependent/glslang.y"
12680|      0|                                        {
12681|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12682|      0|    }
12683|      0|#line 12684 "MachineIndependent/glslang_tab.cpp"
12684|      0|    break;
12685|       |
12686|      0|  case 647: /* selection_statement: attribute selection_statement_nonattributed  */
  ------------------
  |  Branch (12686:3): [True: 0, False: 314M]
  ------------------
12687|      0|#line 4189 "MachineIndependent/glslang.y"
12688|      0|                                                  {
12689|      0|        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12690|      0|        parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12691|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12692|      0|    }
12693|      0|#line 12694 "MachineIndependent/glslang_tab.cpp"
12694|      0|    break;
12695|       |
12696|      0|  case 648: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
  ------------------
  |  Branch (12696:3): [True: 0, False: 314M]
  ------------------
12697|      0|#line 4196 "MachineIndependent/glslang.y"
12698|      0|                                                                    {
12699|      0|        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12700|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12701|      0|    }
12702|      0|#line 12703 "MachineIndependent/glslang_tab.cpp"
12703|      0|    break;
12704|       |
12705|      0|  case 649: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
  ------------------
  |  Branch (12705:3): [True: 0, False: 314M]
  ------------------
12706|      0|#line 4203 "MachineIndependent/glslang.y"
12707|      0|                                             {
12708|      0|        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
12709|      0|        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
12710|      0|    }
12711|      0|#line 12712 "MachineIndependent/glslang_tab.cpp"
12712|      0|    break;
12713|       |
12714|      0|  case 650: /* selection_rest_statement: statement_scoped  */
  ------------------
  |  Branch (12714:3): [True: 0, False: 314M]
  ------------------
12715|      0|#line 4207 "MachineIndependent/glslang.y"
12716|      0|                       {
12717|      0|        (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
12718|      0|        (yyval.interm.nodePair).node2 = 0;
12719|      0|    }
12720|      0|#line 12721 "MachineIndependent/glslang_tab.cpp"
12721|      0|    break;
12722|       |
12723|      0|  case 651: /* condition: expression  */
  ------------------
  |  Branch (12723:3): [True: 0, False: 314M]
  ------------------
12724|      0|#line 4215 "MachineIndependent/glslang.y"
12725|      0|                 {
12726|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
12727|      0|        parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12728|      0|    }
12729|      0|#line 12730 "MachineIndependent/glslang_tab.cpp"
12730|      0|    break;
12731|       |
12732|      0|  case 652: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (12732:3): [True: 0, False: 314M]
  ------------------
12733|      0|#line 4219 "MachineIndependent/glslang.y"
12734|      0|                                                        {
12735|      0|        parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12736|       |
12737|      0|        TType type((yyvsp[-3].interm.type));
12738|      0|        (yyval.interm.intermNode) = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12739|      0|    }
12740|      0|#line 12741 "MachineIndependent/glslang_tab.cpp"
12741|      0|    break;
12742|       |
12743|      0|  case 653: /* switch_statement: switch_statement_nonattributed  */
  ------------------
  |  Branch (12743:3): [True: 0, False: 314M]
  ------------------
12744|      0|#line 4228 "MachineIndependent/glslang.y"
12745|      0|                                     {
12746|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12747|      0|    }
12748|      0|#line 12749 "MachineIndependent/glslang_tab.cpp"
12749|      0|    break;
12750|       |
12751|      0|  case 654: /* switch_statement: attribute switch_statement_nonattributed  */
  ------------------
  |  Branch (12751:3): [True: 0, False: 314M]
  ------------------
12752|      0|#line 4231 "MachineIndependent/glslang.y"
12753|      0|                                               {
12754|      0|        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12755|      0|        parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12756|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12757|      0|    }
12758|      0|#line 12759 "MachineIndependent/glslang_tab.cpp"
12759|      0|    break;
12760|       |
12761|      0|  case 655: /* $@10: %empty  */
  ------------------
  |  Branch (12761:3): [True: 0, False: 314M]
  ------------------
12762|      0|#line 4238 "MachineIndependent/glslang.y"
12763|      0|                                               {
12764|       |        // start new switch sequence on the switch stack
12765|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12766|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12767|      0|        parseContext.switchSequenceStack.push_back(new TIntermSequence);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12768|      0|        parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12769|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12770|      0|    }
12771|      0|#line 12772 "MachineIndependent/glslang_tab.cpp"
12772|      0|    break;
12773|       |
12774|      0|  case 656: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@10 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
  ------------------
  |  Branch (12774:3): [True: 0, False: 314M]
  ------------------
12775|      0|#line 4246 "MachineIndependent/glslang.y"
12776|      0|                                                 {
12777|      0|        (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12777:117): [True: 0, False: 0]
  ------------------
12778|      0|        delete parseContext.switchSequenceStack.back();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12779|      0|        parseContext.switchSequenceStack.pop_back();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12780|      0|        parseContext.switchLevel.pop_back();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12781|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12782|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12783|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12784|      0|    }
12785|      0|#line 12786 "MachineIndependent/glslang_tab.cpp"
12786|      0|    break;
12787|       |
12788|      0|  case 657: /* switch_statement_list: %empty  */
  ------------------
  |  Branch (12788:3): [True: 0, False: 314M]
  ------------------
12789|      0|#line 4258 "MachineIndependent/glslang.y"
12790|      0|                    {
12791|      0|        (yyval.interm.intermNode) = 0;
12792|      0|    }
12793|      0|#line 12794 "MachineIndependent/glslang_tab.cpp"
12794|      0|    break;
12795|       |
12796|      0|  case 658: /* switch_statement_list: statement_list  */
  ------------------
  |  Branch (12796:3): [True: 0, False: 314M]
  ------------------
12797|      0|#line 4261 "MachineIndependent/glslang.y"
12798|      0|                     {
12799|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12800|      0|    }
12801|      0|#line 12802 "MachineIndependent/glslang_tab.cpp"
12802|      0|    break;
12803|       |
12804|      0|  case 659: /* case_label: CASE expression COLON  */
  ------------------
  |  Branch (12804:3): [True: 0, False: 314M]
  ------------------
12805|      0|#line 4267 "MachineIndependent/glslang.y"
12806|      0|                            {
12807|      0|        (yyval.interm.intermNode) = 0;
12808|      0|        if (parseContext.switchLevel.size() == 0)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12808:13): [True: 0, False: 0]
  ------------------
12809|      0|            parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12810|      0|        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12810:18): [True: 0, False: 0]
  ------------------
12811|      0|            parseContext.error((yyvsp[-2].lex).loc, "cannot be nested inside control flow", "case", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12812|      0|        else {
12813|      0|            parseContext.constantValueCheck((yyvsp[-1].interm.intermTypedNode), "case");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12814|      0|            parseContext.integerCheck((yyvsp[-1].interm.intermTypedNode), "case");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12815|      0|            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12816|      0|        }
12817|      0|    }
12818|      0|#line 12819 "MachineIndependent/glslang_tab.cpp"
12819|      0|    break;
12820|       |
12821|      0|  case 660: /* case_label: DEFAULT COLON  */
  ------------------
  |  Branch (12821:3): [True: 0, False: 314M]
  ------------------
12822|      0|#line 4279 "MachineIndependent/glslang.y"
12823|      0|                    {
12824|      0|        (yyval.interm.intermNode) = 0;
12825|      0|        if (parseContext.switchLevel.size() == 0)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12825:13): [True: 0, False: 0]
  ------------------
12826|      0|            parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12827|      0|        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12827:18): [True: 0, False: 0]
  ------------------
12828|      0|            parseContext.error((yyvsp[-1].lex).loc, "cannot be nested inside control flow", "default", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12829|      0|        else
12830|      0|            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12831|      0|    }
12832|      0|#line 12833 "MachineIndependent/glslang_tab.cpp"
12833|      0|    break;
12834|       |
12835|      0|  case 661: /* iteration_statement: iteration_statement_nonattributed  */
  ------------------
  |  Branch (12835:3): [True: 0, False: 314M]
  ------------------
12836|      0|#line 4291 "MachineIndependent/glslang.y"
12837|      0|                                        {
12838|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12839|      0|    }
12840|      0|#line 12841 "MachineIndependent/glslang_tab.cpp"
12841|      0|    break;
12842|       |
12843|      0|  case 662: /* iteration_statement: attribute iteration_statement_nonattributed  */
  ------------------
  |  Branch (12843:3): [True: 0, False: 314M]
  ------------------
12844|      0|#line 4294 "MachineIndependent/glslang.y"
12845|      0|                                                  {
12846|      0|        const char * extensions[3] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2, E_GL_QCOM_multiple_wait_queues };
12847|      0|        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 3, extensions, "attribute");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12848|      0|        parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12849|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12850|      0|    }
12851|      0|#line 12852 "MachineIndependent/glslang_tab.cpp"
12852|      0|    break;
12853|       |
12854|      0|  case 663: /* $@11: %empty  */
  ------------------
  |  Branch (12854:3): [True: 0, False: 314M]
  ------------------
12855|      0|#line 4302 "MachineIndependent/glslang.y"
12856|      0|                       {
12857|      0|        if (! parseContext.limits.whileLoops)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12857:13): [True: 0, False: 0]
  ------------------
12858|      0|            parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12859|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12860|      0|        ++parseContext.loopNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12861|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12862|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12863|      0|    }
12864|      0|#line 12865 "MachineIndependent/glslang_tab.cpp"
12865|      0|    break;
12866|       |
12867|      0|  case 664: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@11 condition RIGHT_PAREN statement_no_new_scope  */
  ------------------
  |  Branch (12867:3): [True: 0, False: 314M]
  ------------------
12868|      0|#line 4310 "MachineIndependent/glslang.y"
12869|      0|                                                   {
12870|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12871|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermNode), 0, true, (yyvsp[-5].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12872|      0|        if (parseContext.intermediate.getDebugInfo()) {
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12872:13): [True: 0, False: 0]
  ------------------
12873|      0|            (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyval.interm.intermNode), (yyvsp[-5].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12874|      0|            (yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpScope);
12875|      0|        }
12876|      0|        --parseContext.loopNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12877|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12878|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12879|      0|    }
12880|      0|#line 12881 "MachineIndependent/glslang_tab.cpp"
12881|      0|    break;
12882|       |
12883|      0|  case 665: /* $@12: %empty  */
  ------------------
  |  Branch (12883:3): [True: 0, False: 314M]
  ------------------
12884|      0|#line 4321 "MachineIndependent/glslang.y"
12885|      0|         {
12886|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12887|      0|        ++parseContext.loopNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12888|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12889|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12890|      0|    }
12891|      0|#line 12892 "MachineIndependent/glslang_tab.cpp"
12892|      0|    break;
12893|       |
12894|      0|  case 666: /* iteration_statement_nonattributed: DO $@12 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
  ------------------
  |  Branch (12894:3): [True: 0, False: 314M]
  ------------------
12895|      0|#line 4327 "MachineIndependent/glslang.y"
12896|      0|                                                                  {
12897|      0|        if (! parseContext.limits.whileLoops)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12897:13): [True: 0, False: 0]
  ------------------
12898|      0|            parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12899|       |
12900|      0|        parseContext.boolCheck((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12901|       |
12902|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[-5].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, false, (yyvsp[-4].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12903|      0|        if (parseContext.intermediate.getDebugInfo()) {
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12903:13): [True: 0, False: 0]
  ------------------
12904|      0|            (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyval.interm.intermNode), (yyvsp[-4].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12905|      0|            (yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpScope);
12906|      0|        }
12907|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12908|      0|        --parseContext.loopNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12909|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12910|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12911|      0|    }
12912|      0|#line 12913 "MachineIndependent/glslang_tab.cpp"
12913|      0|    break;
12914|       |
12915|      1|  case 667: /* $@13: %empty  */
  ------------------
  |  Branch (12915:3): [True: 1, False: 314M]
  ------------------
12916|      1|#line 4343 "MachineIndependent/glslang.y"
12917|      1|                     {
12918|      1|        parseContext.symbolTable.push();
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
12919|      1|        ++parseContext.loopNestingLevel;
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
12920|      1|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
12921|      1|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
12922|      1|    }
12923|      1|#line 12924 "MachineIndependent/glslang_tab.cpp"
12924|      1|    break;
12925|       |
12926|      0|  case 668: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@13 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
  ------------------
  |  Branch (12926:3): [True: 0, False: 314M]
  ------------------
12927|      0|#line 4349 "MachineIndependent/glslang.y"
12928|      0|                                                                               {
12929|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12930|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12931|      0|        TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node2), true, (yyvsp[-6].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12932|      0|        if (! parseContext.limits.nonInductiveForLoops)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12932:13): [True: 0, False: 0]
  ------------------
12933|      0|            parseContext.inductiveLoopCheck((yyvsp[-6].lex).loc, (yyvsp[-3].interm.intermNode), forLoop);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12934|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyval.interm.intermNode), forLoop, (yyvsp[-6].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12935|      0|        (yyval.interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12935:66): [True: 0, False: 0]
  ------------------
12936|      0|        --parseContext.loopNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12937|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12938|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12939|      0|    }
12940|      0|#line 12941 "MachineIndependent/glslang_tab.cpp"
12941|      0|    break;
12942|       |
12943|      0|  case 669: /* for_init_statement: expression_statement  */
  ------------------
  |  Branch (12943:3): [True: 0, False: 314M]
  ------------------
12944|      0|#line 4364 "MachineIndependent/glslang.y"
12945|      0|                           {
12946|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12947|      0|    }
12948|      0|#line 12949 "MachineIndependent/glslang_tab.cpp"
12949|      0|    break;
12950|       |
12951|      0|  case 670: /* for_init_statement: declaration_statement  */
  ------------------
  |  Branch (12951:3): [True: 0, False: 314M]
  ------------------
12952|      0|#line 4367 "MachineIndependent/glslang.y"
12953|      0|                            {
12954|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12955|      0|    }
12956|      0|#line 12957 "MachineIndependent/glslang_tab.cpp"
12957|      0|    break;
12958|       |
12959|      0|  case 671: /* conditionopt: condition  */
  ------------------
  |  Branch (12959:3): [True: 0, False: 314M]
  ------------------
12960|      0|#line 4373 "MachineIndependent/glslang.y"
12961|      0|                {
12962|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12963|      0|    }
12964|      0|#line 12965 "MachineIndependent/glslang_tab.cpp"
12965|      0|    break;
12966|       |
12967|      0|  case 672: /* conditionopt: %empty  */
  ------------------
  |  Branch (12967:3): [True: 0, False: 314M]
  ------------------
12968|      0|#line 4376 "MachineIndependent/glslang.y"
12969|      0|                        {
12970|      0|        (yyval.interm.intermNode) = 0;
12971|      0|    }
12972|      0|#line 12973 "MachineIndependent/glslang_tab.cpp"
12973|      0|    break;
12974|       |
12975|      0|  case 673: /* for_rest_statement: conditionopt SEMICOLON  */
  ------------------
  |  Branch (12975:3): [True: 0, False: 314M]
  ------------------
12976|      0|#line 4382 "MachineIndependent/glslang.y"
12977|      0|                             {
12978|      0|        (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermNode);
12979|      0|        (yyval.interm.nodePair).node2 = 0;
12980|      0|    }
12981|      0|#line 12982 "MachineIndependent/glslang_tab.cpp"
12982|      0|    break;
12983|       |
12984|      0|  case 674: /* for_rest_statement: conditionopt SEMICOLON expression  */
  ------------------
  |  Branch (12984:3): [True: 0, False: 314M]
  ------------------
12985|      0|#line 4386 "MachineIndependent/glslang.y"
12986|      0|                                         {
12987|      0|        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
12988|      0|        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
12989|      0|    }
12990|      0|#line 12991 "MachineIndependent/glslang_tab.cpp"
12991|      0|    break;
12992|       |
12993|      0|  case 675: /* jump_statement: CONTINUE SEMICOLON  */
  ------------------
  |  Branch (12993:3): [True: 0, False: 314M]
  ------------------
12994|      0|#line 4393 "MachineIndependent/glslang.y"
12995|      0|                         {
12996|      0|        if (parseContext.loopNestingLevel <= 0)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12996:13): [True: 0, False: 0]
  ------------------
12997|      0|            parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12998|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
12999|      0|    }
13000|      0|#line 13001 "MachineIndependent/glslang_tab.cpp"
13001|      0|    break;
13002|       |
13003|      0|  case 676: /* jump_statement: BREAK SEMICOLON  */
  ------------------
  |  Branch (13003:3): [True: 0, False: 314M]
  ------------------
13004|      0|#line 4398 "MachineIndependent/glslang.y"
13005|      0|                      {
13006|      0|        if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (13006:13): [True: 0, False: 0]
  ------------------
13007|      0|            parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13008|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13009|      0|    }
13010|      0|#line 13011 "MachineIndependent/glslang_tab.cpp"
13011|      0|    break;
13012|       |
13013|      0|  case 677: /* jump_statement: RETURN SEMICOLON  */
  ------------------
  |  Branch (13013:3): [True: 0, False: 314M]
  ------------------
13014|      0|#line 4403 "MachineIndependent/glslang.y"
13015|      0|                       {
13016|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13017|      0|        if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (13017:13): [True: 0, False: 0]
  ------------------
13018|      0|            parseContext.error((yyvsp[-1].lex).loc, "non-void function must return a value", "return", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13019|      0|        if (parseContext.inMain)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (13019:13): [True: 0, False: 0]
  ------------------
13020|      0|            parseContext.postEntryPointReturn = true;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13021|      0|    }
13022|      0|#line 13023 "MachineIndependent/glslang_tab.cpp"
13023|      0|    break;
13024|       |
13025|      0|  case 678: /* jump_statement: RETURN expression SEMICOLON  */
  ------------------
  |  Branch (13025:3): [True: 0, False: 314M]
  ------------------
13026|      0|#line 4410 "MachineIndependent/glslang.y"
13027|      0|                                  {
13028|      0|        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13029|      0|    }
13030|      0|#line 13031 "MachineIndependent/glslang_tab.cpp"
13031|      0|    break;
13032|       |
13033|      0|  case 679: /* jump_statement: DISCARD SEMICOLON  */
  ------------------
  |  Branch (13033:3): [True: 0, False: 314M]
  ------------------
13034|      0|#line 4413 "MachineIndependent/glslang.y"
13035|      0|                        {
13036|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13037|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13038|      0|    }
13039|      0|#line 13040 "MachineIndependent/glslang_tab.cpp"
13040|      0|    break;
13041|       |
13042|      0|  case 680: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
  ------------------
  |  Branch (13042:3): [True: 0, False: 314M]
  ------------------
13043|      0|#line 4417 "MachineIndependent/glslang.y"
13044|      0|                                     {
13045|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13046|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13047|      0|    }
13048|      0|#line 13049 "MachineIndependent/glslang_tab.cpp"
13049|      0|    break;
13050|       |
13051|      0|  case 681: /* jump_statement: TERMINATE_RAY SEMICOLON  */
  ------------------
  |  Branch (13051:3): [True: 0, False: 314M]
  ------------------
13052|      0|#line 4421 "MachineIndependent/glslang.y"
13053|      0|                              {
13054|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13055|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13056|      0|    }
13057|      0|#line 13058 "MachineIndependent/glslang_tab.cpp"
13058|      0|    break;
13059|       |
13060|      0|  case 682: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
  ------------------
  |  Branch (13060:3): [True: 0, False: 314M]
  ------------------
13061|      0|#line 4425 "MachineIndependent/glslang.y"
13062|      0|                                    {
13063|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13064|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13065|      0|    }
13066|      0|#line 13067 "MachineIndependent/glslang_tab.cpp"
13067|      0|    break;
13068|       |
13069|  12.4k|  case 683: /* translation_unit: external_declaration  */
  ------------------
  |  Branch (13069:3): [True: 12.4k, False: 314M]
  ------------------
13070|  12.4k|#line 4434 "MachineIndependent/glslang.y"
13071|  12.4k|                           {
13072|  12.4k|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
13073|  12.4k|        parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
  ------------------
  |  |  783|  12.4k|#define parseContext (*pParseContext)
  ------------------
13074|  12.4k|    }
13075|  12.4k|#line 13076 "MachineIndependent/glslang_tab.cpp"
13076|  12.4k|    break;
13077|       |
13078|  11.4M|  case 684: /* translation_unit: translation_unit external_declaration  */
  ------------------
  |  Branch (13078:3): [True: 11.4M, False: 303M]
  ------------------
13079|  11.4M|#line 4438 "MachineIndependent/glslang.y"
13080|  11.4M|                                            {
13081|  11.4M|        if ((yyvsp[0].interm.intermNode) != nullptr) {
  ------------------
  |  Branch (13081:13): [True: 0, False: 11.4M]
  ------------------
13082|      0|            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13083|      0|            parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13084|      0|        }
13085|  11.4M|    }
13086|  11.4M|#line 13087 "MachineIndependent/glslang_tab.cpp"
13087|  11.4M|    break;
13088|       |
13089|      0|  case 685: /* external_declaration: function_definition  */
  ------------------
  |  Branch (13089:3): [True: 0, False: 314M]
  ------------------
13090|      0|#line 4447 "MachineIndependent/glslang.y"
13091|      0|                          {
13092|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
13093|      0|    }
13094|      0|#line 13095 "MachineIndependent/glslang_tab.cpp"
13095|      0|    break;
13096|       |
13097|  11.4M|  case 686: /* external_declaration: declaration  */
  ------------------
  |  Branch (13097:3): [True: 11.4M, False: 303M]
  ------------------
13098|  11.4M|#line 4450 "MachineIndependent/glslang.y"
13099|  11.4M|                  {
13100|  11.4M|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
13101|  11.4M|    }
13102|  11.4M|#line 13103 "MachineIndependent/glslang_tab.cpp"
13103|  11.4M|    break;
13104|       |
13105|     13|  case 687: /* external_declaration: SEMICOLON  */
  ------------------
  |  Branch (13105:3): [True: 13, False: 314M]
  ------------------
13106|     13|#line 4453 "MachineIndependent/glslang.y"
13107|     13|                {
13108|     13|        parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
  ------------------
  |  |  783|     13|#define parseContext (*pParseContext)
  ------------------
13109|     13|        parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
  ------------------
  |  |  783|     13|#define parseContext (*pParseContext)
  ------------------
13110|     13|        (yyval.interm.intermNode) = nullptr;
13111|     13|    }
13112|     13|#line 13113 "MachineIndependent/glslang_tab.cpp"
13113|     13|    break;
13114|       |
13115|      1|  case 688: /* $@14: %empty  */
  ------------------
  |  Branch (13115:3): [True: 1, False: 314M]
  ------------------
13116|      1|#line 4461 "MachineIndependent/glslang.y"
13117|      1|                         {
13118|      1|        (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
13119|      1|        (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
13120|       |
13121|       |        // For ES 100 only, according to ES shading language 100 spec: A function
13122|       |        // body has a scope nested inside the function's definition.
13123|      1|        if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  783|      1|#define parseContext (*pParseContext)
  ------------------
  |  Branch (13123:13): [True: 1, False: 0]
  |  Branch (13123:51): [True: 0, False: 1]
  ------------------
13124|      0|        {
13125|      0|            parseContext.symbolTable.push();
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13126|      0|            ++parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13127|      0|        }
13128|      1|    }
13129|      1|#line 13130 "MachineIndependent/glslang_tab.cpp"
13130|      1|    break;
13131|       |
13132|      0|  case 689: /* function_definition: function_prototype $@14 compound_statement_no_new_scope  */
  ------------------
  |  Branch (13132:3): [True: 0, False: 314M]
  ------------------
13133|      0|#line 4473 "MachineIndependent/glslang.y"
13134|      0|                                    {
13135|       |        //   May be best done as post process phase on intermediate code
13136|      0|        if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (13136:13): [True: 0, False: 0]
  |  Branch (13136:76): [True: 0, False: 0]
  ------------------
13137|      0|            parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13138|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13139|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13140|      0|        (yyval.interm.intermNode)->getAsAggregate()->setLinkType((yyvsp[-2].interm).function->getLinkType());
13141|      0|        (yyval.interm.intermNode)->getAsAggregate()->setFunctionControl((yyvsp[-2].interm).function->getFunctionControl());
13142|      0|        parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[-2].interm).function->getType(), (yyvsp[-2].interm).loc);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13143|      0|        (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[-2].interm).function->getMangledName().c_str());
13144|       |
13145|       |        // store the pragma information for debug and optimize and other vendor specific
13146|       |        // information. This information can be queried from the parse tree
13147|      0|        (yyval.interm.intermNode)->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13148|      0|        (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13149|      0|        (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13150|       |
13151|       |        // Set currentFunctionType to empty pointer when goes outside of the function
13152|      0|        parseContext.currentFunctionType = nullptr;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13153|       |
13154|       |        // For ES 100 only, according to ES shading language 100 spec: A function
13155|       |        // body has a scope nested inside the function's definition.
13156|      0|        if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (13156:13): [True: 0, False: 0]
  |  Branch (13156:51): [True: 0, False: 0]
  ------------------
13157|      0|        {
13158|      0|            parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13159|      0|            --parseContext.statementNestingLevel;
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13160|      0|        }
13161|      0|    }
13162|      0|#line 13163 "MachineIndependent/glslang_tab.cpp"
13163|      0|    break;
13164|       |
13165|      0|  case 690: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
  ------------------
  |  Branch (13165:3): [True: 0, False: 314M]
  ------------------
13166|      0|#line 4504 "MachineIndependent/glslang.y"
13167|      0|                                                                           {
13168|      0|        (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
13169|      0|    }
13170|      0|#line 13171 "MachineIndependent/glslang_tab.cpp"
13171|      0|    break;
13172|       |
13173|      2|  case 691: /* attribute_list: single_attribute  */
  ------------------
  |  Branch (13173:3): [True: 2, False: 314M]
  ------------------
13174|      2|#line 4509 "MachineIndependent/glslang.y"
13175|      2|                       {
13176|      2|        (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
13177|      2|    }
13178|      2|#line 13179 "MachineIndependent/glslang_tab.cpp"
13179|      2|    break;
13180|       |
13181|      0|  case 692: /* attribute_list: attribute_list COMMA single_attribute  */
  ------------------
  |  Branch (13181:3): [True: 0, False: 314M]
  ------------------
13182|      0|#line 4512 "MachineIndependent/glslang.y"
13183|      0|                                            {
13184|      0|        (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13185|      0|    }
13186|      0|#line 13187 "MachineIndependent/glslang_tab.cpp"
13187|      0|    break;
13188|       |
13189|      2|  case 693: /* single_attribute: IDENTIFIER  */
  ------------------
  |  Branch (13189:3): [True: 2, False: 314M]
  ------------------
13190|      2|#line 4517 "MachineIndependent/glslang.y"
13191|      2|                 {
13192|      2|        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
  ------------------
  |  |  783|      2|#define parseContext (*pParseContext)
  ------------------
13193|      2|    }
13194|      2|#line 13195 "MachineIndependent/glslang_tab.cpp"
13195|      2|    break;
13196|       |
13197|      0|  case 694: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
  ------------------
  |  Branch (13197:3): [True: 0, False: 314M]
  ------------------
13198|      0|#line 4520 "MachineIndependent/glslang.y"
13199|      0|                                                            {
13200|      0|        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13201|      0|    }
13202|      0|#line 13203 "MachineIndependent/glslang_tab.cpp"
13203|      0|    break;
13204|       |
13205|      0|  case 695: /* single_attribute: INLINE  */
  ------------------
  |  Branch (13205:3): [True: 0, False: 314M]
  ------------------
13206|      0|#line 4523 "MachineIndependent/glslang.y"
13207|      0|             {
13208|      0|        (yyval.interm.attributes) = parseContext.makeAttributes(TString("inline"));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13209|      0|    }
13210|      0|#line 13211 "MachineIndependent/glslang_tab.cpp"
13211|      0|    break;
13212|       |
13213|      0|  case 696: /* single_attribute: NOINLINE  */
  ------------------
  |  Branch (13213:3): [True: 0, False: 314M]
  ------------------
13214|      0|#line 4526 "MachineIndependent/glslang.y"
13215|      0|               {
13216|      0|        (yyval.interm.attributes) = parseContext.makeAttributes(TString("noinline"));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13217|      0|    }
13218|      0|#line 13219 "MachineIndependent/glslang_tab.cpp"
13219|      0|    break;
13220|       |
13221|      0|  case 697: /* spirv_requirements_list: spirv_requirements_parameter  */
  ------------------
  |  Branch (13221:3): [True: 0, False: 314M]
  ------------------
13222|      0|#line 4531 "MachineIndependent/glslang.y"
13223|      0|                                   {
13224|      0|        (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq);
13225|      0|    }
13226|      0|#line 13227 "MachineIndependent/glslang_tab.cpp"
13227|      0|    break;
13228|       |
13229|      0|  case 698: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
  ------------------
  |  Branch (13229:3): [True: 0, False: 314M]
  ------------------
13230|      0|#line 4534 "MachineIndependent/glslang.y"
13231|      0|                                                                 {
13232|      0|        (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13233|      0|    }
13234|      0|#line 13235 "MachineIndependent/glslang_tab.cpp"
13235|      0|    break;
13236|       |
13237|      0|  case 699: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
  ------------------
  |  Branch (13237:3): [True: 0, False: 314M]
  ------------------
13238|      0|#line 4539 "MachineIndependent/glslang.y"
13239|      0|                                                                       {
13240|      0|        (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13241|      0|    }
13242|      0|#line 13243 "MachineIndependent/glslang_tab.cpp"
13243|      0|    break;
13244|       |
13245|      0|  case 700: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
  ------------------
  |  Branch (13245:3): [True: 0, False: 314M]
  ------------------
13246|      0|#line 4542 "MachineIndependent/glslang.y"
13247|      0|                                                                        {
13248|      0|        (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13249|      0|    }
13250|      0|#line 13251 "MachineIndependent/glslang_tab.cpp"
13251|      0|    break;
13252|       |
13253|      0|  case 701: /* spirv_extension_list: STRING_LITERAL  */
  ------------------
  |  Branch (13253:3): [True: 0, False: 314M]
  ------------------
13254|      0|#line 4547 "MachineIndependent/glslang.y"
13255|      0|                     {
13256|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13257|      0|    }
13258|      0|#line 13259 "MachineIndependent/glslang_tab.cpp"
13259|      0|    break;
13260|       |
13261|      0|  case 702: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
  ------------------
  |  Branch (13261:3): [True: 0, False: 314M]
  ------------------
13262|      0|#line 4550 "MachineIndependent/glslang.y"
13263|      0|                                                {
13264|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13265|      0|    }
13266|      0|#line 13267 "MachineIndependent/glslang_tab.cpp"
13267|      0|    break;
13268|       |
13269|      0|  case 703: /* spirv_capability_list: INTCONSTANT  */
  ------------------
  |  Branch (13269:3): [True: 0, False: 314M]
  ------------------
13270|      0|#line 4555 "MachineIndependent/glslang.y"
13271|      0|                  {
13272|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13273|      0|    }
13274|      0|#line 13275 "MachineIndependent/glslang_tab.cpp"
13275|      0|    break;
13276|       |
13277|      0|  case 704: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
  ------------------
  |  Branch (13277:3): [True: 0, False: 314M]
  ------------------
13278|      0|#line 4558 "MachineIndependent/glslang.y"
13279|      0|                                              {
13280|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13281|      0|    }
13282|      0|#line 13283 "MachineIndependent/glslang_tab.cpp"
13283|      0|    break;
13284|       |
13285|      0|  case 705: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (13285:3): [True: 0, False: 314M]
  ------------------
13286|      0|#line 4563 "MachineIndependent/glslang.y"
13287|      0|                                                              {
13288|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13289|      0|        (yyval.interm.intermNode) = 0;
13290|      0|    }
13291|      0|#line 13292 "MachineIndependent/glslang_tab.cpp"
13292|      0|    break;
13293|       |
13294|      0|  case 706: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (13294:3): [True: 0, False: 314M]
  ------------------
13295|      0|#line 4567 "MachineIndependent/glslang.y"
13296|      0|                                                                                            {
13297|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13298|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13299|      0|        (yyval.interm.intermNode) = 0;
13300|      0|    }
13301|      0|#line 13302 "MachineIndependent/glslang_tab.cpp"
13302|      0|    break;
13303|       |
13304|      0|  case 707: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13304:3): [True: 0, False: 314M]
  ------------------
13305|      0|#line 4572 "MachineIndependent/glslang.y"
13306|      0|                                                                                                        {
13307|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13308|      0|        (yyval.interm.intermNode) = 0;
13309|      0|    }
13310|      0|#line 13311 "MachineIndependent/glslang_tab.cpp"
13311|      0|    break;
13312|       |
13313|      0|  case 708: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13313:3): [True: 0, False: 314M]
  ------------------
13314|      0|#line 4576 "MachineIndependent/glslang.y"
13315|      0|                                                                                                                                      {
13316|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13317|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13318|      0|        (yyval.interm.intermNode) = 0;
13319|      0|    }
13320|      0|#line 13321 "MachineIndependent/glslang_tab.cpp"
13321|      0|    break;
13322|       |
13323|      0|  case 709: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13323:3): [True: 0, False: 314M]
  ------------------
13324|      0|#line 4581 "MachineIndependent/glslang.y"
13325|      0|                                                                                                              {
13326|      0|        parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13327|      0|        (yyval.interm.intermNode) = 0;
13328|      0|    }
13329|      0|#line 13330 "MachineIndependent/glslang_tab.cpp"
13330|      0|    break;
13331|       |
13332|      0|  case 710: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13332:3): [True: 0, False: 314M]
  ------------------
13333|      0|#line 4585 "MachineIndependent/glslang.y"
13334|      0|                                                                                                                                            {
13335|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13336|      0|        parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13337|      0|        (yyval.interm.intermNode) = 0;
13338|      0|    }
13339|      0|#line 13340 "MachineIndependent/glslang_tab.cpp"
13340|      0|    break;
13341|       |
13342|      0|  case 711: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
  ------------------
  |  Branch (13342:3): [True: 0, False: 314M]
  ------------------
13343|      0|#line 4592 "MachineIndependent/glslang.y"
13344|      0|                                     {
13345|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13346|      0|    }
13347|      0|#line 13348 "MachineIndependent/glslang_tab.cpp"
13348|      0|    break;
13349|       |
13350|      0|  case 712: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
  ------------------
  |  Branch (13350:3): [True: 0, False: 314M]
  ------------------
13351|      0|#line 4595 "MachineIndependent/glslang.y"
13352|      0|                                                                               {
13353|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13354|      0|    }
13355|      0|#line 13356 "MachineIndependent/glslang_tab.cpp"
13356|      0|    break;
13357|       |
13358|      0|  case 713: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
  ------------------
  |  Branch (13358:3): [True: 0, False: 314M]
  ------------------
13359|      0|#line 4600 "MachineIndependent/glslang.y"
13360|      0|                    {
13361|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13362|      0|    }
13363|      0|#line 13364 "MachineIndependent/glslang_tab.cpp"
13364|      0|    break;
13365|       |
13366|      0|  case 714: /* spirv_execution_mode_parameter: INTCONSTANT  */
  ------------------
  |  Branch (13366:3): [True: 0, False: 314M]
  ------------------
13367|      0|#line 4603 "MachineIndependent/glslang.y"
13368|      0|                  {
13369|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13370|      0|    }
13371|      0|#line 13372 "MachineIndependent/glslang_tab.cpp"
13372|      0|    break;
13373|       |
13374|      0|  case 715: /* spirv_execution_mode_parameter: UINTCONSTANT  */
  ------------------
  |  Branch (13374:3): [True: 0, False: 314M]
  ------------------
13375|      0|#line 4606 "MachineIndependent/glslang.y"
13376|      0|                   {
13377|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13378|      0|    }
13379|      0|#line 13380 "MachineIndependent/glslang_tab.cpp"
13380|      0|    break;
13381|       |
13382|      0|  case 716: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
  ------------------
  |  Branch (13382:3): [True: 0, False: 314M]
  ------------------
13383|      0|#line 4609 "MachineIndependent/glslang.y"
13384|      0|                   {
13385|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13386|      0|    }
13387|      0|#line 13388 "MachineIndependent/glslang_tab.cpp"
13388|      0|    break;
13389|       |
13390|      0|  case 717: /* spirv_execution_mode_parameter: STRING_LITERAL  */
  ------------------
  |  Branch (13390:3): [True: 0, False: 314M]
  ------------------
13391|      0|#line 4612 "MachineIndependent/glslang.y"
13392|      0|                     {
13393|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13394|      0|    }
13395|      0|#line 13396 "MachineIndependent/glslang_tab.cpp"
13396|      0|    break;
13397|       |
13398|      0|  case 718: /* spirv_execution_mode_id_parameter_list: constant_expression  */
  ------------------
  |  Branch (13398:3): [True: 0, False: 314M]
  ------------------
13399|      0|#line 4617 "MachineIndependent/glslang.y"
13400|      0|                          {
13401|      0|        if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (13401:13): [True: 0, False: 0]
  ------------------
13402|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
  ------------------
  |  Branch (13402:13): [True: 0, False: 0]
  ------------------
13403|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint &&
  ------------------
  |  Branch (13403:13): [True: 0, False: 0]
  ------------------
13404|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool &&
  ------------------
  |  Branch (13404:13): [True: 0, False: 0]
  ------------------
13405|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtString)
  ------------------
  |  Branch (13405:13): [True: 0, False: 0]
  ------------------
13406|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13407|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13408|      0|    }
13409|      0|#line 13410 "MachineIndependent/glslang_tab.cpp"
13410|      0|    break;
13411|       |
13412|      0|  case 719: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
  ------------------
  |  Branch (13412:3): [True: 0, False: 314M]
  ------------------
13413|      0|#line 4626 "MachineIndependent/glslang.y"
13414|      0|                                                                       {
13415|      0|        if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (13415:13): [True: 0, False: 0]
  ------------------
13416|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
  ------------------
  |  Branch (13416:13): [True: 0, False: 0]
  ------------------
13417|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint &&
  ------------------
  |  Branch (13417:13): [True: 0, False: 0]
  ------------------
13418|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool &&
  ------------------
  |  Branch (13418:13): [True: 0, False: 0]
  ------------------
13419|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtString)
  ------------------
  |  Branch (13419:13): [True: 0, False: 0]
  ------------------
13420|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13421|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13422|      0|    }
13423|      0|#line 13424 "MachineIndependent/glslang_tab.cpp"
13424|      0|    break;
13425|       |
13426|      0|  case 720: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (13426:3): [True: 0, False: 314M]
  ------------------
13427|      0|#line 4637 "MachineIndependent/glslang.y"
13428|      0|                                                             {
13429|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc);
13430|      0|        (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
13431|      0|        (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
13432|      0|    }
13433|      0|#line 13434 "MachineIndependent/glslang_tab.cpp"
13434|      0|    break;
13435|       |
13436|      0|  case 721: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (13436:3): [True: 0, False: 314M]
  ------------------
13437|      0|#line 4642 "MachineIndependent/glslang.y"
13438|      0|                                                                                           {
13439|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
13440|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13441|      0|        (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
13442|      0|        (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
13443|      0|    }
13444|      0|#line 13445 "MachineIndependent/glslang_tab.cpp"
13445|      0|    break;
13446|       |
13447|      0|  case 722: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (13447:3): [True: 0, False: 314M]
  ------------------
13448|      0|#line 4650 "MachineIndependent/glslang.y"
13449|      0|                                                       {
13450|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc);
13451|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
13452|      0|    }
13453|      0|#line 13454 "MachineIndependent/glslang_tab.cpp"
13454|      0|    break;
13455|       |
13456|      0|  case 723: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (13456:3): [True: 0, False: 314M]
  ------------------
13457|      0|#line 4654 "MachineIndependent/glslang.y"
13458|      0|                                                                                     {
13459|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
13460|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13461|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
13462|      0|    }
13463|      0|#line 13464 "MachineIndependent/glslang_tab.cpp"
13464|      0|    break;
13465|       |
13466|      0|  case 724: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13466:3): [True: 0, False: 314M]
  ------------------
13467|      0|#line 4659 "MachineIndependent/glslang.y"
13468|      0|                                                                                            {
13469|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
13470|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
13471|      0|    }
13472|      0|#line 13473 "MachineIndependent/glslang_tab.cpp"
13473|      0|    break;
13474|       |
13475|      0|  case 725: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13475:3): [True: 0, False: 314M]
  ------------------
13476|      0|#line 4663 "MachineIndependent/glslang.y"
13477|      0|                                                                                                                          {
13478|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc);
13479|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13480|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
13481|      0|    }
13482|      0|#line 13483 "MachineIndependent/glslang_tab.cpp"
13483|      0|    break;
13484|       |
13485|      0|  case 726: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13485:3): [True: 0, False: 314M]
  ------------------
13486|      0|#line 4668 "MachineIndependent/glslang.y"
13487|      0|                                                                                                  {
13488|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
13489|      0|        (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
13490|      0|    }
13491|      0|#line 13492 "MachineIndependent/glslang_tab.cpp"
13492|      0|    break;
13493|       |
13494|      0|  case 727: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13494:3): [True: 0, False: 314M]
  ------------------
13495|      0|#line 4672 "MachineIndependent/glslang.y"
13496|      0|                                                                                                                                {
13497|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc);
13498|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13499|      0|        (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
13500|      0|    }
13501|      0|#line 13502 "MachineIndependent/glslang_tab.cpp"
13502|      0|    break;
13503|       |
13504|      0|  case 728: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13504:3): [True: 0, False: 314M]
  ------------------
13505|      0|#line 4677 "MachineIndependent/glslang.y"
13506|      0|                                                                                                          {
13507|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
13508|      0|        (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
13509|      0|    }
13510|      0|#line 13511 "MachineIndependent/glslang_tab.cpp"
13511|      0|    break;
13512|       |
13513|      0|  case 729: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13513:3): [True: 0, False: 314M]
  ------------------
13514|      0|#line 4681 "MachineIndependent/glslang.y"
13515|      0|                                                                                                                                        {
13516|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc);
13517|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13518|      0|        (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
13519|      0|    }
13520|      0|#line 13521 "MachineIndependent/glslang_tab.cpp"
13521|      0|    break;
13522|       |
13523|      0|  case 730: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
  ------------------
  |  Branch (13523:3): [True: 0, False: 314M]
  ------------------
13524|      0|#line 4688 "MachineIndependent/glslang.y"
13525|      0|                               {
13526|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13527|      0|    }
13528|      0|#line 13529 "MachineIndependent/glslang_tab.cpp"
13529|      0|    break;
13530|       |
13531|      0|  case 731: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
  ------------------
  |  Branch (13531:3): [True: 0, False: 314M]
  ------------------
13532|      0|#line 4691 "MachineIndependent/glslang.y"
13533|      0|                                                                   {
13534|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13535|      0|    }
13536|      0|#line 13537 "MachineIndependent/glslang_tab.cpp"
13537|      0|    break;
13538|       |
13539|      0|  case 732: /* spirv_decorate_parameter: FLOATCONSTANT  */
  ------------------
  |  Branch (13539:3): [True: 0, False: 314M]
  ------------------
13540|      0|#line 4696 "MachineIndependent/glslang.y"
13541|      0|                    {
13542|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13543|      0|    }
13544|      0|#line 13545 "MachineIndependent/glslang_tab.cpp"
13545|      0|    break;
13546|       |
13547|      0|  case 733: /* spirv_decorate_parameter: INTCONSTANT  */
  ------------------
  |  Branch (13547:3): [True: 0, False: 314M]
  ------------------
13548|      0|#line 4699 "MachineIndependent/glslang.y"
13549|      0|                  {
13550|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13551|      0|    }
13552|      0|#line 13553 "MachineIndependent/glslang_tab.cpp"
13553|      0|    break;
13554|       |
13555|      0|  case 734: /* spirv_decorate_parameter: UINTCONSTANT  */
  ------------------
  |  Branch (13555:3): [True: 0, False: 314M]
  ------------------
13556|      0|#line 4702 "MachineIndependent/glslang.y"
13557|      0|                   {
13558|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13559|      0|    }
13560|      0|#line 13561 "MachineIndependent/glslang_tab.cpp"
13561|      0|    break;
13562|       |
13563|      0|  case 735: /* spirv_decorate_parameter: BOOLCONSTANT  */
  ------------------
  |  Branch (13563:3): [True: 0, False: 314M]
  ------------------
13564|      0|#line 4705 "MachineIndependent/glslang.y"
13565|      0|                   {
13566|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13567|      0|    }
13568|      0|#line 13569 "MachineIndependent/glslang_tab.cpp"
13569|      0|    break;
13570|       |
13571|      0|  case 736: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter  */
  ------------------
  |  Branch (13571:3): [True: 0, False: 314M]
  ------------------
13572|      0|#line 4710 "MachineIndependent/glslang.y"
13573|      0|                                  {
13574|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13575|      0|    }
13576|      0|#line 13577 "MachineIndependent/glslang_tab.cpp"
13577|      0|    break;
13578|       |
13579|      0|  case 737: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter  */
  ------------------
  |  Branch (13579:3): [True: 0, False: 314M]
  ------------------
13580|      0|#line 4713 "MachineIndependent/glslang.y"
13581|      0|                                                                         {
13582|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13583|      0|    }
13584|      0|#line 13585 "MachineIndependent/glslang_tab.cpp"
13585|      0|    break;
13586|       |
13587|      0|  case 738: /* spirv_decorate_id_parameter: variable_identifier  */
  ------------------
  |  Branch (13587:3): [True: 0, False: 314M]
  ------------------
13588|      0|#line 4718 "MachineIndependent/glslang.y"
13589|      0|                          {
13590|      0|        if ((yyvsp[0].interm.intermTypedNode)->getAsConstantUnion() || (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode())
  ------------------
  |  Branch (13590:13): [True: 0, False: 0]
  |  Branch (13590:72): [True: 0, False: 0]
  ------------------
13591|      0|            (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
13592|      0|        else
13593|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "only allow constants or variables which are not elements of a composite", "", "");
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13594|      0|    }
13595|      0|#line 13596 "MachineIndependent/glslang_tab.cpp"
13596|      0|    break;
13597|       |
13598|      0|  case 739: /* spirv_decorate_id_parameter: FLOATCONSTANT  */
  ------------------
  |  Branch (13598:3): [True: 0, False: 314M]
  ------------------
13599|      0|#line 4724 "MachineIndependent/glslang.y"
13600|      0|                    {
13601|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13602|      0|    }
13603|      0|#line 13604 "MachineIndependent/glslang_tab.cpp"
13604|      0|    break;
13605|       |
13606|      0|  case 740: /* spirv_decorate_id_parameter: INTCONSTANT  */
  ------------------
  |  Branch (13606:3): [True: 0, False: 314M]
  ------------------
13607|      0|#line 4727 "MachineIndependent/glslang.y"
13608|      0|                  {
13609|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13610|      0|    }
13611|      0|#line 13612 "MachineIndependent/glslang_tab.cpp"
13612|      0|    break;
13613|       |
13614|      0|  case 741: /* spirv_decorate_id_parameter: UINTCONSTANT  */
  ------------------
  |  Branch (13614:3): [True: 0, False: 314M]
  ------------------
13615|      0|#line 4730 "MachineIndependent/glslang.y"
13616|      0|                   {
13617|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13618|      0|    }
13619|      0|#line 13620 "MachineIndependent/glslang_tab.cpp"
13620|      0|    break;
13621|       |
13622|      0|  case 742: /* spirv_decorate_id_parameter: BOOLCONSTANT  */
  ------------------
  |  Branch (13622:3): [True: 0, False: 314M]
  ------------------
13623|      0|#line 4733 "MachineIndependent/glslang.y"
13624|      0|                   {
13625|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13626|      0|    }
13627|      0|#line 13628 "MachineIndependent/glslang_tab.cpp"
13628|      0|    break;
13629|       |
13630|      0|  case 743: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
  ------------------
  |  Branch (13630:3): [True: 0, False: 314M]
  ------------------
13631|      0|#line 4738 "MachineIndependent/glslang.y"
13632|      0|                     {
13633|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13634|      0|            parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13635|      0|    }
13636|      0|#line 13637 "MachineIndependent/glslang_tab.cpp"
13637|      0|    break;
13638|       |
13639|      0|  case 744: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
  ------------------
  |  Branch (13639:3): [True: 0, False: 314M]
  ------------------
13640|      0|#line 4742 "MachineIndependent/glslang.y"
13641|      0|                                                                {
13642|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
                      (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13643|      0|    }
13644|      0|#line 13645 "MachineIndependent/glslang_tab.cpp"
13645|      0|    break;
13646|       |
13647|      0|  case 745: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13647:3): [True: 0, False: 314M]
  ------------------
13648|      0|#line 4747 "MachineIndependent/glslang.y"
13649|      0|                                                                                                         {
13650|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13651|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
13652|      0|    }
13653|      0|#line 13654 "MachineIndependent/glslang_tab.cpp"
13654|      0|    break;
13655|       |
13656|      0|  case 746: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (13656:3): [True: 0, False: 314M]
  ------------------
13657|      0|#line 4751 "MachineIndependent/glslang.y"
13658|      0|                                                                                                                                       {
13659|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13660|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13661|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
13662|      0|    }
13663|      0|#line 13664 "MachineIndependent/glslang_tab.cpp"
13664|      0|    break;
13665|       |
13666|      0|  case 747: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (13666:3): [True: 0, False: 314M]
  ------------------
13667|      0|#line 4756 "MachineIndependent/glslang.y"
13668|      0|                                                                         {
13669|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13670|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
13671|      0|    }
13672|      0|#line 13673 "MachineIndependent/glslang_tab.cpp"
13673|      0|    break;
13674|       |
13675|      0|  case 748: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (13675:3): [True: 0, False: 314M]
  ------------------
13676|      0|#line 4760 "MachineIndependent/glslang.y"
13677|      0|                                                                                                       {
13678|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13679|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13680|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
13681|      0|    }
13682|      0|#line 13683 "MachineIndependent/glslang_tab.cpp"
13683|      0|    break;
13684|       |
13685|      0|  case 749: /* spirv_type_parameter_list: spirv_type_parameter  */
  ------------------
  |  Branch (13685:3): [True: 0, False: 314M]
  ------------------
13686|      0|#line 4767 "MachineIndependent/glslang.y"
13687|      0|                           {
13688|      0|        (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams);
13689|      0|    }
13690|      0|#line 13691 "MachineIndependent/glslang_tab.cpp"
13691|      0|    break;
13692|       |
13693|      0|  case 750: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
  ------------------
  |  Branch (13693:3): [True: 0, False: 314M]
  ------------------
13694|      0|#line 4770 "MachineIndependent/glslang.y"
13695|      0|                                                           {
13696|      0|        (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13697|      0|    }
13698|      0|#line 13699 "MachineIndependent/glslang_tab.cpp"
13699|      0|    break;
13700|       |
13701|      0|  case 751: /* spirv_type_parameter: constant_expression  */
  ------------------
  |  Branch (13701:3): [True: 0, False: 314M]
  ------------------
13702|      0|#line 4775 "MachineIndependent/glslang.y"
13703|      0|                          {
13704|      0|        (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion());
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13705|      0|    }
13706|      0|#line 13707 "MachineIndependent/glslang_tab.cpp"
13707|      0|    break;
13708|       |
13709|      0|  case 752: /* spirv_type_parameter: type_specifier_nonarray  */
  ------------------
  |  Branch (13709:3): [True: 0, False: 314M]
  ------------------
13710|      0|#line 4778 "MachineIndependent/glslang.y"
13711|      0|                              {
13712|      0|        (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13713|      0|    }
13714|      0|#line 13715 "MachineIndependent/glslang_tab.cpp"
13715|      0|    break;
13716|       |
13717|      0|  case 753: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (13717:3): [True: 0, False: 314M]
  ------------------
13718|      0|#line 4783 "MachineIndependent/glslang.y"
13719|      0|                                                                                {
13720|      0|        (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
13721|      0|    }
13722|      0|#line 13723 "MachineIndependent/glslang_tab.cpp"
13723|      0|    break;
13724|       |
13725|      0|  case 754: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (13725:3): [True: 0, False: 314M]
  ------------------
13726|      0|#line 4786 "MachineIndependent/glslang.y"
13727|      0|                                                                                                              {
13728|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13729|      0|        (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
13730|      0|    }
13731|      0|#line 13732 "MachineIndependent/glslang_tab.cpp"
13732|      0|    break;
13733|       |
13734|      0|  case 755: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
  ------------------
  |  Branch (13734:3): [True: 0, False: 314M]
  ------------------
13735|      0|#line 4792 "MachineIndependent/glslang.y"
13736|      0|                                     {
13737|      0|        (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
13738|      0|    }
13739|      0|#line 13740 "MachineIndependent/glslang_tab.cpp"
13740|      0|    break;
13741|       |
13742|      0|  case 756: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
  ------------------
  |  Branch (13742:3): [True: 0, False: 314M]
  ------------------
13743|      0|#line 4795 "MachineIndependent/glslang.y"
13744|      0|                                                                            {
13745|      0|        (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13746|      0|    }
13747|      0|#line 13748 "MachineIndependent/glslang_tab.cpp"
13748|      0|    break;
13749|       |
13750|      0|  case 757: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
  ------------------
  |  Branch (13750:3): [True: 0, False: 314M]
  ------------------
13751|      0|#line 4800 "MachineIndependent/glslang.y"
13752|      0|                                      {
13753|      0|        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13754|      0|    }
13755|      0|#line 13756 "MachineIndependent/glslang_tab.cpp"
13756|      0|    break;
13757|       |
13758|      0|  case 758: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
  ------------------
  |  Branch (13758:3): [True: 0, False: 314M]
  ------------------
13759|      0|#line 4803 "MachineIndependent/glslang.y"
13760|      0|                                   {
13761|      0|        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
  ------------------
  |  |  783|      0|#define parseContext (*pParseContext)
  ------------------
13762|      0|    }
13763|      0|#line 13764 "MachineIndependent/glslang_tab.cpp"
13764|      0|    break;
13765|       |
13766|       |
13767|      0|#line 13768 "MachineIndependent/glslang_tab.cpp"
13768|       |
13769|      0|      default: break;
  ------------------
  |  Branch (13769:7): [True: 0, False: 314M]
  ------------------
13770|   314M|    }
13771|       |  /* User semantic actions sometimes alter yychar, and that requires
13772|       |     that yytoken be updated with the new translation.  We take the
13773|       |     approach of translating immediately before every use of yytoken.
13774|       |     One alternative is translating here after every semantic action,
13775|       |     but that translation would be missed if the semantic action invokes
13776|       |     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
13777|       |     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
13778|       |     incorrect destructor might then be invoked immediately.  In the
13779|       |     case of YYERROR or YYBACKUP, subsequent parser actions might lead
13780|       |     to an incorrect destructor call or verbose syntax error message
13781|       |     before the lookahead is translated.  */
13782|   314M|  YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
  ------------------
  |  | 5208|   314M|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 5209|   314M|do {                                                                      \
  |  | 5210|   314M|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (5210:7): [True: 0, False: 314M]
  |  |  ------------------
  |  | 5211|   314M|    {                                                                     \
  |  | 5212|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5213|      0|      yy_symbol_print (stderr,                                            \
  |  | 5214|      0|                  Kind, Value, pParseContext); \
  |  | 5215|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5216|      0|    }                                                                     \
  |  | 5217|   314M|} while (0)
  |  |  ------------------
  |  |  |  Branch (5217:10): [Folded, False: 314M]
  |  |  ------------------
  ------------------
13783|       |
13784|   314M|  YYPOPSTACK (yylen);
  ------------------
  |  | 5685|   314M|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13785|   314M|  yylen = 0;
13786|       |
13787|   314M|  *++yyvsp = yyval;
13788|       |
13789|       |  /* Now 'shift' the result of the reduction.  Determine what state
13790|       |     that goes to, based on the state we popped back to and the rule
13791|       |     number reduced by.  */
13792|   314M|  {
13793|   314M|    const int yylhs = yyr1[yyn] - YYNTOKENS;
  ------------------
  |  | 1116|   314M|#define YYNTOKENS  515
  ------------------
13794|   314M|    const int yyi = yypgoto[yylhs] + *yyssp;
13795|   314M|    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
  ------------------
  |  | 1113|   477M|#define YYLAST   15602
  ------------------
  |  Branch (13795:16): [True: 163M, False: 151M]
  |  Branch (13795:28): [True: 163M, False: 0]
  |  Branch (13795:45): [True: 106M, False: 57.0M]
  ------------------
13796|   314M|               ? yytable[yyi]
13797|   314M|               : yydefgoto[yylhs]);
13798|   314M|  }
13799|       |
13800|   314M|  goto yynewstate;
13801|       |
13802|       |
13803|       |/*--------------------------------------.
13804|       || yyerrlab -- here on detecting error.  |
13805|       |`--------------------------------------*/
13806|  1.23k|yyerrlab:
13807|       |  /* Make sure we have latest lookahead translation.  See comments at
13808|       |     user semantic actions for why this is necessary.  */
13809|  1.23k|  yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
  ------------------
  |  | 1131|  2.46k|  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
  |  |  ------------------
  |  |  |  | 1125|  1.23k|#define YYMAXUTOK   769
  |  |  ------------------
  |  |  |  Branch (1131:4): [True: 1.23k, False: 0]
  |  |  |  Branch (1131:18): [True: 1.23k, False: 0]
  |  |  ------------------
  |  | 1132|  2.46k|   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
  |  |  ------------------
  |  |  |  |  100|  1.23k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  |  | 1133|  2.46k|   : YYSYMBOL_YYUNDEF)
  ------------------
  |  Branch (13809:13): [True: 0, False: 1.23k]
  ------------------
13810|       |  /* If not already recovering from an error, report this error.  */
13811|  1.23k|  if (!yyerrstatus)
  ------------------
  |  Branch (13811:7): [True: 1.23k, False: 0]
  ------------------
13812|  1.23k|    {
13813|  1.23k|      ++yynerrs;
13814|  1.23k|      {
13815|  1.23k|        yypcontext_t yyctx
13816|  1.23k|          = {yyssp, yytoken};
13817|  1.23k|        char const *yymsgp = YY_("syntax error");
  ------------------
  |  |  915|  1.23k|#  define YY_(Msgid) Msgid
  ------------------
13818|  1.23k|        int yysyntax_error_status;
13819|  1.23k|        yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
13820|  1.23k|        if (yysyntax_error_status == 0)
  ------------------
  |  Branch (13820:13): [True: 1.23k, False: 0]
  ------------------
13821|  1.23k|          yymsgp = yymsg;
13822|      0|        else if (yysyntax_error_status == -1)
  ------------------
  |  Branch (13822:18): [True: 0, False: 0]
  ------------------
13823|      0|          {
13824|      0|            if (yymsg != yymsgbuf)
  ------------------
  |  Branch (13824:17): [True: 0, False: 0]
  ------------------
13825|      0|              YYSTACK_FREE (yymsg);
  ------------------
  |  | 1023|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1042|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
13826|      0|            yymsg = YY_CAST (char *,
  ------------------
  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
13827|      0|                             YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
13828|      0|            if (yymsg)
  ------------------
  |  Branch (13828:17): [True: 0, False: 0]
  ------------------
13829|      0|              {
13830|      0|                yysyntax_error_status
13831|      0|                  = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
13832|      0|                yymsgp = yymsg;
13833|      0|              }
13834|      0|            else
13835|      0|              {
13836|      0|                yymsg = yymsgbuf;
13837|      0|                yymsg_alloc = sizeof yymsgbuf;
13838|      0|                yysyntax_error_status = YYENOMEM;
13839|      0|              }
13840|      0|          }
13841|  1.23k|        yyerror (pParseContext, yymsgp);
  ------------------
  |  |  784|  1.23k|#define yyerror(context, msg) context->parserError(msg)
  ------------------
13842|  1.23k|        if (yysyntax_error_status == YYENOMEM)
  ------------------
  |  Branch (13842:13): [True: 0, False: 1.23k]
  ------------------
13843|      0|          YYNOMEM;
  ------------------
  |  | 5164|      0|#define YYNOMEM         goto yyexhaustedlab
  ------------------
13844|  1.23k|      }
13845|  1.23k|    }
13846|       |
13847|  1.23k|  if (yyerrstatus == 3)
  ------------------
  |  Branch (13847:7): [True: 0, False: 1.23k]
  ------------------
13848|      0|    {
13849|       |      /* If just tried and failed to reuse lookahead token after an
13850|       |         error, discard it.  */
13851|       |
13852|      0|      if (yychar <= YYEOF)
  ------------------
  |  Branch (13852:11): [True: 0, False: 0]
  ------------------
13853|      0|        {
13854|       |          /* Return failure if at end of input.  */
13855|      0|          if (yychar == YYEOF)
  ------------------
  |  Branch (13855:15): [True: 0, False: 0]
  ------------------
13856|      0|            YYABORT;
  ------------------
  |  | 5162|      0|#define YYABORT         goto yyabortlab
  ------------------
13857|      0|        }
13858|      0|      else
13859|      0|        {
13860|      0|          yydestruct ("Error: discarding",
13861|      0|                      yytoken, &yylval, pParseContext);
13862|      0|          yychar = YYEMPTY;
13863|      0|        }
13864|      0|    }
13865|       |
13866|       |  /* Else will try to reuse lookahead token after shifting the error
13867|       |     token.  */
13868|  1.23k|  goto yyerrlab1;
13869|       |
13870|       |
13871|       |/*---------------------------------------------------.
13872|       || yyerrorlab -- error raised explicitly by YYERROR.  |
13873|       |`---------------------------------------------------*/
13874|  1.23k|yyerrorlab:
13875|       |  /* Pacify compilers when the user code never invokes YYERROR and the
13876|       |     label yyerrorlab therefore never appears in user code.  */
13877|      0|  if (0)
  ------------------
  |  Branch (13877:7): [Folded, False: 0]
  ------------------
13878|      0|    YYERROR;
  ------------------
  |  | 5163|      0|#define YYERROR         goto yyerrorlab
  ------------------
13879|      0|  ++yynerrs;
13880|       |
13881|       |  /* Do not reclaim the symbols of the rule whose action triggered
13882|       |     this YYERROR.  */
13883|      0|  YYPOPSTACK (yylen);
  ------------------
  |  | 5685|      0|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13884|      0|  yylen = 0;
13885|      0|  YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 5271|      0|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 5272|      0|do {                                                            \
  |  | 5273|      0|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (5273:7): [True: 0, False: 0]
  |  |  ------------------
  |  | 5274|      0|    yy_stack_print ((Bottom), (Top));                           \
  |  | 5275|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (5275:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
13886|      0|  yystate = *yyssp;
13887|      0|  goto yyerrlab1;
13888|       |
13889|       |
13890|       |/*-------------------------------------------------------------.
13891|       || yyerrlab1 -- common code for both syntax error and YYERROR.  |
13892|       |`-------------------------------------------------------------*/
13893|  1.23k|yyerrlab1:
13894|  1.23k|  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
13895|       |
13896|       |  /* Pop stack until we find a state that shifts the error token.  */
13897|  1.23k|  for (;;)
13898|  2.29k|    {
13899|  2.29k|      yyn = yypact[yystate];
13900|  2.29k|      if (!yypact_value_is_default (yyn))
  ------------------
  |  | 1490|  2.29k|  ((Yyn) == YYPACT_NINF)
  |  |  ------------------
  |  |  |  | 1487|  2.29k|#define YYPACT_NINF (-901)
  |  |  ------------------
  ------------------
  |  Branch (13900:11): [True: 2.29k, False: 1]
  ------------------
13901|  2.29k|        {
13902|  2.29k|          yyn += YYSYMBOL_YYerror;
13903|  2.29k|          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
  ------------------
  |  | 1113|  4.04k|#define YYLAST   15602
  ------------------
  |  Branch (13903:15): [True: 1.75k, False: 541]
  |  Branch (13903:27): [True: 1.75k, False: 0]
  |  Branch (13903:44): [True: 0, False: 1.75k]
  ------------------
13904|      0|            {
13905|      0|              yyn = yytable[yyn];
13906|      0|              if (0 < yyn)
  ------------------
  |  Branch (13906:19): [True: 0, False: 0]
  ------------------
13907|      0|                break;
13908|      0|            }
13909|  2.29k|        }
13910|       |
13911|       |      /* Pop the current state because it cannot handle the error token.  */
13912|  2.29k|      if (yyssp == yyss)
  ------------------
  |  Branch (13912:11): [True: 1.23k, False: 1.06k]
  ------------------
13913|  1.23k|        YYABORT;
  ------------------
  |  | 5162|  1.23k|#define YYABORT         goto yyabortlab
  ------------------
13914|       |
13915|       |
13916|  1.06k|      yydestruct ("Error: popping",
13917|  1.06k|                  YY_ACCESSING_SYMBOL (yystate), yyvsp, pParseContext);
  ------------------
  |  | 1302|  1.06k|#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
  |  |  ------------------
  |  |  |  |  100|  1.06k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
13918|  1.06k|      YYPOPSTACK (1);
  ------------------
  |  | 5685|  1.06k|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13919|  1.06k|      yystate = *yyssp;
13920|  1.06k|      YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 5271|  1.06k|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 5272|  1.06k|do {                                                            \
  |  | 5273|  1.06k|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (5273:7): [True: 0, False: 1.06k]
  |  |  ------------------
  |  | 5274|  1.06k|    yy_stack_print ((Bottom), (Top));                           \
  |  | 5275|  1.06k|} while (0)
  |  |  ------------------
  |  |  |  Branch (5275:10): [Folded, False: 1.06k]
  |  |  ------------------
  ------------------
13921|  1.06k|    }
13922|       |
13923|      0|  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
13924|      0|  *++yyvsp = yylval;
13925|      0|  YY_IGNORE_MAYBE_UNINITIALIZED_END
13926|       |
13927|       |
13928|       |  /* Shift the error token.  */
13929|      0|  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
  ------------------
  |  | 5208|      0|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 5209|      0|do {                                                                      \
  |  | 5210|      0|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (5210:7): [True: 0, False: 0]
  |  |  ------------------
  |  | 5211|      0|    {                                                                     \
  |  | 5212|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5213|      0|      yy_symbol_print (stderr,                                            \
  |  | 5214|      0|                  Kind, Value, pParseContext); \
  |  | 5215|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5216|      0|    }                                                                     \
  |  | 5217|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (5217:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
13930|       |
13931|      0|  yystate = yyn;
13932|      0|  goto yynewstate;
13933|       |
13934|       |
13935|       |/*-------------------------------------.
13936|       || yyacceptlab -- YYACCEPT comes here.  |
13937|       |`-------------------------------------*/
13938|  11.9k|yyacceptlab:
13939|  11.9k|  yyresult = 0;
13940|  11.9k|  goto yyreturnlab;
13941|       |
13942|       |
13943|       |/*-----------------------------------.
13944|       || yyabortlab -- YYABORT comes here.  |
13945|       |`-----------------------------------*/
13946|  1.23k|yyabortlab:
13947|  1.23k|  yyresult = 1;
13948|  1.23k|  goto yyreturnlab;
13949|       |
13950|       |
13951|       |/*-----------------------------------------------------------.
13952|       || yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
13953|       |`-----------------------------------------------------------*/
13954|      0|yyexhaustedlab:
13955|      0|  yyerror (pParseContext, YY_("memory exhausted"));
  ------------------
  |  |  784|      0|#define yyerror(context, msg) context->parserError(msg)
  ------------------
13956|      0|  yyresult = 2;
13957|      0|  goto yyreturnlab;
13958|       |
13959|       |
13960|       |/*----------------------------------------------------------.
13961|       || yyreturnlab -- parsing is finished, clean up and return.  |
13962|       |`----------------------------------------------------------*/
13963|  13.1k|yyreturnlab:
13964|  13.1k|  if (yychar != YYEMPTY)
  ------------------
  |  Branch (13964:7): [True: 1.23k, False: 11.9k]
  ------------------
13965|  1.23k|    {
13966|       |      /* Make sure we have latest lookahead translation.  See comments at
13967|       |         user semantic actions for why this is necessary.  */
13968|  1.23k|      yytoken = YYTRANSLATE (yychar);
  ------------------
  |  | 1131|  1.23k|  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
  |  |  ------------------
  |  |  |  | 1125|  1.23k|#define YYMAXUTOK   769
  |  |  ------------------
  |  |  |  Branch (1131:4): [True: 1.23k, False: 0]
  |  |  |  Branch (1131:18): [True: 1.23k, False: 0]
  |  |  ------------------
  |  | 1132|  1.23k|   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
  |  |  ------------------
  |  |  |  |  100|  1.23k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  |  | 1133|  1.23k|   : YYSYMBOL_YYUNDEF)
  ------------------
13969|  1.23k|      yydestruct ("Cleanup: discarding lookahead",
13970|  1.23k|                  yytoken, &yylval, pParseContext);
13971|  1.23k|    }
13972|       |  /* Do not reclaim the symbols of the rule whose action triggered
13973|       |     this YYABORT or YYACCEPT.  */
13974|  13.1k|  YYPOPSTACK (yylen);
  ------------------
  |  | 5685|  13.1k|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13975|  13.1k|  YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 5271|  13.1k|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 5272|  13.1k|do {                                                            \
  |  | 5273|  13.1k|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (5273:7): [True: 0, False: 13.1k]
  |  |  ------------------
  |  | 5274|  13.1k|    yy_stack_print ((Bottom), (Top));                           \
  |  | 5275|  13.1k|} while (0)
  |  |  ------------------
  |  |  |  Branch (5275:10): [Folded, False: 13.1k]
  |  |  ------------------
  ------------------
13976|  37.0k|  while (yyssp != yyss)
  ------------------
  |  Branch (13976:10): [True: 23.8k, False: 13.1k]
  ------------------
13977|  23.8k|    {
13978|  23.8k|      yydestruct ("Cleanup: popping",
13979|  23.8k|                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, pParseContext);
  ------------------
  |  | 1302|  23.8k|#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
  |  |  ------------------
  |  |  |  |  100|  23.8k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
13980|  23.8k|      YYPOPSTACK (1);
  ------------------
  |  | 5685|  23.8k|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13981|  23.8k|    }
13982|  13.1k|#ifndef yyoverflow
13983|  13.1k|  if (yyss != yyssa)
  ------------------
  |  Branch (13983:7): [True: 0, False: 13.1k]
  ------------------
13984|      0|    YYSTACK_FREE (yyss);
  ------------------
  |  | 1023|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1042|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
13985|  13.1k|#endif
13986|  13.1k|  if (yymsg != yymsgbuf)
  ------------------
  |  Branch (13986:7): [True: 0, False: 13.1k]
  ------------------
13987|      0|    YYSTACK_FREE (yymsg);
  ------------------
  |  | 1023|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1042|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
13988|  13.1k|  return yyresult;
13989|  1.23k|}
glslang_tab.cpp:_ZL14yysyntax_errorPlPPcPK12yypcontext_t:
 5529|  1.23k|{
 5530|  1.23k|  enum { YYARGS_MAX = 5 };
 5531|       |  /* Internationalized format string. */
 5532|  1.23k|  const char *yyformat = YY_NULLPTR;
  ------------------
  |  |  110|  1.23k|#    define YY_NULLPTR nullptr
  ------------------
 5533|       |  /* Arguments of yyformat: reported tokens (one for the "unexpected",
 5534|       |     one per "expected"). */
 5535|  1.23k|  yysymbol_kind_t yyarg[YYARGS_MAX];
 5536|       |  /* Cumulated lengths of YYARG.  */
 5537|  1.23k|  YYPTRDIFF_T yysize = 0;
  ------------------
  |  |  865|  1.23k|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5538|       |
 5539|       |  /* Actual size of YYARG. */
 5540|  1.23k|  int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
 5541|  1.23k|  if (yycount == YYENOMEM)
  ------------------
  |  Branch (5541:7): [True: 0, False: 1.23k]
  ------------------
 5542|      0|    return YYENOMEM;
 5543|       |
 5544|  1.23k|  switch (yycount)
 5545|  1.23k|    {
 5546|      0|#define YYCASE_(N, S)                       \
 5547|      0|      case N:                               \
 5548|      0|        yyformat = S;                       \
 5549|      0|        break
 5550|      0|    default: /* Avoid compiler warnings. */
  ------------------
  |  Branch (5550:5): [True: 0, False: 1.23k]
  ------------------
 5551|      0|      YYCASE_(0, YY_("syntax error"));
  ------------------
  |  | 5547|      0|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5547:7): [True: 0, False: 1.23k]
  |  |  ------------------
  |  | 5548|      0|        yyformat = S;                       \
  |  | 5549|      0|        break
  ------------------
 5552|    729|      YYCASE_(1, YY_("syntax error, unexpected %s"));
  ------------------
  |  | 5547|    729|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5547:7): [True: 729, False: 505]
  |  |  ------------------
  |  | 5548|    729|        yyformat = S;                       \
  |  | 5549|    729|        break
  ------------------
 5553|     16|      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
  ------------------
  |  | 5547|     16|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5547:7): [True: 16, False: 1.21k]
  |  |  ------------------
  |  | 5548|     16|        yyformat = S;                       \
  |  | 5549|     16|        break
  ------------------
 5554|    487|      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
  ------------------
  |  | 5547|    487|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5547:7): [True: 487, False: 747]
  |  |  ------------------
  |  | 5548|    487|        yyformat = S;                       \
  |  | 5549|    487|        break
  ------------------
 5555|      2|      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
  ------------------
  |  | 5547|      2|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5547:7): [True: 2, False: 1.23k]
  |  |  ------------------
  |  | 5548|      2|        yyformat = S;                       \
  |  | 5549|      2|        break
  ------------------
 5556|  1.23k|      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
  ------------------
  |  | 5547|      0|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5547:7): [True: 0, False: 1.23k]
  |  |  ------------------
  |  | 5548|      0|        yyformat = S;                       \
  |  | 5549|      0|        break
  ------------------
 5557|  1.23k|#undef YYCASE_
 5558|  1.23k|    }
 5559|       |
 5560|       |  /* Compute error message size.  Don't count the "%s"s, but reserve
 5561|       |     room for the terminator.  */
 5562|  1.23k|  yysize = yystrlen (yyformat) - 2 * yycount + 1;
  ------------------
  |  | 5388|  1.23k|#  define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
  |  |  ------------------
  |  |  |  |  100|  1.23k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
 5563|  1.23k|  {
 5564|  1.23k|    int yyi;
 5565|  3.46k|    for (yyi = 0; yyi < yycount; ++yyi)
  ------------------
  |  Branch (5565:19): [True: 2.23k, False: 1.23k]
  ------------------
 5566|  2.23k|      {
 5567|  2.23k|        YYPTRDIFF_T yysize1
  ------------------
  |  |  865|  2.23k|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5568|  2.23k|          = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
  ------------------
  |  |  110|  2.23k|#    define YY_NULLPTR nullptr
  ------------------
 5569|  2.23k|        if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
  ------------------
  |  | 1025|  2.23k|#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
  |  |  ------------------
  |  |  |  |  893|  2.23k|  YY_CAST (YYPTRDIFF_T,                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|  4.46k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (100:50): [True: 2.23k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5569:13): [True: 2.23k, False: 0]
  |  Branch (5569:34): [True: 2.23k, False: 0]
  ------------------
 5570|  2.23k|          yysize = yysize1;
 5571|      0|        else
 5572|      0|          return YYENOMEM;
 5573|  2.23k|      }
 5574|  1.23k|  }
 5575|       |
 5576|  1.23k|  if (*yymsg_alloc < yysize)
  ------------------
  |  Branch (5576:7): [True: 0, False: 1.23k]
  ------------------
 5577|      0|    {
 5578|      0|      *yymsg_alloc = 2 * yysize;
 5579|      0|      if (! (yysize <= *yymsg_alloc
  ------------------
  |  Branch (5579:14): [True: 0, False: 0]
  ------------------
 5580|      0|             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
  ------------------
  |  | 1025|      0|#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
  |  |  ------------------
  |  |  |  |  893|      0|  YY_CAST (YYPTRDIFF_T,                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (100:50): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5580:17): [True: 0, False: 0]
  ------------------
 5581|      0|        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
  ------------------
  |  | 1025|      0|#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
  |  |  ------------------
  |  |  |  |  893|      0|  YY_CAST (YYPTRDIFF_T,                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (100:50): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5582|      0|      return -1;
 5583|      0|    }
 5584|       |
 5585|       |  /* Avoid sprintf, as that infringes on the user's name space.
 5586|       |     Don't have undefined behavior even if the translation
 5587|       |     produced a string with the wrong number of "%s"s.  */
 5588|  1.23k|  {
 5589|  1.23k|    char *yyp = *yymsg;
 5590|  1.23k|    int yyi = 0;
 5591|  42.3k|    while ((*yyp = *yyformat) != '\0')
  ------------------
  |  Branch (5591:12): [True: 41.1k, False: 1.23k]
  ------------------
 5592|  41.1k|      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
  ------------------
  |  Branch (5592:11): [True: 2.23k, False: 38.8k]
  |  Branch (5592:26): [True: 2.23k, False: 0]
  |  Branch (5592:48): [True: 2.23k, False: 0]
  ------------------
 5593|  2.23k|        {
 5594|  2.23k|          yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
 5595|  2.23k|          yyformat += 2;
 5596|  2.23k|        }
 5597|  38.8k|      else
 5598|  38.8k|        {
 5599|  38.8k|          ++yyp;
 5600|  38.8k|          ++yyformat;
 5601|  38.8k|        }
 5602|  1.23k|  }
 5603|  1.23k|  return 0;
 5604|  1.23k|}
glslang_tab.cpp:_ZL25yy_syntax_error_argumentsPK12yypcontext_tP15yysymbol_kind_ti:
 5476|  1.23k|{
 5477|       |  /* Actual size of YYARG. */
 5478|  1.23k|  int yycount = 0;
 5479|       |  /* There are many possibilities here to consider:
 5480|       |     - If this state is a consistent state with a default action, then
 5481|       |       the only way this function was invoked is if the default action
 5482|       |       is an error action.  In that case, don't check for expected
 5483|       |       tokens because there are none.
 5484|       |     - The only way there can be no lookahead present (in yychar) is if
 5485|       |       this state is a consistent state with a default action.  Thus,
 5486|       |       detecting the absence of a lookahead is sufficient to determine
 5487|       |       that there is no unexpected or expected token to report.  In that
 5488|       |       case, just report a simple "syntax error".
 5489|       |     - Don't assume there isn't a lookahead just because this state is a
 5490|       |       consistent state with a default action.  There might have been a
 5491|       |       previous inconsistent state, consistent state with a non-default
 5492|       |       action, or user semantic action that manipulated yychar.
 5493|       |     - Of course, the expected token list depends on states to have
 5494|       |       correct lookahead information, and it depends on the parser not
 5495|       |       to perform extra reductions after fetching a lookahead from the
 5496|       |       scanner and before detecting a syntax error.  Thus, state merging
 5497|       |       (from LALR or IELR) and default reductions corrupt the expected
 5498|       |       token list.  However, the list is correct for canonical LR with
 5499|       |       one exception: it will still contain any token that will not be
 5500|       |       accepted due to an error action in a later state.
 5501|       |  */
 5502|  1.23k|  if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
  ------------------
  |  Branch (5502:7): [True: 1.23k, False: 0]
  ------------------
 5503|  1.23k|    {
 5504|  1.23k|      int yyn;
 5505|  1.23k|      if (yyarg)
  ------------------
  |  Branch (5505:11): [True: 1.23k, False: 0]
  ------------------
 5506|  1.23k|        yyarg[yycount] = yyctx->yytoken;
 5507|  1.23k|      ++yycount;
 5508|  1.23k|      yyn = yypcontext_expected_tokens (yyctx,
 5509|  1.23k|                                        yyarg ? yyarg + 1 : yyarg, yyargn - 1);
  ------------------
  |  Branch (5509:41): [True: 1.23k, False: 0]
  ------------------
 5510|  1.23k|      if (yyn == YYENOMEM)
  ------------------
  |  Branch (5510:11): [True: 0, False: 1.23k]
  ------------------
 5511|      0|        return YYENOMEM;
 5512|  1.23k|      else
 5513|  1.23k|        yycount += yyn;
 5514|  1.23k|    }
 5515|  1.23k|  return yycount;
 5516|  1.23k|}
glslang_tab.cpp:_ZL26yypcontext_expected_tokensPK12yypcontext_tP15yysymbol_kind_ti:
 5352|  1.23k|{
 5353|       |  /* Actual size of YYARG. */
 5354|  1.23k|  int yycount = 0;
 5355|  1.23k|  int yyn = yypact[+*yyctx->yyssp];
 5356|  1.23k|  if (!yypact_value_is_default (yyn))
  ------------------
  |  | 1490|  1.23k|  ((Yyn) == YYPACT_NINF)
  |  |  ------------------
  |  |  |  | 1487|  1.23k|#define YYPACT_NINF (-901)
  |  |  ------------------
  ------------------
  |  Branch (5356:7): [True: 1.23k, False: 0]
  ------------------
 5357|  1.23k|    {
 5358|       |      /* Start YYX at -YYN if negative to avoid negative indexes in
 5359|       |         YYCHECK.  In other words, skip the first -YYN actions for
 5360|       |         this state because they are default actions.  */
 5361|  1.23k|      int yyxbegin = yyn < 0 ? -yyn : 0;
  ------------------
  |  Branch (5361:22): [True: 504, False: 730]
  ------------------
 5362|       |      /* Stay within bounds of both yycheck and yytname.  */
 5363|  1.23k|      int yychecklim = YYLAST - yyn + 1;
  ------------------
  |  | 1113|  1.23k|#define YYLAST   15602
  ------------------
 5364|  1.23k|      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
  ------------------
  |  | 1116|  1.23k|#define YYNTOKENS  515
  ------------------
                    int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
  ------------------
  |  | 1116|  1.23k|#define YYNTOKENS  515
  ------------------
  |  Branch (5364:20): [True: 0, False: 1.23k]
  ------------------
 5365|  1.23k|      int yyx;
 5366|   133k|      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
  ------------------
  |  Branch (5366:28): [True: 132k, False: 505]
  ------------------
 5367|   132k|        if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
  ------------------
  |  Branch (5367:13): [True: 4.64k, False: 128k]
  |  Branch (5367:42): [True: 4.64k, False: 0]
  ------------------
 5368|      0|            && !yytable_value_is_error (yytable[yyx + yyn]))
  ------------------
  |  | 1495|      0|  0
  ------------------
  |  Branch (5368:16): [True: 0, Folded]
  ------------------
 5369|  4.64k|          {
 5370|  4.64k|            if (!yyarg)
  ------------------
  |  Branch (5370:17): [True: 0, False: 4.64k]
  ------------------
 5371|      0|              ++yycount;
 5372|  4.64k|            else if (yycount == yyargn)
  ------------------
  |  Branch (5372:22): [True: 729, False: 3.91k]
  ------------------
 5373|    729|              return 0;
 5374|  3.91k|            else
 5375|  3.91k|              yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
  ------------------
  |  |  100|  3.91k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
 5376|  4.64k|          }
 5377|  1.23k|    }
 5378|    505|  if (yyarg && yycount == 0 && 0 < yyargn)
  ------------------
  |  Branch (5378:7): [True: 505, False: 0]
  |  Branch (5378:16): [True: 0, False: 505]
  |  Branch (5378:32): [True: 0, False: 0]
  ------------------
 5379|      0|    yyarg[0] = YYSYMBOL_YYEMPTY;
 5380|    505|  return yycount;
 5381|  1.23k|}
glslang_tab.cpp:_ZL9yytnamerrPcPKc:
 5432|  4.46k|{
 5433|  4.46k|  if (*yystr == '"')
  ------------------
  |  Branch (5433:7): [True: 1.30k, False: 3.16k]
  ------------------
 5434|  1.30k|    {
 5435|  1.30k|      YYPTRDIFF_T yyn = 0;
  ------------------
  |  |  865|  1.30k|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5436|  1.30k|      char const *yyp = yystr;
 5437|  1.30k|      for (;;)
 5438|  15.6k|        switch (*++yyp)
 5439|  15.6k|          {
 5440|      0|          case '\'':
  ------------------
  |  Branch (5440:11): [True: 0, False: 15.6k]
  ------------------
 5441|      0|          case ',':
  ------------------
  |  Branch (5441:11): [True: 0, False: 15.6k]
  ------------------
 5442|      0|            goto do_not_strip_quotes;
 5443|       |
 5444|      0|          case '\\':
  ------------------
  |  Branch (5444:11): [True: 0, False: 15.6k]
  ------------------
 5445|      0|            if (*++yyp != '\\')
  ------------------
  |  Branch (5445:17): [True: 0, False: 0]
  ------------------
 5446|      0|              goto do_not_strip_quotes;
 5447|      0|            else
 5448|      0|              goto append;
 5449|       |
 5450|      0|          append:
 5451|  14.3k|          default:
  ------------------
  |  Branch (5451:11): [True: 14.3k, False: 1.30k]
  ------------------
 5452|  14.3k|            if (yyres)
  ------------------
  |  Branch (5452:17): [True: 7.15k, False: 7.15k]
  ------------------
 5453|  7.15k|              yyres[yyn] = *yyp;
 5454|  14.3k|            yyn++;
 5455|  14.3k|            break;
 5456|       |
 5457|  1.30k|          case '"':
  ------------------
  |  Branch (5457:11): [True: 1.30k, False: 14.3k]
  ------------------
 5458|  1.30k|            if (yyres)
  ------------------
  |  Branch (5458:17): [True: 650, False: 650]
  ------------------
 5459|    650|              yyres[yyn] = '\0';
 5460|  1.30k|            return yyn;
 5461|  15.6k|          }
 5462|      0|    do_not_strip_quotes: ;
 5463|      0|    }
 5464|       |
 5465|  3.16k|  if (yyres)
  ------------------
  |  Branch (5465:7): [True: 1.58k, False: 1.58k]
  ------------------
 5466|  1.58k|    return yystpcpy (yyres, yystr) - yyres;
  ------------------
  |  | 5404|  1.58k|#  define yystpcpy stpcpy
  ------------------
 5467|  1.58k|  else
 5468|  1.58k|    return yystrlen (yystr);
  ------------------
  |  | 5388|  1.58k|#  define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
  |  |  ------------------
  |  |  |  |  100|  1.58k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
 5469|  3.16k|}
glslang_tab.cpp:_ZL10yydestructPKc15yysymbol_kind_tP7YYSTYPEPN7glslang13TParseContextE:
 5614|  26.1k|{
 5615|  26.1k|  YY_USE (yyvaluep);
  ------------------
  |  |  938|  26.1k|# define YY_USE(E) ((void) (E))
  ------------------
 5616|  26.1k|  YY_USE (pParseContext);
  ------------------
  |  |  938|  26.1k|# define YY_USE(E) ((void) (E))
  ------------------
 5617|  26.1k|  if (!yymsg)
  ------------------
  |  Branch (5617:7): [True: 0, False: 26.1k]
  ------------------
 5618|      0|    yymsg = "Deleting";
 5619|  26.1k|  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
  ------------------
  |  | 5208|  26.1k|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 5209|  26.1k|do {                                                                      \
  |  | 5210|  26.1k|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (5210:7): [True: 0, False: 26.1k]
  |  |  ------------------
  |  | 5211|  26.1k|    {                                                                     \
  |  | 5212|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5213|      0|      yy_symbol_print (stderr,                                            \
  |  | 5214|      0|                  Kind, Value, pParseContext); \
  |  | 5215|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 5196|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 5216|      0|    }                                                                     \
  |  | 5217|  26.1k|} while (0)
  |  |  ------------------
  |  |  |  Branch (5217:10): [Folded, False: 26.1k]
  |  |  ------------------
  ------------------
 5620|       |
 5621|  26.1k|  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
 5622|  26.1k|  YY_USE (yykind);
  ------------------
  |  |  938|  26.1k|# define YY_USE(E) ((void) (E))
  ------------------
 5623|  26.1k|  YY_IGNORE_MAYBE_UNINITIALIZED_END
 5624|  26.1k|}

_ZN7glslang16TOutputTraverser14visitAggregateENS_6TVisitEPNS_16TIntermAggregateE:
  544|  1.78k|{
  545|  1.78k|    TInfoSink& out = infoSink;
  546|       |
  547|  1.78k|    if (node->getOp() == EOpNull) {
  ------------------
  |  Branch (547:9): [True: 890, False: 892]
  ------------------
  548|    890|        out.debug.message(EPrefixError, "node is still EOpNull!");
  549|    890|        return true;
  550|    890|    }
  551|       |
  552|    892|    OutputTreeText(out, node, depth);
  553|       |
  554|    892|    switch (node->getOp()) {
  555|      1|    case EOpSequence:      out.debug << "Sequence\n";       return true;
  ------------------
  |  Branch (555:5): [True: 1, False: 891]
  ------------------
  556|      0|    case EOpScope:         out.debug << "Scope\n";       return true;
  ------------------
  |  Branch (556:5): [True: 0, False: 892]
  ------------------
  557|    891|    case EOpLinkerObjects: out.debug << "Linker Objects\n"; return true;
  ------------------
  |  Branch (557:5): [True: 891, False: 1]
  ------------------
  558|      0|    case EOpComma:         out.debug << "Comma";            break;
  ------------------
  |  Branch (558:5): [True: 0, False: 892]
  ------------------
  559|      0|    case EOpFunction:      out.debug << "Function Definition: " << node->getName(); break;
  ------------------
  |  Branch (559:5): [True: 0, False: 892]
  ------------------
  560|      0|    case EOpFunctionCall:  out.debug << "Function Call: "       << node->getName(); break;
  ------------------
  |  Branch (560:5): [True: 0, False: 892]
  ------------------
  561|      0|    case EOpParameters:    out.debug << "Function Parameters: ";                    break;
  ------------------
  |  Branch (561:5): [True: 0, False: 892]
  ------------------
  562|       |
  563|      0|    case EOpConstructFloat: out.debug << "Construct float"; break;
  ------------------
  |  Branch (563:5): [True: 0, False: 892]
  ------------------
  564|      0|    case EOpConstructDouble:out.debug << "Construct double"; break;
  ------------------
  |  Branch (564:5): [True: 0, False: 892]
  ------------------
  565|       |
  566|      0|    case EOpConstructVec2:  out.debug << "Construct vec2";  break;
  ------------------
  |  Branch (566:5): [True: 0, False: 892]
  ------------------
  567|      0|    case EOpConstructVec3:  out.debug << "Construct vec3";  break;
  ------------------
  |  Branch (567:5): [True: 0, False: 892]
  ------------------
  568|      0|    case EOpConstructVec4:  out.debug << "Construct vec4";  break;
  ------------------
  |  Branch (568:5): [True: 0, False: 892]
  ------------------
  569|      0|    case EOpConstructDVec2: out.debug << "Construct dvec2";  break;
  ------------------
  |  Branch (569:5): [True: 0, False: 892]
  ------------------
  570|      0|    case EOpConstructDVec3: out.debug << "Construct dvec3";  break;
  ------------------
  |  Branch (570:5): [True: 0, False: 892]
  ------------------
  571|      0|    case EOpConstructDVec4: out.debug << "Construct dvec4";  break;
  ------------------
  |  Branch (571:5): [True: 0, False: 892]
  ------------------
  572|      0|    case EOpConstructBool:  out.debug << "Construct bool";  break;
  ------------------
  |  Branch (572:5): [True: 0, False: 892]
  ------------------
  573|      0|    case EOpConstructBVec2: out.debug << "Construct bvec2"; break;
  ------------------
  |  Branch (573:5): [True: 0, False: 892]
  ------------------
  574|      0|    case EOpConstructBVec3: out.debug << "Construct bvec3"; break;
  ------------------
  |  Branch (574:5): [True: 0, False: 892]
  ------------------
  575|      0|    case EOpConstructBVec4: out.debug << "Construct bvec4"; break;
  ------------------
  |  Branch (575:5): [True: 0, False: 892]
  ------------------
  576|      0|    case EOpConstructInt8:   out.debug << "Construct int8_t";   break;
  ------------------
  |  Branch (576:5): [True: 0, False: 892]
  ------------------
  577|      0|    case EOpConstructI8Vec2: out.debug << "Construct i8vec2"; break;
  ------------------
  |  Branch (577:5): [True: 0, False: 892]
  ------------------
  578|      0|    case EOpConstructI8Vec3: out.debug << "Construct i8vec3"; break;
  ------------------
  |  Branch (578:5): [True: 0, False: 892]
  ------------------
  579|      0|    case EOpConstructI8Vec4: out.debug << "Construct i8vec4"; break;
  ------------------
  |  Branch (579:5): [True: 0, False: 892]
  ------------------
  580|      0|    case EOpConstructInt:   out.debug << "Construct int";   break;
  ------------------
  |  Branch (580:5): [True: 0, False: 892]
  ------------------
  581|      0|    case EOpConstructIVec2: out.debug << "Construct ivec2"; break;
  ------------------
  |  Branch (581:5): [True: 0, False: 892]
  ------------------
  582|      0|    case EOpConstructIVec3: out.debug << "Construct ivec3"; break;
  ------------------
  |  Branch (582:5): [True: 0, False: 892]
  ------------------
  583|      0|    case EOpConstructIVec4: out.debug << "Construct ivec4"; break;
  ------------------
  |  Branch (583:5): [True: 0, False: 892]
  ------------------
  584|      0|    case EOpConstructUint8:    out.debug << "Construct uint8_t";    break;
  ------------------
  |  Branch (584:5): [True: 0, False: 892]
  ------------------
  585|      0|    case EOpConstructU8Vec2:   out.debug << "Construct u8vec2";   break;
  ------------------
  |  Branch (585:5): [True: 0, False: 892]
  ------------------
  586|      0|    case EOpConstructU8Vec3:   out.debug << "Construct u8vec3";   break;
  ------------------
  |  Branch (586:5): [True: 0, False: 892]
  ------------------
  587|      0|    case EOpConstructU8Vec4:   out.debug << "Construct u8vec4";   break;
  ------------------
  |  Branch (587:5): [True: 0, False: 892]
  ------------------
  588|      0|    case EOpConstructUint:    out.debug << "Construct uint";    break;
  ------------------
  |  Branch (588:5): [True: 0, False: 892]
  ------------------
  589|      0|    case EOpConstructUVec2:   out.debug << "Construct uvec2";   break;
  ------------------
  |  Branch (589:5): [True: 0, False: 892]
  ------------------
  590|      0|    case EOpConstructUVec3:   out.debug << "Construct uvec3";   break;
  ------------------
  |  Branch (590:5): [True: 0, False: 892]
  ------------------
  591|      0|    case EOpConstructUVec4:   out.debug << "Construct uvec4";   break;
  ------------------
  |  Branch (591:5): [True: 0, False: 892]
  ------------------
  592|      0|    case EOpConstructInt64:   out.debug << "Construct int64"; break;
  ------------------
  |  Branch (592:5): [True: 0, False: 892]
  ------------------
  593|      0|    case EOpConstructI64Vec2: out.debug << "Construct i64vec2"; break;
  ------------------
  |  Branch (593:5): [True: 0, False: 892]
  ------------------
  594|      0|    case EOpConstructI64Vec3: out.debug << "Construct i64vec3"; break;
  ------------------
  |  Branch (594:5): [True: 0, False: 892]
  ------------------
  595|      0|    case EOpConstructI64Vec4: out.debug << "Construct i64vec4"; break;
  ------------------
  |  Branch (595:5): [True: 0, False: 892]
  ------------------
  596|      0|    case EOpConstructUint64:  out.debug << "Construct uint64"; break;
  ------------------
  |  Branch (596:5): [True: 0, False: 892]
  ------------------
  597|      0|    case EOpConstructU64Vec2: out.debug << "Construct u64vec2"; break;
  ------------------
  |  Branch (597:5): [True: 0, False: 892]
  ------------------
  598|      0|    case EOpConstructU64Vec3: out.debug << "Construct u64vec3"; break;
  ------------------
  |  Branch (598:5): [True: 0, False: 892]
  ------------------
  599|      0|    case EOpConstructU64Vec4: out.debug << "Construct u64vec4"; break;
  ------------------
  |  Branch (599:5): [True: 0, False: 892]
  ------------------
  600|      0|    case EOpConstructInt16:   out.debug << "Construct int16_t"; break;
  ------------------
  |  Branch (600:5): [True: 0, False: 892]
  ------------------
  601|      0|    case EOpConstructI16Vec2: out.debug << "Construct i16vec2"; break;
  ------------------
  |  Branch (601:5): [True: 0, False: 892]
  ------------------
  602|      0|    case EOpConstructI16Vec3: out.debug << "Construct i16vec3"; break;
  ------------------
  |  Branch (602:5): [True: 0, False: 892]
  ------------------
  603|      0|    case EOpConstructI16Vec4: out.debug << "Construct i16vec4"; break;
  ------------------
  |  Branch (603:5): [True: 0, False: 892]
  ------------------
  604|      0|    case EOpConstructUint16:  out.debug << "Construct uint16_t"; break;
  ------------------
  |  Branch (604:5): [True: 0, False: 892]
  ------------------
  605|      0|    case EOpConstructU16Vec2: out.debug << "Construct u16vec2"; break;
  ------------------
  |  Branch (605:5): [True: 0, False: 892]
  ------------------
  606|      0|    case EOpConstructU16Vec3: out.debug << "Construct u16vec3"; break;
  ------------------
  |  Branch (606:5): [True: 0, False: 892]
  ------------------
  607|      0|    case EOpConstructU16Vec4: out.debug << "Construct u16vec4"; break;
  ------------------
  |  Branch (607:5): [True: 0, False: 892]
  ------------------
  608|      0|    case EOpConstructMat2x2:  out.debug << "Construct mat2";    break;
  ------------------
  |  Branch (608:5): [True: 0, False: 892]
  ------------------
  609|      0|    case EOpConstructMat2x3:  out.debug << "Construct mat2x3";  break;
  ------------------
  |  Branch (609:5): [True: 0, False: 892]
  ------------------
  610|      0|    case EOpConstructMat2x4:  out.debug << "Construct mat2x4";  break;
  ------------------
  |  Branch (610:5): [True: 0, False: 892]
  ------------------
  611|      0|    case EOpConstructMat3x2:  out.debug << "Construct mat3x2";  break;
  ------------------
  |  Branch (611:5): [True: 0, False: 892]
  ------------------
  612|      0|    case EOpConstructMat3x3:  out.debug << "Construct mat3";    break;
  ------------------
  |  Branch (612:5): [True: 0, False: 892]
  ------------------
  613|      0|    case EOpConstructMat3x4:  out.debug << "Construct mat3x4";  break;
  ------------------
  |  Branch (613:5): [True: 0, False: 892]
  ------------------
  614|      0|    case EOpConstructMat4x2:  out.debug << "Construct mat4x2";  break;
  ------------------
  |  Branch (614:5): [True: 0, False: 892]
  ------------------
  615|      0|    case EOpConstructMat4x3:  out.debug << "Construct mat4x3";  break;
  ------------------
  |  Branch (615:5): [True: 0, False: 892]
  ------------------
  616|      0|    case EOpConstructMat4x4:  out.debug << "Construct mat4";    break;
  ------------------
  |  Branch (616:5): [True: 0, False: 892]
  ------------------
  617|      0|    case EOpConstructDMat2x2: out.debug << "Construct dmat2";   break;
  ------------------
  |  Branch (617:5): [True: 0, False: 892]
  ------------------
  618|      0|    case EOpConstructDMat2x3: out.debug << "Construct dmat2x3"; break;
  ------------------
  |  Branch (618:5): [True: 0, False: 892]
  ------------------
  619|      0|    case EOpConstructDMat2x4: out.debug << "Construct dmat2x4"; break;
  ------------------
  |  Branch (619:5): [True: 0, False: 892]
  ------------------
  620|      0|    case EOpConstructDMat3x2: out.debug << "Construct dmat3x2"; break;
  ------------------
  |  Branch (620:5): [True: 0, False: 892]
  ------------------
  621|      0|    case EOpConstructDMat3x3: out.debug << "Construct dmat3";   break;
  ------------------
  |  Branch (621:5): [True: 0, False: 892]
  ------------------
  622|      0|    case EOpConstructDMat3x4: out.debug << "Construct dmat3x4"; break;
  ------------------
  |  Branch (622:5): [True: 0, False: 892]
  ------------------
  623|      0|    case EOpConstructDMat4x2: out.debug << "Construct dmat4x2"; break;
  ------------------
  |  Branch (623:5): [True: 0, False: 892]
  ------------------
  624|      0|    case EOpConstructDMat4x3: out.debug << "Construct dmat4x3"; break;
  ------------------
  |  Branch (624:5): [True: 0, False: 892]
  ------------------
  625|      0|    case EOpConstructDMat4x4: out.debug << "Construct dmat4";   break;
  ------------------
  |  Branch (625:5): [True: 0, False: 892]
  ------------------
  626|      0|    case EOpConstructIMat2x2: out.debug << "Construct imat2";   break;
  ------------------
  |  Branch (626:5): [True: 0, False: 892]
  ------------------
  627|      0|    case EOpConstructIMat2x3: out.debug << "Construct imat2x3"; break;
  ------------------
  |  Branch (627:5): [True: 0, False: 892]
  ------------------
  628|      0|    case EOpConstructIMat2x4: out.debug << "Construct imat2x4"; break;
  ------------------
  |  Branch (628:5): [True: 0, False: 892]
  ------------------
  629|      0|    case EOpConstructIMat3x2: out.debug << "Construct imat3x2"; break;
  ------------------
  |  Branch (629:5): [True: 0, False: 892]
  ------------------
  630|      0|    case EOpConstructIMat3x3: out.debug << "Construct imat3";   break;
  ------------------
  |  Branch (630:5): [True: 0, False: 892]
  ------------------
  631|      0|    case EOpConstructIMat3x4: out.debug << "Construct imat3x4"; break;
  ------------------
  |  Branch (631:5): [True: 0, False: 892]
  ------------------
  632|      0|    case EOpConstructIMat4x2: out.debug << "Construct imat4x2"; break;
  ------------------
  |  Branch (632:5): [True: 0, False: 892]
  ------------------
  633|      0|    case EOpConstructIMat4x3: out.debug << "Construct imat4x3"; break;
  ------------------
  |  Branch (633:5): [True: 0, False: 892]
  ------------------
  634|      0|    case EOpConstructIMat4x4: out.debug << "Construct imat4";   break;
  ------------------
  |  Branch (634:5): [True: 0, False: 892]
  ------------------
  635|      0|    case EOpConstructUMat2x2: out.debug << "Construct umat2";   break;
  ------------------
  |  Branch (635:5): [True: 0, False: 892]
  ------------------
  636|      0|    case EOpConstructUMat2x3: out.debug << "Construct umat2x3"; break;
  ------------------
  |  Branch (636:5): [True: 0, False: 892]
  ------------------
  637|      0|    case EOpConstructUMat2x4: out.debug << "Construct umat2x4"; break;
  ------------------
  |  Branch (637:5): [True: 0, False: 892]
  ------------------
  638|      0|    case EOpConstructUMat3x2: out.debug << "Construct umat3x2"; break;
  ------------------
  |  Branch (638:5): [True: 0, False: 892]
  ------------------
  639|      0|    case EOpConstructUMat3x3: out.debug << "Construct umat3";   break;
  ------------------
  |  Branch (639:5): [True: 0, False: 892]
  ------------------
  640|      0|    case EOpConstructUMat3x4: out.debug << "Construct umat3x4"; break;
  ------------------
  |  Branch (640:5): [True: 0, False: 892]
  ------------------
  641|      0|    case EOpConstructUMat4x2: out.debug << "Construct umat4x2"; break;
  ------------------
  |  Branch (641:5): [True: 0, False: 892]
  ------------------
  642|      0|    case EOpConstructUMat4x3: out.debug << "Construct umat4x3"; break;
  ------------------
  |  Branch (642:5): [True: 0, False: 892]
  ------------------
  643|      0|    case EOpConstructUMat4x4: out.debug << "Construct umat4";   break;
  ------------------
  |  Branch (643:5): [True: 0, False: 892]
  ------------------
  644|      0|    case EOpConstructBMat2x2: out.debug << "Construct bmat2";   break;
  ------------------
  |  Branch (644:5): [True: 0, False: 892]
  ------------------
  645|      0|    case EOpConstructBMat2x3: out.debug << "Construct bmat2x3"; break;
  ------------------
  |  Branch (645:5): [True: 0, False: 892]
  ------------------
  646|      0|    case EOpConstructBMat2x4: out.debug << "Construct bmat2x4"; break;
  ------------------
  |  Branch (646:5): [True: 0, False: 892]
  ------------------
  647|      0|    case EOpConstructBMat3x2: out.debug << "Construct bmat3x2"; break;
  ------------------
  |  Branch (647:5): [True: 0, False: 892]
  ------------------
  648|      0|    case EOpConstructBMat3x3: out.debug << "Construct bmat3";   break;
  ------------------
  |  Branch (648:5): [True: 0, False: 892]
  ------------------
  649|      0|    case EOpConstructBMat3x4: out.debug << "Construct bmat3x4"; break;
  ------------------
  |  Branch (649:5): [True: 0, False: 892]
  ------------------
  650|      0|    case EOpConstructBMat4x2: out.debug << "Construct bmat4x2"; break;
  ------------------
  |  Branch (650:5): [True: 0, False: 892]
  ------------------
  651|      0|    case EOpConstructBMat4x3: out.debug << "Construct bmat4x3"; break;
  ------------------
  |  Branch (651:5): [True: 0, False: 892]
  ------------------
  652|      0|    case EOpConstructBMat4x4: out.debug << "Construct bmat4";   break;
  ------------------
  |  Branch (652:5): [True: 0, False: 892]
  ------------------
  653|      0|    case EOpConstructBFloat16:  out.debug << "Construct bfloat16_t"; break;
  ------------------
  |  Branch (653:5): [True: 0, False: 892]
  ------------------
  654|      0|    case EOpConstructBF16Vec2:  out.debug << "Construct bf16vec2";   break;
  ------------------
  |  Branch (654:5): [True: 0, False: 892]
  ------------------
  655|      0|    case EOpConstructBF16Vec3:  out.debug << "Construct bf16vec3";   break;
  ------------------
  |  Branch (655:5): [True: 0, False: 892]
  ------------------
  656|      0|    case EOpConstructBF16Vec4:  out.debug << "Construct bf16vec4";   break;
  ------------------
  |  Branch (656:5): [True: 0, False: 892]
  ------------------
  657|      0|    case EOpConstructFloatE5M2:  out.debug << "Construct floate5m2_t"; break;
  ------------------
  |  Branch (657:5): [True: 0, False: 892]
  ------------------
  658|      0|    case EOpConstructFloatE5M2Vec2:  out.debug << "Construct fe5m2vec2";   break;
  ------------------
  |  Branch (658:5): [True: 0, False: 892]
  ------------------
  659|      0|    case EOpConstructFloatE5M2Vec3:  out.debug << "Construct fe5m2vec3";   break;
  ------------------
  |  Branch (659:5): [True: 0, False: 892]
  ------------------
  660|      0|    case EOpConstructFloatE5M2Vec4:  out.debug << "Construct fe5m2vec4";   break;
  ------------------
  |  Branch (660:5): [True: 0, False: 892]
  ------------------
  661|      0|    case EOpConstructFloatE4M3:  out.debug << "Construct floate4m3_t"; break;
  ------------------
  |  Branch (661:5): [True: 0, False: 892]
  ------------------
  662|      0|    case EOpConstructFloatE4M3Vec2:  out.debug << "Construct fe4m3vec2";   break;
  ------------------
  |  Branch (662:5): [True: 0, False: 892]
  ------------------
  663|      0|    case EOpConstructFloatE4M3Vec3:  out.debug << "Construct fe4m3vec3";   break;
  ------------------
  |  Branch (663:5): [True: 0, False: 892]
  ------------------
  664|      0|    case EOpConstructFloatE4M3Vec4:  out.debug << "Construct fe4m3vec4";   break;
  ------------------
  |  Branch (664:5): [True: 0, False: 892]
  ------------------
  665|      0|    case EOpConstructFloatE2M1:  out.debug << "Construct floate2m1_t"; break;
  ------------------
  |  Branch (665:5): [True: 0, False: 892]
  ------------------
  666|      0|    case EOpConstructFloatE2M1Vec2:  out.debug << "Construct fe2m1vec2";   break;
  ------------------
  |  Branch (666:5): [True: 0, False: 892]
  ------------------
  667|      0|    case EOpConstructFloatE2M1Vec3:  out.debug << "Construct fe2m1vec3";   break;
  ------------------
  |  Branch (667:5): [True: 0, False: 892]
  ------------------
  668|      0|    case EOpConstructFloatE2M1Vec4:  out.debug << "Construct fe2m1vec4";   break;
  ------------------
  |  Branch (668:5): [True: 0, False: 892]
  ------------------
  669|      0|    case EOpConstructFloatE3M2:  out.debug << "Construct floate3m2_t"; break;
  ------------------
  |  Branch (669:5): [True: 0, False: 892]
  ------------------
  670|      0|    case EOpConstructFloatE3M2Vec2:  out.debug << "Construct fe3m2vec2";   break;
  ------------------
  |  Branch (670:5): [True: 0, False: 892]
  ------------------
  671|      0|    case EOpConstructFloatE3M2Vec3:  out.debug << "Construct fe3m2vec3";   break;
  ------------------
  |  Branch (671:5): [True: 0, False: 892]
  ------------------
  672|      0|    case EOpConstructFloatE3M2Vec4:  out.debug << "Construct fe3m2vec4";   break;
  ------------------
  |  Branch (672:5): [True: 0, False: 892]
  ------------------
  673|      0|    case EOpConstructFloatE2M3:  out.debug << "Construct floate2m3_t"; break;
  ------------------
  |  Branch (673:5): [True: 0, False: 892]
  ------------------
  674|      0|    case EOpConstructFloatE2M3Vec2:  out.debug << "Construct fe2m3vec2";   break;
  ------------------
  |  Branch (674:5): [True: 0, False: 892]
  ------------------
  675|      0|    case EOpConstructFloatE2M3Vec3:  out.debug << "Construct fe2m3vec3";   break;
  ------------------
  |  Branch (675:5): [True: 0, False: 892]
  ------------------
  676|      0|    case EOpConstructFloatE2M3Vec4:  out.debug << "Construct fe2m3vec4";   break;
  ------------------
  |  Branch (676:5): [True: 0, False: 892]
  ------------------
  677|      0|    case EOpConstructFloatUE8M0:  out.debug << "Construct floatue8m0_t"; break;
  ------------------
  |  Branch (677:5): [True: 0, False: 892]
  ------------------
  678|      0|    case EOpConstructFloatUE8M0Vec2:  out.debug << "Construct fue8m0vec2";   break;
  ------------------
  |  Branch (678:5): [True: 0, False: 892]
  ------------------
  679|      0|    case EOpConstructFloatUE8M0Vec3:  out.debug << "Construct fue8m0vec3";   break;
  ------------------
  |  Branch (679:5): [True: 0, False: 892]
  ------------------
  680|      0|    case EOpConstructFloatUE8M0Vec4:  out.debug << "Construct fue8m0vec4";   break;
  ------------------
  |  Branch (680:5): [True: 0, False: 892]
  ------------------
  681|      0|    case EOpConstructFloatMXINT8:  out.debug << "Construct floatmxint8_t"; break;
  ------------------
  |  Branch (681:5): [True: 0, False: 892]
  ------------------
  682|      0|    case EOpConstructFloatMXINT8Vec2:  out.debug << "Construct fmxint8vec2";   break;
  ------------------
  |  Branch (682:5): [True: 0, False: 892]
  ------------------
  683|      0|    case EOpConstructFloatMXINT8Vec3:  out.debug << "Construct fmxint8vec3";   break;
  ------------------
  |  Branch (683:5): [True: 0, False: 892]
  ------------------
  684|      0|    case EOpConstructFloatMXINT8Vec4:  out.debug << "Construct fmxint8vec4";   break;
  ------------------
  |  Branch (684:5): [True: 0, False: 892]
  ------------------
  685|      0|    case EOpConstructFloat16:   out.debug << "Construct float16_t"; break;
  ------------------
  |  Branch (685:5): [True: 0, False: 892]
  ------------------
  686|      0|    case EOpConstructF16Vec2:   out.debug << "Construct f16vec2";   break;
  ------------------
  |  Branch (686:5): [True: 0, False: 892]
  ------------------
  687|      0|    case EOpConstructF16Vec3:   out.debug << "Construct f16vec3";   break;
  ------------------
  |  Branch (687:5): [True: 0, False: 892]
  ------------------
  688|      0|    case EOpConstructF16Vec4:   out.debug << "Construct f16vec4";   break;
  ------------------
  |  Branch (688:5): [True: 0, False: 892]
  ------------------
  689|      0|    case EOpConstructF16Mat2x2: out.debug << "Construct f16mat2";   break;
  ------------------
  |  Branch (689:5): [True: 0, False: 892]
  ------------------
  690|      0|    case EOpConstructF16Mat2x3: out.debug << "Construct f16mat2x3"; break;
  ------------------
  |  Branch (690:5): [True: 0, False: 892]
  ------------------
  691|      0|    case EOpConstructF16Mat2x4: out.debug << "Construct f16mat2x4"; break;
  ------------------
  |  Branch (691:5): [True: 0, False: 892]
  ------------------
  692|      0|    case EOpConstructF16Mat3x2: out.debug << "Construct f16mat3x2"; break;
  ------------------
  |  Branch (692:5): [True: 0, False: 892]
  ------------------
  693|      0|    case EOpConstructF16Mat3x3: out.debug << "Construct f16mat3";   break;
  ------------------
  |  Branch (693:5): [True: 0, False: 892]
  ------------------
  694|      0|    case EOpConstructF16Mat3x4: out.debug << "Construct f16mat3x4"; break;
  ------------------
  |  Branch (694:5): [True: 0, False: 892]
  ------------------
  695|      0|    case EOpConstructF16Mat4x2: out.debug << "Construct f16mat4x2"; break;
  ------------------
  |  Branch (695:5): [True: 0, False: 892]
  ------------------
  696|      0|    case EOpConstructF16Mat4x3: out.debug << "Construct f16mat4x3"; break;
  ------------------
  |  Branch (696:5): [True: 0, False: 892]
  ------------------
  697|      0|    case EOpConstructF16Mat4x4: out.debug << "Construct f16mat4";   break;
  ------------------
  |  Branch (697:5): [True: 0, False: 892]
  ------------------
  698|      0|    case EOpConstructStruct:  out.debug << "Construct structure";  break;
  ------------------
  |  Branch (698:5): [True: 0, False: 892]
  ------------------
  699|      0|    case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break;
  ------------------
  |  Branch (699:5): [True: 0, False: 892]
  ------------------
  700|      0|    case EOpConstructReference:  out.debug << "Construct reference";  break;
  ------------------
  |  Branch (700:5): [True: 0, False: 892]
  ------------------
  701|      0|    case EOpConstructCooperativeMatrixNV:  out.debug << "Construct cooperative matrix NV";  break;
  ------------------
  |  Branch (701:5): [True: 0, False: 892]
  ------------------
  702|      0|    case EOpConstructCooperativeMatrixKHR:  out.debug << "Construct cooperative matrix KHR";  break;
  ------------------
  |  Branch (702:5): [True: 0, False: 892]
  ------------------
  703|      0|    case EOpConstructCooperativeVectorNV:  out.debug << "Construct cooperative vector NV";  break;
  ------------------
  |  Branch (703:5): [True: 0, False: 892]
  ------------------
  704|      0|    case EOpConstructAccStruct: out.debug << "Construct acceleration structure"; break;
  ------------------
  |  Branch (704:5): [True: 0, False: 892]
  ------------------
  705|       |
  706|      0|    case EOpBitCastArrayQCOM:              out.debug << "Bitcast To Array QCOM"; break;
  ------------------
  |  Branch (706:5): [True: 0, False: 892]
  ------------------
  707|      0|    case EOpExtractSubArrayQCOM:           out.debug << "Extract Subarray QCOM"; break;
  ------------------
  |  Branch (707:5): [True: 0, False: 892]
  ------------------
  708|      0|    case EOpCompositeConstructCoopMatQCOM:   out.debug << "Construct Cooperative Matrix QCOM"; break;
  ------------------
  |  Branch (708:5): [True: 0, False: 892]
  ------------------
  709|      0|    case EOpCompositeExtractCoopMatQCOM:     out.debug << "Extract Cooperative Matrix QCOM"; break;
  ------------------
  |  Branch (709:5): [True: 0, False: 892]
  ------------------
  710|       |
  711|      0|    case EOpLessThan:         out.debug << "Compare Less Than";             break;
  ------------------
  |  Branch (711:5): [True: 0, False: 892]
  ------------------
  712|      0|    case EOpGreaterThan:      out.debug << "Compare Greater Than";          break;
  ------------------
  |  Branch (712:5): [True: 0, False: 892]
  ------------------
  713|      0|    case EOpLessThanEqual:    out.debug << "Compare Less Than or Equal";    break;
  ------------------
  |  Branch (713:5): [True: 0, False: 892]
  ------------------
  714|      0|    case EOpGreaterThanEqual: out.debug << "Compare Greater Than or Equal"; break;
  ------------------
  |  Branch (714:5): [True: 0, False: 892]
  ------------------
  715|      0|    case EOpVectorEqual:      out.debug << "Equal";                         break;
  ------------------
  |  Branch (715:5): [True: 0, False: 892]
  ------------------
  716|      0|    case EOpVectorNotEqual:   out.debug << "NotEqual";                      break;
  ------------------
  |  Branch (716:5): [True: 0, False: 892]
  ------------------
  717|       |
  718|      0|    case EOpMod:           out.debug << "mod";         break;
  ------------------
  |  Branch (718:5): [True: 0, False: 892]
  ------------------
  719|      0|    case EOpModf:          out.debug << "modf";        break;
  ------------------
  |  Branch (719:5): [True: 0, False: 892]
  ------------------
  720|      0|    case EOpPow:           out.debug << "pow";         break;
  ------------------
  |  Branch (720:5): [True: 0, False: 892]
  ------------------
  721|       |
  722|      0|    case EOpAtan:          out.debug << "arc tangent"; break;
  ------------------
  |  Branch (722:5): [True: 0, False: 892]
  ------------------
  723|       |
  724|      0|    case EOpMin:           out.debug << "min";         break;
  ------------------
  |  Branch (724:5): [True: 0, False: 892]
  ------------------
  725|      0|    case EOpMax:           out.debug << "max";         break;
  ------------------
  |  Branch (725:5): [True: 0, False: 892]
  ------------------
  726|      0|    case EOpClamp:         out.debug << "clamp";       break;
  ------------------
  |  Branch (726:5): [True: 0, False: 892]
  ------------------
  727|      0|    case EOpMix:           out.debug << "mix";         break;
  ------------------
  |  Branch (727:5): [True: 0, False: 892]
  ------------------
  728|      0|    case EOpStep:          out.debug << "step";        break;
  ------------------
  |  Branch (728:5): [True: 0, False: 892]
  ------------------
  729|      0|    case EOpSmoothStep:    out.debug << "smoothstep";  break;
  ------------------
  |  Branch (729:5): [True: 0, False: 892]
  ------------------
  730|       |
  731|      0|    case EOpDistance:      out.debug << "distance";                break;
  ------------------
  |  Branch (731:5): [True: 0, False: 892]
  ------------------
  732|      0|    case EOpDot:           out.debug << "dot-product";             break;
  ------------------
  |  Branch (732:5): [True: 0, False: 892]
  ------------------
  733|      0|    case EOpDotPackedEXT:  out.debug << "dot-product-packed";break;
  ------------------
  |  Branch (733:5): [True: 0, False: 892]
  ------------------
  734|      0|    case EOpDotAccSatEXT:  out.debug << "dot-product-accumulate-saturate";break;
  ------------------
  |  Branch (734:5): [True: 0, False: 892]
  ------------------
  735|      0|    case EOpDotPackedAccSatEXT:  out.debug << "dot-product-packed-accumulate-saturate";break;
  ------------------
  |  Branch (735:5): [True: 0, False: 892]
  ------------------
  736|      0|    case EOpCross:         out.debug << "cross-product";           break;
  ------------------
  |  Branch (736:5): [True: 0, False: 892]
  ------------------
  737|      0|    case EOpFaceForward:   out.debug << "face-forward";            break;
  ------------------
  |  Branch (737:5): [True: 0, False: 892]
  ------------------
  738|      0|    case EOpReflect:       out.debug << "reflect";                 break;
  ------------------
  |  Branch (738:5): [True: 0, False: 892]
  ------------------
  739|      0|    case EOpRefract:       out.debug << "refract";                 break;
  ------------------
  |  Branch (739:5): [True: 0, False: 892]
  ------------------
  740|      0|    case EOpMul:           out.debug << "component-wise multiply"; break;
  ------------------
  |  Branch (740:5): [True: 0, False: 892]
  ------------------
  741|      0|    case EOpOuterProduct:  out.debug << "outer product";           break;
  ------------------
  |  Branch (741:5): [True: 0, False: 892]
  ------------------
  742|       |
  743|      0|    case EOpEmitVertex:    out.debug << "EmitVertex";              break;
  ------------------
  |  Branch (743:5): [True: 0, False: 892]
  ------------------
  744|      0|    case EOpEndPrimitive:  out.debug << "EndPrimitive";            break;
  ------------------
  |  Branch (744:5): [True: 0, False: 892]
  ------------------
  745|       |
  746|      0|    case EOpBarrier:                    out.debug << "Barrier";                    break;
  ------------------
  |  Branch (746:5): [True: 0, False: 892]
  ------------------
  747|      0|    case EOpMemoryBarrier:              out.debug << "MemoryBarrier";              break;
  ------------------
  |  Branch (747:5): [True: 0, False: 892]
  ------------------
  748|      0|    case EOpMemoryBarrierAtomicCounter: out.debug << "MemoryBarrierAtomicCounter"; break;
  ------------------
  |  Branch (748:5): [True: 0, False: 892]
  ------------------
  749|      0|    case EOpMemoryBarrierBuffer:        out.debug << "MemoryBarrierBuffer";        break;
  ------------------
  |  Branch (749:5): [True: 0, False: 892]
  ------------------
  750|      0|    case EOpMemoryBarrierImage:         out.debug << "MemoryBarrierImage";         break;
  ------------------
  |  Branch (750:5): [True: 0, False: 892]
  ------------------
  751|      0|    case EOpMemoryBarrierShared:        out.debug << "MemoryBarrierShared";        break;
  ------------------
  |  Branch (751:5): [True: 0, False: 892]
  ------------------
  752|      0|    case EOpGroupMemoryBarrier:         out.debug << "GroupMemoryBarrier";         break;
  ------------------
  |  Branch (752:5): [True: 0, False: 892]
  ------------------
  753|       |
  754|      0|    case EOpReadInvocation:             out.debug << "readInvocation";        break;
  ------------------
  |  Branch (754:5): [True: 0, False: 892]
  ------------------
  755|       |
  756|      0|    case EOpSwizzleInvocations:         out.debug << "swizzleInvocations";       break;
  ------------------
  |  Branch (756:5): [True: 0, False: 892]
  ------------------
  757|      0|    case EOpSwizzleInvocationsMasked:   out.debug << "swizzleInvocationsMasked"; break;
  ------------------
  |  Branch (757:5): [True: 0, False: 892]
  ------------------
  758|      0|    case EOpWriteInvocation:            out.debug << "writeInvocation";          break;
  ------------------
  |  Branch (758:5): [True: 0, False: 892]
  ------------------
  759|       |
  760|      0|    case EOpMin3:                       out.debug << "min3";                  break;
  ------------------
  |  Branch (760:5): [True: 0, False: 892]
  ------------------
  761|      0|    case EOpMax3:                       out.debug << "max3";                  break;
  ------------------
  |  Branch (761:5): [True: 0, False: 892]
  ------------------
  762|      0|    case EOpMid3:                       out.debug << "mid3";                  break;
  ------------------
  |  Branch (762:5): [True: 0, False: 892]
  ------------------
  763|      0|    case EOpTime:                       out.debug << "time";                  break;
  ------------------
  |  Branch (763:5): [True: 0, False: 892]
  ------------------
  764|       |
  765|      0|    case EOpAtomicAdd:                  out.debug << "AtomicAdd";             break;
  ------------------
  |  Branch (765:5): [True: 0, False: 892]
  ------------------
  766|      0|    case EOpAtomicSubtract:             out.debug << "AtomicSubtract";        break;
  ------------------
  |  Branch (766:5): [True: 0, False: 892]
  ------------------
  767|      0|    case EOpAtomicMin:                  out.debug << "AtomicMin";             break;
  ------------------
  |  Branch (767:5): [True: 0, False: 892]
  ------------------
  768|      0|    case EOpAtomicMax:                  out.debug << "AtomicMax";             break;
  ------------------
  |  Branch (768:5): [True: 0, False: 892]
  ------------------
  769|      0|    case EOpAtomicAnd:                  out.debug << "AtomicAnd";             break;
  ------------------
  |  Branch (769:5): [True: 0, False: 892]
  ------------------
  770|      0|    case EOpAtomicOr:                   out.debug << "AtomicOr";              break;
  ------------------
  |  Branch (770:5): [True: 0, False: 892]
  ------------------
  771|      0|    case EOpAtomicXor:                  out.debug << "AtomicXor";             break;
  ------------------
  |  Branch (771:5): [True: 0, False: 892]
  ------------------
  772|      0|    case EOpAtomicExchange:             out.debug << "AtomicExchange";        break;
  ------------------
  |  Branch (772:5): [True: 0, False: 892]
  ------------------
  773|      0|    case EOpAtomicCompSwap:             out.debug << "AtomicCompSwap";        break;
  ------------------
  |  Branch (773:5): [True: 0, False: 892]
  ------------------
  774|      0|    case EOpAtomicLoad:                 out.debug << "AtomicLoad";            break;
  ------------------
  |  Branch (774:5): [True: 0, False: 892]
  ------------------
  775|      0|    case EOpAtomicStore:                out.debug << "AtomicStore";           break;
  ------------------
  |  Branch (775:5): [True: 0, False: 892]
  ------------------
  776|       |
  777|      0|    case EOpAtomicCounterAdd:           out.debug << "AtomicCounterAdd";      break;
  ------------------
  |  Branch (777:5): [True: 0, False: 892]
  ------------------
  778|      0|    case EOpAtomicCounterSubtract:      out.debug << "AtomicCounterSubtract"; break;
  ------------------
  |  Branch (778:5): [True: 0, False: 892]
  ------------------
  779|      0|    case EOpAtomicCounterMin:           out.debug << "AtomicCounterMin";      break;
  ------------------
  |  Branch (779:5): [True: 0, False: 892]
  ------------------
  780|      0|    case EOpAtomicCounterMax:           out.debug << "AtomicCounterMax";      break;
  ------------------
  |  Branch (780:5): [True: 0, False: 892]
  ------------------
  781|      0|    case EOpAtomicCounterAnd:           out.debug << "AtomicCounterAnd";      break;
  ------------------
  |  Branch (781:5): [True: 0, False: 892]
  ------------------
  782|      0|    case EOpAtomicCounterOr:            out.debug << "AtomicCounterOr";       break;
  ------------------
  |  Branch (782:5): [True: 0, False: 892]
  ------------------
  783|      0|    case EOpAtomicCounterXor:           out.debug << "AtomicCounterXor";      break;
  ------------------
  |  Branch (783:5): [True: 0, False: 892]
  ------------------
  784|      0|    case EOpAtomicCounterExchange:      out.debug << "AtomicCounterExchange"; break;
  ------------------
  |  Branch (784:5): [True: 0, False: 892]
  ------------------
  785|      0|    case EOpAtomicCounterCompSwap:      out.debug << "AtomicCounterCompSwap"; break;
  ------------------
  |  Branch (785:5): [True: 0, False: 892]
  ------------------
  786|       |
  787|      0|    case EOpImageQuerySize:             out.debug << "imageQuerySize";        break;
  ------------------
  |  Branch (787:5): [True: 0, False: 892]
  ------------------
  788|      0|    case EOpImageQuerySamples:          out.debug << "imageQuerySamples";     break;
  ------------------
  |  Branch (788:5): [True: 0, False: 892]
  ------------------
  789|      0|    case EOpImageLoad:                  out.debug << "imageLoad";             break;
  ------------------
  |  Branch (789:5): [True: 0, False: 892]
  ------------------
  790|      0|    case EOpImageStore:                 out.debug << "imageStore";            break;
  ------------------
  |  Branch (790:5): [True: 0, False: 892]
  ------------------
  791|      0|    case EOpImageAtomicAdd:             out.debug << "imageAtomicAdd";        break;
  ------------------
  |  Branch (791:5): [True: 0, False: 892]
  ------------------
  792|      0|    case EOpImageAtomicMin:             out.debug << "imageAtomicMin";        break;
  ------------------
  |  Branch (792:5): [True: 0, False: 892]
  ------------------
  793|      0|    case EOpImageAtomicMax:             out.debug << "imageAtomicMax";        break;
  ------------------
  |  Branch (793:5): [True: 0, False: 892]
  ------------------
  794|      0|    case EOpImageAtomicAnd:             out.debug << "imageAtomicAnd";        break;
  ------------------
  |  Branch (794:5): [True: 0, False: 892]
  ------------------
  795|      0|    case EOpImageAtomicOr:              out.debug << "imageAtomicOr";         break;
  ------------------
  |  Branch (795:5): [True: 0, False: 892]
  ------------------
  796|      0|    case EOpImageAtomicXor:             out.debug << "imageAtomicXor";        break;
  ------------------
  |  Branch (796:5): [True: 0, False: 892]
  ------------------
  797|      0|    case EOpImageAtomicExchange:        out.debug << "imageAtomicExchange";   break;
  ------------------
  |  Branch (797:5): [True: 0, False: 892]
  ------------------
  798|      0|    case EOpImageAtomicCompSwap:        out.debug << "imageAtomicCompSwap";   break;
  ------------------
  |  Branch (798:5): [True: 0, False: 892]
  ------------------
  799|      0|    case EOpImageAtomicLoad:            out.debug << "imageAtomicLoad";       break;
  ------------------
  |  Branch (799:5): [True: 0, False: 892]
  ------------------
  800|      0|    case EOpImageAtomicStore:           out.debug << "imageAtomicStore";      break;
  ------------------
  |  Branch (800:5): [True: 0, False: 892]
  ------------------
  801|      0|    case EOpImageLoadLod:               out.debug << "imageLoadLod";          break;
  ------------------
  |  Branch (801:5): [True: 0, False: 892]
  ------------------
  802|      0|    case EOpImageStoreLod:              out.debug << "imageStoreLod";         break;
  ------------------
  |  Branch (802:5): [True: 0, False: 892]
  ------------------
  803|       |
  804|      0|    case EOpTextureQuerySize:           out.debug << "textureSize";           break;
  ------------------
  |  Branch (804:5): [True: 0, False: 892]
  ------------------
  805|      0|    case EOpTextureQueryLod:            out.debug << "textureQueryLod";       break;
  ------------------
  |  Branch (805:5): [True: 0, False: 892]
  ------------------
  806|      0|    case EOpTextureQueryLevels:         out.debug << "textureQueryLevels";    break;
  ------------------
  |  Branch (806:5): [True: 0, False: 892]
  ------------------
  807|      0|    case EOpTextureQuerySamples:        out.debug << "textureSamples";        break;
  ------------------
  |  Branch (807:5): [True: 0, False: 892]
  ------------------
  808|      0|    case EOpTexture:                    out.debug << "texture";               break;
  ------------------
  |  Branch (808:5): [True: 0, False: 892]
  ------------------
  809|      0|    case EOpTextureProj:                out.debug << "textureProj";           break;
  ------------------
  |  Branch (809:5): [True: 0, False: 892]
  ------------------
  810|      0|    case EOpTextureLod:                 out.debug << "textureLod";            break;
  ------------------
  |  Branch (810:5): [True: 0, False: 892]
  ------------------
  811|      0|    case EOpTextureOffset:              out.debug << "textureOffset";         break;
  ------------------
  |  Branch (811:5): [True: 0, False: 892]
  ------------------
  812|      0|    case EOpTextureFetch:               out.debug << "textureFetch";          break;
  ------------------
  |  Branch (812:5): [True: 0, False: 892]
  ------------------
  813|      0|    case EOpTextureFetchOffset:         out.debug << "textureFetchOffset";    break;
  ------------------
  |  Branch (813:5): [True: 0, False: 892]
  ------------------
  814|      0|    case EOpTextureProjOffset:          out.debug << "textureProjOffset";     break;
  ------------------
  |  Branch (814:5): [True: 0, False: 892]
  ------------------
  815|      0|    case EOpTextureLodOffset:           out.debug << "textureLodOffset";      break;
  ------------------
  |  Branch (815:5): [True: 0, False: 892]
  ------------------
  816|      0|    case EOpTextureProjLod:             out.debug << "textureProjLod";        break;
  ------------------
  |  Branch (816:5): [True: 0, False: 892]
  ------------------
  817|      0|    case EOpTextureProjLodOffset:       out.debug << "textureProjLodOffset";  break;
  ------------------
  |  Branch (817:5): [True: 0, False: 892]
  ------------------
  818|      0|    case EOpTextureGrad:                out.debug << "textureGrad";           break;
  ------------------
  |  Branch (818:5): [True: 0, False: 892]
  ------------------
  819|      0|    case EOpTextureGradOffset:          out.debug << "textureGradOffset";     break;
  ------------------
  |  Branch (819:5): [True: 0, False: 892]
  ------------------
  820|      0|    case EOpTextureProjGrad:            out.debug << "textureProjGrad";       break;
  ------------------
  |  Branch (820:5): [True: 0, False: 892]
  ------------------
  821|      0|    case EOpTextureProjGradOffset:      out.debug << "textureProjGradOffset"; break;
  ------------------
  |  Branch (821:5): [True: 0, False: 892]
  ------------------
  822|      0|    case EOpTextureGather:              out.debug << "textureGather";         break;
  ------------------
  |  Branch (822:5): [True: 0, False: 892]
  ------------------
  823|      0|    case EOpTextureGatherOffset:        out.debug << "textureGatherOffset";   break;
  ------------------
  |  Branch (823:5): [True: 0, False: 892]
  ------------------
  824|      0|    case EOpTextureGatherOffsets:       out.debug << "textureGatherOffsets";  break;
  ------------------
  |  Branch (824:5): [True: 0, False: 892]
  ------------------
  825|      0|    case EOpTextureClamp:               out.debug << "textureClamp";          break;
  ------------------
  |  Branch (825:5): [True: 0, False: 892]
  ------------------
  826|      0|    case EOpTextureOffsetClamp:         out.debug << "textureOffsetClamp";    break;
  ------------------
  |  Branch (826:5): [True: 0, False: 892]
  ------------------
  827|      0|    case EOpTextureGradClamp:           out.debug << "textureGradClamp";      break;
  ------------------
  |  Branch (827:5): [True: 0, False: 892]
  ------------------
  828|      0|    case EOpTextureGradOffsetClamp:     out.debug << "textureGradOffsetClamp";  break;
  ------------------
  |  Branch (828:5): [True: 0, False: 892]
  ------------------
  829|      0|    case EOpTextureGatherLod:           out.debug << "textureGatherLod";        break;
  ------------------
  |  Branch (829:5): [True: 0, False: 892]
  ------------------
  830|      0|    case EOpTextureGatherLodOffset:     out.debug << "textureGatherLodOffset";  break;
  ------------------
  |  Branch (830:5): [True: 0, False: 892]
  ------------------
  831|      0|    case EOpTextureGatherLodOffsets:    out.debug << "textureGatherLodOffsets"; break;
  ------------------
  |  Branch (831:5): [True: 0, False: 892]
  ------------------
  832|       |
  833|      0|    case EOpSparseTexture:                  out.debug << "sparseTexture";                   break;
  ------------------
  |  Branch (833:5): [True: 0, False: 892]
  ------------------
  834|      0|    case EOpSparseTextureOffset:            out.debug << "sparseTextureOffset";             break;
  ------------------
  |  Branch (834:5): [True: 0, False: 892]
  ------------------
  835|      0|    case EOpSparseTextureLod:               out.debug << "sparseTextureLod";                break;
  ------------------
  |  Branch (835:5): [True: 0, False: 892]
  ------------------
  836|      0|    case EOpSparseTextureLodOffset:         out.debug << "sparseTextureLodOffset";          break;
  ------------------
  |  Branch (836:5): [True: 0, False: 892]
  ------------------
  837|      0|    case EOpSparseTextureFetch:             out.debug << "sparseTexelFetch";                break;
  ------------------
  |  Branch (837:5): [True: 0, False: 892]
  ------------------
  838|      0|    case EOpSparseTextureFetchOffset:       out.debug << "sparseTexelFetchOffset";          break;
  ------------------
  |  Branch (838:5): [True: 0, False: 892]
  ------------------
  839|      0|    case EOpSparseTextureGrad:              out.debug << "sparseTextureGrad";               break;
  ------------------
  |  Branch (839:5): [True: 0, False: 892]
  ------------------
  840|      0|    case EOpSparseTextureGradOffset:        out.debug << "sparseTextureGradOffset";         break;
  ------------------
  |  Branch (840:5): [True: 0, False: 892]
  ------------------
  841|      0|    case EOpSparseTextureGather:            out.debug << "sparseTextureGather";             break;
  ------------------
  |  Branch (841:5): [True: 0, False: 892]
  ------------------
  842|      0|    case EOpSparseTextureGatherOffset:      out.debug << "sparseTextureGatherOffset";       break;
  ------------------
  |  Branch (842:5): [True: 0, False: 892]
  ------------------
  843|      0|    case EOpSparseTextureGatherOffsets:     out.debug << "sparseTextureGatherOffsets";      break;
  ------------------
  |  Branch (843:5): [True: 0, False: 892]
  ------------------
  844|      0|    case EOpSparseImageLoad:                out.debug << "sparseImageLoad";                 break;
  ------------------
  |  Branch (844:5): [True: 0, False: 892]
  ------------------
  845|      0|    case EOpSparseTextureClamp:             out.debug << "sparseTextureClamp";              break;
  ------------------
  |  Branch (845:5): [True: 0, False: 892]
  ------------------
  846|      0|    case EOpSparseTextureOffsetClamp:       out.debug << "sparseTextureOffsetClamp";        break;
  ------------------
  |  Branch (846:5): [True: 0, False: 892]
  ------------------
  847|      0|    case EOpSparseTextureGradClamp:         out.debug << "sparseTextureGradClamp";          break;
  ------------------
  |  Branch (847:5): [True: 0, False: 892]
  ------------------
  848|      0|    case EOpSparseTextureGradOffsetClamp:   out.debug << "sparseTextureGradOffsetClam";     break;
  ------------------
  |  Branch (848:5): [True: 0, False: 892]
  ------------------
  849|      0|    case EOpSparseTextureGatherLod:         out.debug << "sparseTextureGatherLod";          break;
  ------------------
  |  Branch (849:5): [True: 0, False: 892]
  ------------------
  850|      0|    case EOpSparseTextureGatherLodOffset:   out.debug << "sparseTextureGatherLodOffset";    break;
  ------------------
  |  Branch (850:5): [True: 0, False: 892]
  ------------------
  851|      0|    case EOpSparseTextureGatherLodOffsets:  out.debug << "sparseTextureGatherLodOffsets";   break;
  ------------------
  |  Branch (851:5): [True: 0, False: 892]
  ------------------
  852|      0|    case EOpSparseImageLoadLod:             out.debug << "sparseImageLoadLod";              break;
  ------------------
  |  Branch (852:5): [True: 0, False: 892]
  ------------------
  853|      0|    case EOpTextureGather4x1QCOM:           out.debug << "textureGather4x1QCOM";            break;
  ------------------
  |  Branch (853:5): [True: 0, False: 892]
  ------------------
  854|      0|    case EOpTextureGatherV2QCOM:            out.debug << "textureGatherV2QCOM";             break;
  ------------------
  |  Branch (854:5): [True: 0, False: 892]
  ------------------
  855|      0|    case EOpTextureGatherH2QCOM:            out.debug << "textureGatherH2QCOM";             break;
  ------------------
  |  Branch (855:5): [True: 0, False: 892]
  ------------------
  856|      0|    case EOpTextureGatherDQCOM:             out.debug << "textureGatherDQCOM";              break;
  ------------------
  |  Branch (856:5): [True: 0, False: 892]
  ------------------
  857|      0|    case EOpTextureGather4x1OffsetQCOM:     out.debug << "textureGather4x1OffsetQCOM";      break;
  ------------------
  |  Branch (857:5): [True: 0, False: 892]
  ------------------
  858|      0|    case EOpTextureGatherV2OffsetQCOM:      out.debug << "textureGatherV2OffsetQCOM";       break;
  ------------------
  |  Branch (858:5): [True: 0, False: 892]
  ------------------
  859|      0|    case EOpTextureGatherH2OffsetQCOM:      out.debug << "textureGatherH2OffsetQCOM";       break;
  ------------------
  |  Branch (859:5): [True: 0, False: 892]
  ------------------
  860|      0|    case EOpTextureGatherDOffsetQCOM:       out.debug << "textureGatherDOffsetQCOM";        break;
  ------------------
  |  Branch (860:5): [True: 0, False: 892]
  ------------------
  861|      0|    case EOpImageSampleFootprintNV:             out.debug << "imageSampleFootprintNV";          break;
  ------------------
  |  Branch (861:5): [True: 0, False: 892]
  ------------------
  862|      0|    case EOpImageSampleFootprintClampNV:        out.debug << "imageSampleFootprintClampNV";     break;
  ------------------
  |  Branch (862:5): [True: 0, False: 892]
  ------------------
  863|      0|    case EOpImageSampleFootprintLodNV:          out.debug << "imageSampleFootprintLodNV";       break;
  ------------------
  |  Branch (863:5): [True: 0, False: 892]
  ------------------
  864|      0|    case EOpImageSampleFootprintGradNV:         out.debug << "imageSampleFootprintGradNV";      break;
  ------------------
  |  Branch (864:5): [True: 0, False: 892]
  ------------------
  865|      0|    case EOpImageSampleFootprintGradClampNV:    out.debug << "mageSampleFootprintGradClampNV";  break;
  ------------------
  |  Branch (865:5): [True: 0, False: 892]
  ------------------
  866|      0|    case EOpAddCarry:                   out.debug << "addCarry";              break;
  ------------------
  |  Branch (866:5): [True: 0, False: 892]
  ------------------
  867|      0|    case EOpSubBorrow:                  out.debug << "subBorrow";             break;
  ------------------
  |  Branch (867:5): [True: 0, False: 892]
  ------------------
  868|      0|    case EOpUMulExtended:               out.debug << "uMulExtended";          break;
  ------------------
  |  Branch (868:5): [True: 0, False: 892]
  ------------------
  869|      0|    case EOpIMulExtended:               out.debug << "iMulExtended";          break;
  ------------------
  |  Branch (869:5): [True: 0, False: 892]
  ------------------
  870|      0|    case EOpBitfieldExtract:            out.debug << "bitfieldExtract";       break;
  ------------------
  |  Branch (870:5): [True: 0, False: 892]
  ------------------
  871|      0|    case EOpBitfieldInsert:             out.debug << "bitfieldInsert";        break;
  ------------------
  |  Branch (871:5): [True: 0, False: 892]
  ------------------
  872|       |
  873|      0|    case EOpFma:                        out.debug << "fma";                   break;
  ------------------
  |  Branch (873:5): [True: 0, False: 892]
  ------------------
  874|      0|    case EOpFrexp:                      out.debug << "frexp";                 break;
  ------------------
  |  Branch (874:5): [True: 0, False: 892]
  ------------------
  875|      0|    case EOpLdexp:                      out.debug << "ldexp";                 break;
  ------------------
  |  Branch (875:5): [True: 0, False: 892]
  ------------------
  876|       |
  877|      0|    case EOpInterpolateAtSample:   out.debug << "interpolateAtSample";    break;
  ------------------
  |  Branch (877:5): [True: 0, False: 892]
  ------------------
  878|      0|    case EOpInterpolateAtOffset:   out.debug << "interpolateAtOffset";    break;
  ------------------
  |  Branch (878:5): [True: 0, False: 892]
  ------------------
  879|      0|    case EOpInterpolateAtVertex:   out.debug << "interpolateAtVertex";    break;
  ------------------
  |  Branch (879:5): [True: 0, False: 892]
  ------------------
  880|       |
  881|      0|    case EOpSinCos:                     out.debug << "sincos";                break;
  ------------------
  |  Branch (881:5): [True: 0, False: 892]
  ------------------
  882|      0|    case EOpGenMul:                     out.debug << "mul";                   break;
  ------------------
  |  Branch (882:5): [True: 0, False: 892]
  ------------------
  883|       |
  884|      0|    case EOpAllMemoryBarrierWithGroupSync:    out.debug << "AllMemoryBarrierWithGroupSync";    break;
  ------------------
  |  Branch (884:5): [True: 0, False: 892]
  ------------------
  885|      0|    case EOpDeviceMemoryBarrier:              out.debug << "DeviceMemoryBarrier";              break;
  ------------------
  |  Branch (885:5): [True: 0, False: 892]
  ------------------
  886|      0|    case EOpDeviceMemoryBarrierWithGroupSync: out.debug << "DeviceMemoryBarrierWithGroupSync"; break;
  ------------------
  |  Branch (886:5): [True: 0, False: 892]
  ------------------
  887|      0|    case EOpWorkgroupMemoryBarrier:           out.debug << "WorkgroupMemoryBarrier";           break;
  ------------------
  |  Branch (887:5): [True: 0, False: 892]
  ------------------
  888|      0|    case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break;
  ------------------
  |  Branch (888:5): [True: 0, False: 892]
  ------------------
  889|       |
  890|      0|    case EOpSubgroupBarrier:                 out.debug << "subgroupBarrier"; break;
  ------------------
  |  Branch (890:5): [True: 0, False: 892]
  ------------------
  891|      0|    case EOpSubgroupMemoryBarrier:           out.debug << "subgroupMemoryBarrier"; break;
  ------------------
  |  Branch (891:5): [True: 0, False: 892]
  ------------------
  892|      0|    case EOpSubgroupMemoryBarrierBuffer:     out.debug << "subgroupMemoryBarrierBuffer"; break;
  ------------------
  |  Branch (892:5): [True: 0, False: 892]
  ------------------
  893|      0|    case EOpSubgroupMemoryBarrierImage:      out.debug << "subgroupMemoryBarrierImage";   break;
  ------------------
  |  Branch (893:5): [True: 0, False: 892]
  ------------------
  894|      0|    case EOpSubgroupMemoryBarrierShared:     out.debug << "subgroupMemoryBarrierShared"; break;
  ------------------
  |  Branch (894:5): [True: 0, False: 892]
  ------------------
  895|      0|    case EOpSubgroupElect:                   out.debug << "subgroupElect"; break;
  ------------------
  |  Branch (895:5): [True: 0, False: 892]
  ------------------
  896|      0|    case EOpSubgroupAll:                     out.debug << "subgroupAll"; break;
  ------------------
  |  Branch (896:5): [True: 0, False: 892]
  ------------------
  897|      0|    case EOpSubgroupAny:                     out.debug << "subgroupAny"; break;
  ------------------
  |  Branch (897:5): [True: 0, False: 892]
  ------------------
  898|      0|    case EOpSubgroupAllEqual:                out.debug << "subgroupAllEqual"; break;
  ------------------
  |  Branch (898:5): [True: 0, False: 892]
  ------------------
  899|      0|    case EOpSubgroupBroadcast:               out.debug << "subgroupBroadcast"; break;
  ------------------
  |  Branch (899:5): [True: 0, False: 892]
  ------------------
  900|      0|    case EOpSubgroupBroadcastFirst:          out.debug << "subgroupBroadcastFirst"; break;
  ------------------
  |  Branch (900:5): [True: 0, False: 892]
  ------------------
  901|      0|    case EOpSubgroupBallot:                  out.debug << "subgroupBallot"; break;
  ------------------
  |  Branch (901:5): [True: 0, False: 892]
  ------------------
  902|      0|    case EOpSubgroupInverseBallot:           out.debug << "subgroupInverseBallot"; break;
  ------------------
  |  Branch (902:5): [True: 0, False: 892]
  ------------------
  903|      0|    case EOpSubgroupBallotBitExtract:        out.debug << "subgroupBallotBitExtract"; break;
  ------------------
  |  Branch (903:5): [True: 0, False: 892]
  ------------------
  904|      0|    case EOpSubgroupBallotBitCount:          out.debug << "subgroupBallotBitCount"; break;
  ------------------
  |  Branch (904:5): [True: 0, False: 892]
  ------------------
  905|      0|    case EOpSubgroupBallotInclusiveBitCount: out.debug << "subgroupBallotInclusiveBitCount"; break;
  ------------------
  |  Branch (905:5): [True: 0, False: 892]
  ------------------
  906|      0|    case EOpSubgroupBallotExclusiveBitCount: out.debug << "subgroupBallotExclusiveBitCount"; break;
  ------------------
  |  Branch (906:5): [True: 0, False: 892]
  ------------------
  907|      0|    case EOpSubgroupBallotFindLSB:           out.debug << "subgroupBallotFindLSB"; break;
  ------------------
  |  Branch (907:5): [True: 0, False: 892]
  ------------------
  908|      0|    case EOpSubgroupBallotFindMSB:           out.debug << "subgroupBallotFindMSB"; break;
  ------------------
  |  Branch (908:5): [True: 0, False: 892]
  ------------------
  909|      0|    case EOpSubgroupShuffle:                 out.debug << "subgroupShuffle"; break;
  ------------------
  |  Branch (909:5): [True: 0, False: 892]
  ------------------
  910|      0|    case EOpSubgroupShuffleXor:              out.debug << "subgroupShuffleXor"; break;
  ------------------
  |  Branch (910:5): [True: 0, False: 892]
  ------------------
  911|      0|    case EOpSubgroupShuffleUp:               out.debug << "subgroupShuffleUp"; break;
  ------------------
  |  Branch (911:5): [True: 0, False: 892]
  ------------------
  912|      0|    case EOpSubgroupShuffleDown:             out.debug << "subgroupShuffleDown"; break;
  ------------------
  |  Branch (912:5): [True: 0, False: 892]
  ------------------
  913|      0|    case EOpSubgroupRotate:                  out.debug << "subgroupRotate"; break;
  ------------------
  |  Branch (913:5): [True: 0, False: 892]
  ------------------
  914|      0|    case EOpSubgroupClusteredRotate:         out.debug << "subgroupClusteredRotate"; break;
  ------------------
  |  Branch (914:5): [True: 0, False: 892]
  ------------------
  915|      0|    case EOpSubgroupAdd:                     out.debug << "subgroupAdd"; break;
  ------------------
  |  Branch (915:5): [True: 0, False: 892]
  ------------------
  916|      0|    case EOpSubgroupMul:                     out.debug << "subgroupMul"; break;
  ------------------
  |  Branch (916:5): [True: 0, False: 892]
  ------------------
  917|      0|    case EOpSubgroupMin:                     out.debug << "subgroupMin"; break;
  ------------------
  |  Branch (917:5): [True: 0, False: 892]
  ------------------
  918|      0|    case EOpSubgroupMax:                     out.debug << "subgroupMax"; break;
  ------------------
  |  Branch (918:5): [True: 0, False: 892]
  ------------------
  919|      0|    case EOpSubgroupAnd:                     out.debug << "subgroupAnd"; break;
  ------------------
  |  Branch (919:5): [True: 0, False: 892]
  ------------------
  920|      0|    case EOpSubgroupOr:                      out.debug << "subgroupOr"; break;
  ------------------
  |  Branch (920:5): [True: 0, False: 892]
  ------------------
  921|      0|    case EOpSubgroupXor:                     out.debug << "subgroupXor"; break;
  ------------------
  |  Branch (921:5): [True: 0, False: 892]
  ------------------
  922|      0|    case EOpSubgroupInclusiveAdd:            out.debug << "subgroupInclusiveAdd"; break;
  ------------------
  |  Branch (922:5): [True: 0, False: 892]
  ------------------
  923|      0|    case EOpSubgroupInclusiveMul:            out.debug << "subgroupInclusiveMul"; break;
  ------------------
  |  Branch (923:5): [True: 0, False: 892]
  ------------------
  924|      0|    case EOpSubgroupInclusiveMin:            out.debug << "subgroupInclusiveMin"; break;
  ------------------
  |  Branch (924:5): [True: 0, False: 892]
  ------------------
  925|      0|    case EOpSubgroupInclusiveMax:            out.debug << "subgroupInclusiveMax"; break;
  ------------------
  |  Branch (925:5): [True: 0, False: 892]
  ------------------
  926|      0|    case EOpSubgroupInclusiveAnd:            out.debug << "subgroupInclusiveAnd"; break;
  ------------------
  |  Branch (926:5): [True: 0, False: 892]
  ------------------
  927|      0|    case EOpSubgroupInclusiveOr:             out.debug << "subgroupInclusiveOr"; break;
  ------------------
  |  Branch (927:5): [True: 0, False: 892]
  ------------------
  928|      0|    case EOpSubgroupInclusiveXor:            out.debug << "subgroupInclusiveXor"; break;
  ------------------
  |  Branch (928:5): [True: 0, False: 892]
  ------------------
  929|      0|    case EOpSubgroupExclusiveAdd:            out.debug << "subgroupExclusiveAdd"; break;
  ------------------
  |  Branch (929:5): [True: 0, False: 892]
  ------------------
  930|      0|    case EOpSubgroupExclusiveMul:            out.debug << "subgroupExclusiveMul"; break;
  ------------------
  |  Branch (930:5): [True: 0, False: 892]
  ------------------
  931|      0|    case EOpSubgroupExclusiveMin:            out.debug << "subgroupExclusiveMin"; break;
  ------------------
  |  Branch (931:5): [True: 0, False: 892]
  ------------------
  932|      0|    case EOpSubgroupExclusiveMax:            out.debug << "subgroupExclusiveMax"; break;
  ------------------
  |  Branch (932:5): [True: 0, False: 892]
  ------------------
  933|      0|    case EOpSubgroupExclusiveAnd:            out.debug << "subgroupExclusiveAnd"; break;
  ------------------
  |  Branch (933:5): [True: 0, False: 892]
  ------------------
  934|      0|    case EOpSubgroupExclusiveOr:             out.debug << "subgroupExclusiveOr"; break;
  ------------------
  |  Branch (934:5): [True: 0, False: 892]
  ------------------
  935|      0|    case EOpSubgroupExclusiveXor:            out.debug << "subgroupExclusiveXor"; break;
  ------------------
  |  Branch (935:5): [True: 0, False: 892]
  ------------------
  936|      0|    case EOpSubgroupClusteredAdd:            out.debug << "subgroupClusteredAdd"; break;
  ------------------
  |  Branch (936:5): [True: 0, False: 892]
  ------------------
  937|      0|    case EOpSubgroupClusteredMul:            out.debug << "subgroupClusteredMul"; break;
  ------------------
  |  Branch (937:5): [True: 0, False: 892]
  ------------------
  938|      0|    case EOpSubgroupClusteredMin:            out.debug << "subgroupClusteredMin"; break;
  ------------------
  |  Branch (938:5): [True: 0, False: 892]
  ------------------
  939|      0|    case EOpSubgroupClusteredMax:            out.debug << "subgroupClusteredMax"; break;
  ------------------
  |  Branch (939:5): [True: 0, False: 892]
  ------------------
  940|      0|    case EOpSubgroupClusteredAnd:            out.debug << "subgroupClusteredAnd"; break;
  ------------------
  |  Branch (940:5): [True: 0, False: 892]
  ------------------
  941|      0|    case EOpSubgroupClusteredOr:             out.debug << "subgroupClusteredOr"; break;
  ------------------
  |  Branch (941:5): [True: 0, False: 892]
  ------------------
  942|      0|    case EOpSubgroupClusteredXor:            out.debug << "subgroupClusteredXor"; break;
  ------------------
  |  Branch (942:5): [True: 0, False: 892]
  ------------------
  943|      0|    case EOpSubgroupQuadBroadcast:           out.debug << "subgroupQuadBroadcast"; break;
  ------------------
  |  Branch (943:5): [True: 0, False: 892]
  ------------------
  944|      0|    case EOpSubgroupQuadSwapHorizontal:      out.debug << "subgroupQuadSwapHorizontal"; break;
  ------------------
  |  Branch (944:5): [True: 0, False: 892]
  ------------------
  945|      0|    case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical"; break;
  ------------------
  |  Branch (945:5): [True: 0, False: 892]
  ------------------
  946|      0|    case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal"; break;
  ------------------
  |  Branch (946:5): [True: 0, False: 892]
  ------------------
  947|      0|    case EOpSubgroupQuadAll:                 out.debug << "subgroupQuadAll"; break;
  ------------------
  |  Branch (947:5): [True: 0, False: 892]
  ------------------
  948|      0|    case EOpSubgroupQuadAny:                 out.debug << "subgroupQuadAny"; break;
  ------------------
  |  Branch (948:5): [True: 0, False: 892]
  ------------------
  949|       |
  950|      0|    case EOpSubgroupPartition:                          out.debug << "subgroupPartitionNV";                          break;
  ------------------
  |  Branch (950:5): [True: 0, False: 892]
  ------------------
  951|      0|    case EOpSubgroupPartitionedAdd:                     out.debug << "subgroupPartitionedAddNV";                     break;
  ------------------
  |  Branch (951:5): [True: 0, False: 892]
  ------------------
  952|      0|    case EOpSubgroupPartitionedMul:                     out.debug << "subgroupPartitionedMulNV";                     break;
  ------------------
  |  Branch (952:5): [True: 0, False: 892]
  ------------------
  953|      0|    case EOpSubgroupPartitionedMin:                     out.debug << "subgroupPartitionedMinNV";                     break;
  ------------------
  |  Branch (953:5): [True: 0, False: 892]
  ------------------
  954|      0|    case EOpSubgroupPartitionedMax:                     out.debug << "subgroupPartitionedMaxNV";                     break;
  ------------------
  |  Branch (954:5): [True: 0, False: 892]
  ------------------
  955|      0|    case EOpSubgroupPartitionedAnd:                     out.debug << "subgroupPartitionedAndNV";                     break;
  ------------------
  |  Branch (955:5): [True: 0, False: 892]
  ------------------
  956|      0|    case EOpSubgroupPartitionedOr:                      out.debug << "subgroupPartitionedOrNV";                      break;
  ------------------
  |  Branch (956:5): [True: 0, False: 892]
  ------------------
  957|      0|    case EOpSubgroupPartitionedXor:                     out.debug << "subgroupPartitionedXorNV";                     break;
  ------------------
  |  Branch (957:5): [True: 0, False: 892]
  ------------------
  958|      0|    case EOpSubgroupPartitionedInclusiveAdd:            out.debug << "subgroupPartitionedInclusiveAddNV";            break;
  ------------------
  |  Branch (958:5): [True: 0, False: 892]
  ------------------
  959|      0|    case EOpSubgroupPartitionedInclusiveMul:            out.debug << "subgroupPartitionedInclusiveMulNV";            break;
  ------------------
  |  Branch (959:5): [True: 0, False: 892]
  ------------------
  960|      0|    case EOpSubgroupPartitionedInclusiveMin:            out.debug << "subgroupPartitionedInclusiveMinNV";            break;
  ------------------
  |  Branch (960:5): [True: 0, False: 892]
  ------------------
  961|      0|    case EOpSubgroupPartitionedInclusiveMax:            out.debug << "subgroupPartitionedInclusiveMaxNV";            break;
  ------------------
  |  Branch (961:5): [True: 0, False: 892]
  ------------------
  962|      0|    case EOpSubgroupPartitionedInclusiveAnd:            out.debug << "subgroupPartitionedInclusiveAndNV";            break;
  ------------------
  |  Branch (962:5): [True: 0, False: 892]
  ------------------
  963|      0|    case EOpSubgroupPartitionedInclusiveOr:             out.debug << "subgroupPartitionedInclusiveOrNV";             break;
  ------------------
  |  Branch (963:5): [True: 0, False: 892]
  ------------------
  964|      0|    case EOpSubgroupPartitionedInclusiveXor:            out.debug << "subgroupPartitionedInclusiveXorNV";            break;
  ------------------
  |  Branch (964:5): [True: 0, False: 892]
  ------------------
  965|      0|    case EOpSubgroupPartitionedExclusiveAdd:            out.debug << "subgroupPartitionedExclusiveAddNV";            break;
  ------------------
  |  Branch (965:5): [True: 0, False: 892]
  ------------------
  966|      0|    case EOpSubgroupPartitionedExclusiveMul:            out.debug << "subgroupPartitionedExclusiveMulNV";            break;
  ------------------
  |  Branch (966:5): [True: 0, False: 892]
  ------------------
  967|      0|    case EOpSubgroupPartitionedExclusiveMin:            out.debug << "subgroupPartitionedExclusiveMinNV";            break;
  ------------------
  |  Branch (967:5): [True: 0, False: 892]
  ------------------
  968|      0|    case EOpSubgroupPartitionedExclusiveMax:            out.debug << "subgroupPartitionedExclusiveMaxNV";            break;
  ------------------
  |  Branch (968:5): [True: 0, False: 892]
  ------------------
  969|      0|    case EOpSubgroupPartitionedExclusiveAnd:            out.debug << "subgroupPartitionedExclusiveAndNV";            break;
  ------------------
  |  Branch (969:5): [True: 0, False: 892]
  ------------------
  970|      0|    case EOpSubgroupPartitionedExclusiveOr:             out.debug << "subgroupPartitionedExclusiveOrNV";             break;
  ------------------
  |  Branch (970:5): [True: 0, False: 892]
  ------------------
  971|      0|    case EOpSubgroupPartitionedExclusiveXor:            out.debug << "subgroupPartitionedExclusiveXorNV";            break;
  ------------------
  |  Branch (971:5): [True: 0, False: 892]
  ------------------
  972|       |
  973|      0|    case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
  ------------------
  |  Branch (973:5): [True: 0, False: 892]
  ------------------
  974|      0|    case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
  ------------------
  |  Branch (974:5): [True: 0, False: 892]
  ------------------
  975|       |
  976|      0|    case EOpColorAttachmentReadEXT:   out.debug << "colorAttachmentReadEXT";   break;
  ------------------
  |  Branch (976:5): [True: 0, False: 892]
  ------------------
  977|       |
  978|      0|    case EOpTraceNV:                          out.debug << "traceNV"; break;
  ------------------
  |  Branch (978:5): [True: 0, False: 892]
  ------------------
  979|      0|    case EOpTraceRayMotionNV:                 out.debug << "traceRayMotionNV"; break;
  ------------------
  |  Branch (979:5): [True: 0, False: 892]
  ------------------
  980|      0|    case EOpTraceKHR:                         out.debug << "traceRayKHR"; break;
  ------------------
  |  Branch (980:5): [True: 0, False: 892]
  ------------------
  981|      0|    case EOpReportIntersection:               out.debug << "reportIntersectionNV"; break;
  ------------------
  |  Branch (981:5): [True: 0, False: 892]
  ------------------
  982|      0|    case EOpIgnoreIntersectionNV:             out.debug << "ignoreIntersectionNV"; break;
  ------------------
  |  Branch (982:5): [True: 0, False: 892]
  ------------------
  983|      0|    case EOpIgnoreIntersectionKHR:            out.debug << "ignoreIntersectionKHR"; break;
  ------------------
  |  Branch (983:5): [True: 0, False: 892]
  ------------------
  984|      0|    case EOpTerminateRayNV:                   out.debug << "terminateRayNV"; break;
  ------------------
  |  Branch (984:5): [True: 0, False: 892]
  ------------------
  985|      0|    case EOpTerminateRayKHR:                  out.debug << "terminateRayKHR"; break;
  ------------------
  |  Branch (985:5): [True: 0, False: 892]
  ------------------
  986|      0|    case EOpExecuteCallableNV:                out.debug << "executeCallableNV"; break;
  ------------------
  |  Branch (986:5): [True: 0, False: 892]
  ------------------
  987|      0|    case EOpExecuteCallableKHR:               out.debug << "executeCallableKHR"; break;
  ------------------
  |  Branch (987:5): [True: 0, False: 892]
  ------------------
  988|      0|    case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
  ------------------
  |  Branch (988:5): [True: 0, False: 892]
  ------------------
  989|      0|    case EOpEmitMeshTasksEXT:                 out.debug << "EmitMeshTasksEXT"; break;
  ------------------
  |  Branch (989:5): [True: 0, False: 892]
  ------------------
  990|      0|    case EOpSetMeshOutputsEXT:                out.debug << "SetMeshOutputsEXT"; break;
  ------------------
  |  Branch (990:5): [True: 0, False: 892]
  ------------------
  991|       |
  992|      0|    case EOpRayQueryInitialize:                                            out.debug << "rayQueryInitializeEXT"; break;
  ------------------
  |  Branch (992:5): [True: 0, False: 892]
  ------------------
  993|      0|    case EOpRayQueryTerminate:                                             out.debug << "rayQueryTerminateEXT"; break;
  ------------------
  |  Branch (993:5): [True: 0, False: 892]
  ------------------
  994|      0|    case EOpRayQueryGenerateIntersection:                                  out.debug << "rayQueryGenerateIntersectionEXT"; break;
  ------------------
  |  Branch (994:5): [True: 0, False: 892]
  ------------------
  995|      0|    case EOpRayQueryConfirmIntersection:                                   out.debug << "rayQueryConfirmIntersectionEXT"; break;
  ------------------
  |  Branch (995:5): [True: 0, False: 892]
  ------------------
  996|      0|    case EOpRayQueryProceed:                                               out.debug << "rayQueryProceedEXT"; break;
  ------------------
  |  Branch (996:5): [True: 0, False: 892]
  ------------------
  997|      0|    case EOpRayQueryGetIntersectionType:                                   out.debug << "rayQueryGetIntersectionTypeEXT"; break;
  ------------------
  |  Branch (997:5): [True: 0, False: 892]
  ------------------
  998|      0|    case EOpRayQueryGetRayTMin:                                            out.debug << "rayQueryGetRayTMinEXT"; break;
  ------------------
  |  Branch (998:5): [True: 0, False: 892]
  ------------------
  999|      0|    case EOpRayQueryGetRayFlags:                                           out.debug << "rayQueryGetRayFlagsEXT"; break;
  ------------------
  |  Branch (999:5): [True: 0, False: 892]
  ------------------
 1000|      0|    case EOpRayQueryGetIntersectionT:                                      out.debug << "rayQueryGetIntersectionTEXT"; break;
  ------------------
  |  Branch (1000:5): [True: 0, False: 892]
  ------------------
 1001|      0|    case EOpRayQueryGetIntersectionInstanceCustomIndex:                    out.debug << "rayQueryGetIntersectionInstanceCustomIndexEXT"; break;
  ------------------
  |  Branch (1001:5): [True: 0, False: 892]
  ------------------
 1002|      0|    case EOpRayQueryGetIntersectionInstanceId:                             out.debug << "rayQueryGetIntersectionInstanceIdEXT"; break;
  ------------------
  |  Branch (1002:5): [True: 0, False: 892]
  ------------------
 1003|      0|    case EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset: out.debug << "rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT"; break;
  ------------------
  |  Branch (1003:5): [True: 0, False: 892]
  ------------------
 1004|      0|    case EOpRayQueryGetIntersectionGeometryIndex:                          out.debug << "rayQueryGetIntersectionGeometryIndexEXT"; break;
  ------------------
  |  Branch (1004:5): [True: 0, False: 892]
  ------------------
 1005|      0|    case EOpRayQueryGetIntersectionPrimitiveIndex:                         out.debug << "rayQueryGetIntersectionPrimitiveIndexEXT"; break;
  ------------------
  |  Branch (1005:5): [True: 0, False: 892]
  ------------------
 1006|      0|    case EOpRayQueryGetIntersectionBarycentrics:                           out.debug << "rayQueryGetIntersectionBarycentricsEXT"; break;
  ------------------
  |  Branch (1006:5): [True: 0, False: 892]
  ------------------
 1007|      0|    case EOpRayQueryGetIntersectionFrontFace:                              out.debug << "rayQueryGetIntersectionFrontFaceEXT"; break;
  ------------------
  |  Branch (1007:5): [True: 0, False: 892]
  ------------------
 1008|      0|    case EOpRayQueryGetIntersectionCandidateAABBOpaque:                    out.debug << "rayQueryGetIntersectionCandidateAABBOpaqueEXT"; break;
  ------------------
  |  Branch (1008:5): [True: 0, False: 892]
  ------------------
 1009|      0|    case EOpRayQueryGetIntersectionObjectRayDirection:                     out.debug << "rayQueryGetIntersectionObjectRayDirectionEXT"; break;
  ------------------
  |  Branch (1009:5): [True: 0, False: 892]
  ------------------
 1010|      0|    case EOpRayQueryGetIntersectionObjectRayOrigin:                        out.debug << "rayQueryGetIntersectionObjectRayOriginEXT"; break;
  ------------------
  |  Branch (1010:5): [True: 0, False: 892]
  ------------------
 1011|      0|    case EOpRayQueryGetWorldRayDirection:                                  out.debug << "rayQueryGetWorldRayDirectionEXT"; break;
  ------------------
  |  Branch (1011:5): [True: 0, False: 892]
  ------------------
 1012|      0|    case EOpRayQueryGetWorldRayOrigin:                                     out.debug << "rayQueryGetWorldRayOriginEXT"; break;
  ------------------
  |  Branch (1012:5): [True: 0, False: 892]
  ------------------
 1013|      0|    case EOpRayQueryGetIntersectionObjectToWorld:                          out.debug << "rayQueryGetIntersectionObjectToWorldEXT"; break;
  ------------------
  |  Branch (1013:5): [True: 0, False: 892]
  ------------------
 1014|      0|    case EOpRayQueryGetIntersectionWorldToObject:                          out.debug << "rayQueryGetIntersectionWorldToObjectEXT"; break;
  ------------------
  |  Branch (1014:5): [True: 0, False: 892]
  ------------------
 1015|      0|    case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT:             out.debug << "rayQueryGetIntersectionTriangleVertexPositionsEXT"; break;
  ------------------
  |  Branch (1015:5): [True: 0, False: 892]
  ------------------
 1016|      0|    case EOpRayQueryGetIntersectionClusterIdNV:                            out.debug << "rayQueryGetIntersectionClusterIdNV"; break;
  ------------------
  |  Branch (1016:5): [True: 0, False: 892]
  ------------------
 1017|      0|    case EOpRayQueryGetIntersectionSpherePositionNV:                       out.debug << "rayQueryGetIntersectionSpherePositionNV"; break;
  ------------------
  |  Branch (1017:5): [True: 0, False: 892]
  ------------------
 1018|      0|    case EOpRayQueryGetIntersectionSphereRadiusNV:                         out.debug << "rayQueryGetIntersectionSphereRadiusNV"; break;
  ------------------
  |  Branch (1018:5): [True: 0, False: 892]
  ------------------
 1019|      0|    case EOpRayQueryGetIntersectionLSSHitValueNV:                          out.debug << "rayQueryGetIntersectionLSSHitValueNV"; break;
  ------------------
  |  Branch (1019:5): [True: 0, False: 892]
  ------------------
 1020|      0|    case EOpRayQueryGetIntersectionLSSPositionsNV:                         out.debug << "rayQueryGetIntersectionLSSPositionsNV"; break;
  ------------------
  |  Branch (1020:5): [True: 0, False: 892]
  ------------------
 1021|      0|    case EOpRayQueryGetIntersectionLSSRadiiNV:                             out.debug << "rayQueryGetIntersectionLSSRadiiNV"; break;
  ------------------
  |  Branch (1021:5): [True: 0, False: 892]
  ------------------
 1022|      0|    case EOpRayQueryIsSphereHitNV:                                         out.debug << "rayQueryIsSphereHitNV"; break;
  ------------------
  |  Branch (1022:5): [True: 0, False: 892]
  ------------------
 1023|      0|    case EOpRayQueryIsLSSHitNV:                                            out.debug << "rayQueryIsLSSHitNV"; break;
  ------------------
  |  Branch (1023:5): [True: 0, False: 892]
  ------------------
 1024|       |
 1025|      0|    case EOpCooperativeMatrixLoad:  out.debug << "Load cooperative matrix KHR"; break;
  ------------------
  |  Branch (1025:5): [True: 0, False: 892]
  ------------------
 1026|      0|    case EOpCooperativeMatrixStore:  out.debug << "Store cooperative matrix KHR"; break;
  ------------------
  |  Branch (1026:5): [True: 0, False: 892]
  ------------------
 1027|      0|    case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices KHR"; break;
  ------------------
  |  Branch (1027:5): [True: 0, False: 892]
  ------------------
 1028|      0|    case EOpCooperativeMatrixLoadNV:  out.debug << "Load cooperative matrix NV"; break;
  ------------------
  |  Branch (1028:5): [True: 0, False: 892]
  ------------------
 1029|      0|    case EOpCooperativeMatrixStoreNV:  out.debug << "Store cooperative matrix NV"; break;
  ------------------
  |  Branch (1029:5): [True: 0, False: 892]
  ------------------
 1030|      0|    case EOpCooperativeMatrixLoadTensorNV:  out.debug << "Load cooperative matrix tensor NV"; break;
  ------------------
  |  Branch (1030:5): [True: 0, False: 892]
  ------------------
 1031|      0|    case EOpCooperativeMatrixStoreTensorNV:  out.debug << "Store cooperative matrix tensor NV"; break;
  ------------------
  |  Branch (1031:5): [True: 0, False: 892]
  ------------------
 1032|      0|    case EOpCooperativeMatrixMulAddNV: out.debug << "MulAdd cooperative matrices NV"; break;
  ------------------
  |  Branch (1032:5): [True: 0, False: 892]
  ------------------
 1033|      0|    case EOpCooperativeMatrixReduceNV: out.debug << "Reduce cooperative matrices"; break;
  ------------------
  |  Branch (1033:5): [True: 0, False: 892]
  ------------------
 1034|      0|    case EOpCooperativeMatrixPerElementOpNV: out.debug << "cooperative matrix per element op"; break;
  ------------------
  |  Branch (1034:5): [True: 0, False: 892]
  ------------------
 1035|      0|    case EOpCooperativeMatrixTransposeNV: out.debug << "Transpose cooperative matrix"; break;
  ------------------
  |  Branch (1035:5): [True: 0, False: 892]
  ------------------
 1036|      0|    case EOpCooperativeMatrixGetCoordinateEXT: out.debug << "Cooperative matrix get coordinate"; break;
  ------------------
  |  Branch (1036:5): [True: 0, False: 892]
  ------------------
 1037|       |
 1038|      0|    case EOpCooperativeVectorMatMulNV: out.debug << "Cooperative vector matrix multiply NV"; break;
  ------------------
  |  Branch (1038:5): [True: 0, False: 892]
  ------------------
 1039|      0|    case EOpCooperativeVectorMatMulAddNV: out.debug << "Cooperative vector matrix multiply add NV"; break;
  ------------------
  |  Branch (1039:5): [True: 0, False: 892]
  ------------------
 1040|      0|    case EOpCooperativeVectorLoadNV:  out.debug << "Load cooperative vector NV"; break;
  ------------------
  |  Branch (1040:5): [True: 0, False: 892]
  ------------------
 1041|      0|    case EOpCooperativeVectorStoreNV:  out.debug << "Store cooperative vector NV"; break;
  ------------------
  |  Branch (1041:5): [True: 0, False: 892]
  ------------------
 1042|      0|    case EOpCooperativeVectorOuterProductAccumulateNV: out.debug << "Cooperative vector outer product accumulate NV"; break;
  ------------------
  |  Branch (1042:5): [True: 0, False: 892]
  ------------------
 1043|      0|    case EOpCooperativeVectorReduceSumAccumulateNV: out.debug << "Cooperative vector reduce sum accumulate NV"; break;
  ------------------
  |  Branch (1043:5): [True: 0, False: 892]
  ------------------
 1044|       |
 1045|      0|    case EOpTensorReadARM:   out.debug << "Read from tensor";  break;
  ------------------
  |  Branch (1045:5): [True: 0, False: 892]
  ------------------
 1046|      0|    case EOpTensorWriteARM:  out.debug << "Write to tensor";  break;
  ------------------
  |  Branch (1046:5): [True: 0, False: 892]
  ------------------
 1047|      0|    case EOpTensorSizeARM:   out.debug << "Get tensor size";  break;
  ------------------
  |  Branch (1047:5): [True: 0, False: 892]
  ------------------
 1048|       |
 1049|      0|    case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break;
  ------------------
  |  Branch (1049:5): [True: 0, False: 892]
  ------------------
 1050|      0|    case EOpDebugPrintf:  out.debug << "Debug printf";  break;
  ------------------
  |  Branch (1050:5): [True: 0, False: 892]
  ------------------
 1051|      0|    case EOpAbortEXT:  out.debug << "Abort";  break;
  ------------------
  |  Branch (1051:5): [True: 0, False: 892]
  ------------------
 1052|       |
 1053|      0|    case EOpHitObjectTraceRayNV: out.debug << "HitObjectTraceRayNV"; break;
  ------------------
  |  Branch (1053:5): [True: 0, False: 892]
  ------------------
 1054|      0|    case EOpHitObjectTraceRayMotionNV: out.debug << "HitObjectTraceRayMotionNV"; break;
  ------------------
  |  Branch (1054:5): [True: 0, False: 892]
  ------------------
 1055|      0|    case EOpHitObjectRecordHitNV: out.debug << "HitObjectRecordHitNV"; break;
  ------------------
  |  Branch (1055:5): [True: 0, False: 892]
  ------------------
 1056|      0|    case EOpHitObjectRecordHitMotionNV: out.debug << "HitObjectRecordHitMotionNV"; break;
  ------------------
  |  Branch (1056:5): [True: 0, False: 892]
  ------------------
 1057|      0|    case EOpHitObjectRecordHitWithIndexNV: out.debug << "HitObjectRecordHitWithIndexNV"; break;
  ------------------
  |  Branch (1057:5): [True: 0, False: 892]
  ------------------
 1058|      0|    case EOpHitObjectRecordHitWithIndexMotionNV: out.debug << "HitObjectRecordHitWithIndexMotionNV"; break;
  ------------------
  |  Branch (1058:5): [True: 0, False: 892]
  ------------------
 1059|      0|    case EOpHitObjectRecordMissNV: out.debug << "HitObjectRecordMissNV"; break;
  ------------------
  |  Branch (1059:5): [True: 0, False: 892]
  ------------------
 1060|      0|    case EOpHitObjectRecordMissMotionNV: out.debug << "HitObjectRecordMissMotionNV"; break;
  ------------------
  |  Branch (1060:5): [True: 0, False: 892]
  ------------------
 1061|      0|    case EOpHitObjectRecordEmptyNV: out.debug << "HitObjectRecordEmptyNV"; break;
  ------------------
  |  Branch (1061:5): [True: 0, False: 892]
  ------------------
 1062|      0|    case EOpHitObjectExecuteShaderNV: out.debug << "HitObjectExecuteShaderNV"; break;
  ------------------
  |  Branch (1062:5): [True: 0, False: 892]
  ------------------
 1063|      0|    case EOpHitObjectIsEmptyNV: out.debug << "HitObjectIsEmptyNV"; break;
  ------------------
  |  Branch (1063:5): [True: 0, False: 892]
  ------------------
 1064|      0|    case EOpHitObjectIsMissNV: out.debug << "HitObjectIsMissNV"; break;
  ------------------
  |  Branch (1064:5): [True: 0, False: 892]
  ------------------
 1065|      0|    case EOpHitObjectIsHitNV:  out.debug << "HitObjectIsHitNV"; break;
  ------------------
  |  Branch (1065:5): [True: 0, False: 892]
  ------------------
 1066|      0|    case EOpHitObjectGetRayTMinNV: out.debug << "HitObjectGetRayTMinNV"; break;
  ------------------
  |  Branch (1066:5): [True: 0, False: 892]
  ------------------
 1067|      0|    case EOpHitObjectGetRayTMaxNV: out.debug << "HitObjectGetRayTMaxNV"; break;
  ------------------
  |  Branch (1067:5): [True: 0, False: 892]
  ------------------
 1068|      0|    case EOpHitObjectGetObjectRayOriginNV: out.debug << "HitObjectGetObjectRayOriginNV"; break;
  ------------------
  |  Branch (1068:5): [True: 0, False: 892]
  ------------------
 1069|      0|    case EOpHitObjectGetObjectRayDirectionNV: out.debug << "HitObjectGetObjectRayDirectionNV"; break;
  ------------------
  |  Branch (1069:5): [True: 0, False: 892]
  ------------------
 1070|      0|    case EOpHitObjectGetWorldRayOriginNV: out.debug << "HitObjectGetWorldRayOriginNV"; break;
  ------------------
  |  Branch (1070:5): [True: 0, False: 892]
  ------------------
 1071|      0|    case EOpHitObjectGetWorldRayDirectionNV: out.debug << "HitObjectGetWorldRayDirectionNV"; break;
  ------------------
  |  Branch (1071:5): [True: 0, False: 892]
  ------------------
 1072|      0|    case EOpHitObjectGetObjectToWorldNV: out.debug << "HitObjectGetObjectToWorldNV"; break;
  ------------------
  |  Branch (1072:5): [True: 0, False: 892]
  ------------------
 1073|      0|    case EOpHitObjectGetWorldToObjectNV: out.debug << "HitObjectGetWorldToObjectNV"; break;
  ------------------
  |  Branch (1073:5): [True: 0, False: 892]
  ------------------
 1074|      0|    case EOpHitObjectGetInstanceCustomIndexNV: out.debug<< "HitObjectGetInstanceCustomIndexNV"; break;
  ------------------
  |  Branch (1074:5): [True: 0, False: 892]
  ------------------
 1075|      0|    case EOpHitObjectGetInstanceIdNV: out.debug << "HitObjectGetInstaneIdNV"; break;
  ------------------
  |  Branch (1075:5): [True: 0, False: 892]
  ------------------
 1076|      0|    case EOpHitObjectGetGeometryIndexNV: out.debug << "HitObjectGetGeometryIndexNV"; break;
  ------------------
  |  Branch (1076:5): [True: 0, False: 892]
  ------------------
 1077|      0|    case EOpHitObjectGetPrimitiveIndexNV: out.debug << "HitObjectGetPrimitiveIndexNV"; break;
  ------------------
  |  Branch (1077:5): [True: 0, False: 892]
  ------------------
 1078|      0|    case EOpHitObjectGetHitKindNV: out.debug << "HitObjectGetHitKindNV"; break;
  ------------------
  |  Branch (1078:5): [True: 0, False: 892]
  ------------------
 1079|      0|    case EOpHitObjectGetAttributesNV: out.debug << "HitObjectGetAttributesNV"; break;
  ------------------
  |  Branch (1079:5): [True: 0, False: 892]
  ------------------
 1080|      0|    case EOpHitObjectGetCurrentTimeNV: out.debug << "HitObjectGetCurrentTimeNV"; break;
  ------------------
  |  Branch (1080:5): [True: 0, False: 892]
  ------------------
 1081|      0|    case EOpHitObjectGetShaderBindingTableRecordIndexNV: out.debug << "HitObjectGetShaderBindingTableRecordIndexNV"; break;
  ------------------
  |  Branch (1081:5): [True: 0, False: 892]
  ------------------
 1082|      0|    case EOpHitObjectGetShaderRecordBufferHandleNV: out.debug << "HitObjectReadShaderRecordBufferHandleNV"; break;
  ------------------
  |  Branch (1082:5): [True: 0, False: 892]
  ------------------
 1083|      0|    case EOpHitObjectGetClusterIdNV: out.debug << "HitObjectGetClusterIdNV"; break;
  ------------------
  |  Branch (1083:5): [True: 0, False: 892]
  ------------------
 1084|      0|    case EOpReorderThreadNV: out.debug << "ReorderThreadNV"; break;
  ------------------
  |  Branch (1084:5): [True: 0, False: 892]
  ------------------
 1085|      0|    case EOpFetchMicroTriangleVertexPositionNV: out.debug << "MicroTriangleVertexPositionNV"; break;
  ------------------
  |  Branch (1085:5): [True: 0, False: 892]
  ------------------
 1086|      0|    case EOpFetchMicroTriangleVertexBarycentricNV: out.debug << "MicroTriangleVertexBarycentricNV"; break;
  ------------------
  |  Branch (1086:5): [True: 0, False: 892]
  ------------------
 1087|      0|    case EOpHitObjectGetSpherePositionNV: out.debug << "HitObjectGetSpherePositionNV"; break;
  ------------------
  |  Branch (1087:5): [True: 0, False: 892]
  ------------------
 1088|      0|    case EOpHitObjectGetSphereRadiusNV:   out.debug << "HitObjectGetSphereRadiusNV"; break;
  ------------------
  |  Branch (1088:5): [True: 0, False: 892]
  ------------------
 1089|      0|    case EOpHitObjectGetLSSPositionsNV:   out.debug << "HitObjectGetLSSPositionsNV"; break;
  ------------------
  |  Branch (1089:5): [True: 0, False: 892]
  ------------------
 1090|      0|    case EOpHitObjectGetLSSRadiiNV:       out.debug << "HitObjectGetLSSRadiiNV"; break;
  ------------------
  |  Branch (1090:5): [True: 0, False: 892]
  ------------------
 1091|      0|    case EOpHitObjectIsSphereHitNV:       out.debug << "HitObjectIsSphereHitNV"; break;
  ------------------
  |  Branch (1091:5): [True: 0, False: 892]
  ------------------
 1092|      0|    case EOpHitObjectIsLSSHitNV:          out.debug << "HitObjectIsLSSHitNV"; break;
  ------------------
  |  Branch (1092:5): [True: 0, False: 892]
  ------------------
 1093|       |
 1094|      0|    case EOpSpirvInst: out.debug << "spirv_instruction"; break;
  ------------------
  |  Branch (1094:5): [True: 0, False: 892]
  ------------------
 1095|      0|    case EOpStencilAttachmentReadEXT: out.debug << "stencilAttachmentReadEXT"; break;
  ------------------
  |  Branch (1095:5): [True: 0, False: 892]
  ------------------
 1096|      0|    case EOpDepthAttachmentReadEXT: out.debug << "depthAttachmentReadEXT"; break;
  ------------------
  |  Branch (1096:5): [True: 0, False: 892]
  ------------------
 1097|       |
 1098|      0|    case EOpCreateTensorLayoutNV:           out.debug << "createTensorLayout"; break;
  ------------------
  |  Branch (1098:5): [True: 0, False: 892]
  ------------------
 1099|      0|    case EOpTensorLayoutSetBlockSizeNV:     out.debug << "setBlockSize"; break;
  ------------------
  |  Branch (1099:5): [True: 0, False: 892]
  ------------------
 1100|      0|    case EOpTensorLayoutSetDimensionNV:     out.debug << "setDimension"; break;
  ------------------
  |  Branch (1100:5): [True: 0, False: 892]
  ------------------
 1101|      0|    case EOpTensorLayoutSetStrideNV:        out.debug << "setStride"; break;
  ------------------
  |  Branch (1101:5): [True: 0, False: 892]
  ------------------
 1102|      0|    case EOpTensorLayoutSliceNV:            out.debug << "slice"; break;
  ------------------
  |  Branch (1102:5): [True: 0, False: 892]
  ------------------
 1103|      0|    case EOpTensorLayoutSetClampValueNV:    out.debug << "setClampValue"; break;
  ------------------
  |  Branch (1103:5): [True: 0, False: 892]
  ------------------
 1104|      0|    case EOpCreateTensorViewNV:             out.debug << "createTensorView"; break;
  ------------------
  |  Branch (1104:5): [True: 0, False: 892]
  ------------------
 1105|      0|    case EOpTensorViewSetDimensionNV:       out.debug << "setTensorViewDimensions"; break;
  ------------------
  |  Branch (1105:5): [True: 0, False: 892]
  ------------------
 1106|      0|    case EOpTensorViewSetStrideNV:          out.debug << "setTensorViewStride"; break;
  ------------------
  |  Branch (1106:5): [True: 0, False: 892]
  ------------------
 1107|      0|    case EOpTensorViewSetClipNV:            out.debug << "clipTensorView"; break;
  ------------------
  |  Branch (1107:5): [True: 0, False: 892]
  ------------------
 1108|       |
 1109|      0|    default: out.debug.message(EPrefixError, "Bad aggregation op");
  ------------------
  |  Branch (1109:5): [True: 0, False: 892]
  ------------------
 1110|    892|    }
 1111|       |
 1112|      0|    if (node->getOp() != EOpSequence && node->getOp() != EOpScope && node->getOp() != EOpParameters)
  ------------------
  |  Branch (1112:9): [True: 0, False: 0]
  |  Branch (1112:41): [True: 0, False: 0]
  |  Branch (1112:70): [True: 0, False: 0]
  ------------------
 1113|      0|        out.debug << " (" << node->getCompleteString() << ")";
 1114|       |
 1115|      0|    out.debug << "\n";
 1116|       |
 1117|      0|    return true;
 1118|    892|}
_ZN7glslang16TOutputTraverser11visitSymbolEPNS_13TIntermSymbolE:
 1340|  1.78k|{
 1341|  1.78k|    OutputTreeText(infoSink, node, depth);
 1342|       |
 1343|  1.78k|    infoSink.debug << "'" << node->getName() << "' (" << node->getCompleteString() << ")\n";
 1344|       |
 1345|  1.78k|    if (! node->getConstArray().empty())
  ------------------
  |  Branch (1345:9): [True: 0, False: 1.78k]
  ------------------
 1346|      0|        OutputConstantUnion(infoSink, node, node->getConstArray(), extraOutput, depth + 1);
 1347|  1.78k|    else if (node->getConstSubtree()) {
  ------------------
  |  Branch (1347:14): [True: 0, False: 1.78k]
  ------------------
 1348|      0|        incrementDepth(node);
 1349|      0|        node->getConstSubtree()->traverse(this);
 1350|      0|        decrementDepth();
 1351|      0|    }
 1352|  1.78k|}
_ZN7glslang13TIntermediate6outputER9TInfoSinkb:
 1478|    891|{
 1479|    891|    infoSink.debug << "Shader version: " << version << "\n";
 1480|    891|    if (requestedExtensions.size() > 0) {
  ------------------
  |  Branch (1480:9): [True: 0, False: 891]
  ------------------
 1481|      0|        for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt)
  ------------------
  |  Branch (1481:56): [True: 0, False: 0]
  ------------------
 1482|      0|            infoSink.debug << "Requested " << *extIt << "\n";
 1483|      0|    }
 1484|       |
 1485|    891|    if (xfbMode)
  ------------------
  |  Branch (1485:9): [True: 0, False: 891]
  ------------------
 1486|      0|        infoSink.debug << "in xfb mode\n";
 1487|       |
 1488|    891|    if (getSubgroupUniformControlFlow())
  ------------------
  |  Branch (1488:9): [True: 0, False: 891]
  ------------------
 1489|      0|        infoSink.debug << "subgroup_uniform_control_flow\n";
 1490|       |
 1491|    891|    if (getMaximallyReconverges())
  ------------------
  |  Branch (1491:9): [True: 0, False: 891]
  ------------------
 1492|      0|        infoSink.debug << "maximally_reconverges\n";
 1493|       |
 1494|    891|    switch (language) {
 1495|    891|    case EShLangVertex:
  ------------------
  |  Branch (1495:5): [True: 891, False: 0]
  ------------------
 1496|    891|        break;
 1497|       |
 1498|      0|    case EShLangTessControl:
  ------------------
  |  Branch (1498:5): [True: 0, False: 891]
  ------------------
 1499|      0|        infoSink.debug << "vertices = " << vertices << "\n";
 1500|       |
 1501|      0|        if (inputPrimitive != ElgNone)
  ------------------
  |  Branch (1501:13): [True: 0, False: 0]
  ------------------
 1502|      0|            infoSink.debug << "input primitive = " << TQualifier::getGeometryString(inputPrimitive) << "\n";
 1503|      0|        if (vertexSpacing != EvsNone)
  ------------------
  |  Branch (1503:13): [True: 0, False: 0]
  ------------------
 1504|      0|            infoSink.debug << "vertex spacing = " << TQualifier::getVertexSpacingString(vertexSpacing) << "\n";
 1505|      0|        if (vertexOrder != EvoNone)
  ------------------
  |  Branch (1505:13): [True: 0, False: 0]
  ------------------
 1506|      0|            infoSink.debug << "triangle order = " << TQualifier::getVertexOrderString(vertexOrder) << "\n";
 1507|      0|        break;
 1508|       |
 1509|      0|    case EShLangTessEvaluation:
  ------------------
  |  Branch (1509:5): [True: 0, False: 891]
  ------------------
 1510|      0|        infoSink.debug << "input primitive = " << TQualifier::getGeometryString(inputPrimitive) << "\n";
 1511|      0|        infoSink.debug << "vertex spacing = " << TQualifier::getVertexSpacingString(vertexSpacing) << "\n";
 1512|      0|        infoSink.debug << "triangle order = " << TQualifier::getVertexOrderString(vertexOrder) << "\n";
 1513|      0|        if (pointMode)
  ------------------
  |  Branch (1513:13): [True: 0, False: 0]
  ------------------
 1514|      0|            infoSink.debug << "using point mode\n";
 1515|      0|        break;
 1516|       |
 1517|      0|    case EShLangGeometry:
  ------------------
  |  Branch (1517:5): [True: 0, False: 891]
  ------------------
 1518|      0|        infoSink.debug << "invocations = " << invocations << "\n";
 1519|      0|        infoSink.debug << "max_vertices = " << vertices << "\n";
 1520|      0|        infoSink.debug << "input primitive = " << TQualifier::getGeometryString(inputPrimitive) << "\n";
 1521|      0|        infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
 1522|      0|        break;
 1523|       |
 1524|      0|    case EShLangFragment:
  ------------------
  |  Branch (1524:5): [True: 0, False: 891]
  ------------------
 1525|      0|        if (pixelCenterInteger)
  ------------------
  |  Branch (1525:13): [True: 0, False: 0]
  ------------------
 1526|      0|            infoSink.debug << "gl_FragCoord pixel center is integer\n";
 1527|      0|        if (originUpperLeft)
  ------------------
  |  Branch (1527:13): [True: 0, False: 0]
  ------------------
 1528|      0|            infoSink.debug << "gl_FragCoord origin is upper left\n";
 1529|      0|        if (earlyFragmentTests)
  ------------------
  |  Branch (1529:13): [True: 0, False: 0]
  ------------------
 1530|      0|            infoSink.debug << "using early_fragment_tests\n";
 1531|      0|        if (postDepthCoverage)
  ------------------
  |  Branch (1531:13): [True: 0, False: 0]
  ------------------
 1532|      0|            infoSink.debug << "using post_depth_coverage\n";
 1533|      0|        if (nonCoherentColorAttachmentReadEXT)
  ------------------
  |  Branch (1533:13): [True: 0, False: 0]
  ------------------
 1534|      0|            infoSink.debug << "using non_coherent_color_attachment_readEXT\n";
 1535|      0|        if (nonCoherentDepthAttachmentReadEXT)
  ------------------
  |  Branch (1535:13): [True: 0, False: 0]
  ------------------
 1536|      0|            infoSink.debug << "using non_coherent_depth_attachment_readEXT\n";
 1537|      0|        if (nonCoherentStencilAttachmentReadEXT)
  ------------------
  |  Branch (1537:13): [True: 0, False: 0]
  ------------------
 1538|      0|            infoSink.debug << "using non_coherent_stencil_attachment_readEXT\n";
 1539|      0|        if (nonCoherentTileAttachmentReadQCOM)
  ------------------
  |  Branch (1539:13): [True: 0, False: 0]
  ------------------
 1540|      0|            infoSink.debug << "using non_coherent_attachment_readQCOM\n";
 1541|      0|        if (depthLayout != EldNone)
  ------------------
  |  Branch (1541:13): [True: 0, False: 0]
  ------------------
 1542|      0|            infoSink.debug << "using " << TQualifier::getLayoutDepthString(depthLayout) << "\n";
 1543|      0|        if (blendEquations != 0) {
  ------------------
  |  Branch (1543:13): [True: 0, False: 0]
  ------------------
 1544|      0|            infoSink.debug << "using";
 1545|       |            // blendEquations is a mask, decode it
 1546|      0|            for (TBlendEquationShift be = (TBlendEquationShift)0; be < EBlendCount; be = (TBlendEquationShift)(be + 1)) {
  ------------------
  |  Branch (1546:67): [True: 0, False: 0]
  ------------------
 1547|      0|                if (blendEquations & (1 << be))
  ------------------
  |  Branch (1547:21): [True: 0, False: 0]
  ------------------
 1548|      0|                    infoSink.debug << " " << TQualifier::getBlendEquationString(be);
 1549|      0|            }
 1550|      0|            infoSink.debug << "\n";
 1551|      0|        }
 1552|      0|        if (interlockOrdering != EioNone)
  ------------------
  |  Branch (1552:13): [True: 0, False: 0]
  ------------------
 1553|      0|            infoSink.debug << "interlock ordering = " << TQualifier::getInterlockOrderingString(interlockOrdering) << "\n";
 1554|      0|        break;
 1555|       |
 1556|      0|    case EShLangMesh:
  ------------------
  |  Branch (1556:5): [True: 0, False: 891]
  ------------------
 1557|      0|        infoSink.debug << "max_vertices = " << vertices << "\n";
 1558|      0|        infoSink.debug << "max_primitives = " << primitives << "\n";
 1559|      0|        infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
 1560|      0|        [[fallthrough]];
 1561|      0|    case EShLangTask:
  ------------------
  |  Branch (1561:5): [True: 0, False: 891]
  ------------------
 1562|       |        // Fall through
 1563|      0|    case EShLangCompute:
  ------------------
  |  Branch (1563:5): [True: 0, False: 891]
  ------------------
 1564|      0|        infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n";
 1565|      0|        {
 1566|      0|            if (localSizeSpecId[0] != TQualifier::layoutNotSet ||
  ------------------
  |  Branch (1566:17): [True: 0, False: 0]
  ------------------
 1567|      0|                localSizeSpecId[1] != TQualifier::layoutNotSet ||
  ------------------
  |  Branch (1567:17): [True: 0, False: 0]
  ------------------
 1568|      0|                localSizeSpecId[2] != TQualifier::layoutNotSet) {
  ------------------
  |  Branch (1568:17): [True: 0, False: 0]
  ------------------
 1569|      0|                infoSink.debug << "local_size ids = (" <<
 1570|      0|                    localSizeSpecId[0] << ", " <<
 1571|      0|                    localSizeSpecId[1] << ", " <<
 1572|      0|                    localSizeSpecId[2] << ")\n";
 1573|      0|            }
 1574|      0|        }
 1575|      0|        if (nonCoherentTileAttachmentReadQCOM)
  ------------------
  |  Branch (1575:13): [True: 0, False: 0]
  ------------------
 1576|      0|            infoSink.debug << "using non_coherent_attachment_readQCOM\n";
 1577|      0|        if (isTileShadingRateQCOMSet()) {
  ------------------
  |  Branch (1577:13): [True: 0, False: 0]
  ------------------
 1578|      0|            infoSink.debug << "shading_rateQCOM = (" << tileShadingRateQCOM[0] << ", "
 1579|      0|                                                     << tileShadingRateQCOM[1] << ", "
 1580|      0|                                                     << tileShadingRateQCOM[2] << ")\n";
 1581|      0|        }
 1582|      0|        break;
 1583|       |
 1584|      0|    default:
  ------------------
  |  Branch (1584:5): [True: 0, False: 891]
  ------------------
 1585|      0|        break;
 1586|    891|    }
 1587|       |
 1588|    891|    if (treeRoot == nullptr || ! tree)
  ------------------
  |  Branch (1588:9): [True: 0, False: 891]
  |  Branch (1588:32): [True: 0, False: 891]
  ------------------
 1589|      0|        return;
 1590|       |
 1591|    891|    TOutputTraverser it(infoSink);
 1592|    891|    if (getBinaryDoubleOutput())
  ------------------
  |  Branch (1592:9): [True: 0, False: 891]
  ------------------
 1593|      0|        it.setDoubleOutput(TOutputTraverser::BinaryDoubleOutput);
 1594|    891|    treeRoot->traverse(&it);
 1595|    891|}
intermOut.cpp:_ZN7glslangL14OutputTreeTextER9TInfoSinkPK11TIntermNodei:
   99|  2.67k|{
  100|  2.67k|    int i;
  101|       |
  102|  2.67k|    infoSink.debug << node->getLoc().string << ":";
  103|  2.67k|    if (node->getLoc().line)
  ------------------
  |  Branch (103:9): [True: 0, False: 2.67k]
  ------------------
  104|      0|        infoSink.debug << node->getLoc().line;
  105|  2.67k|    else
  106|  2.67k|        infoSink.debug << "? ";
  107|       |
  108|  7.13k|    for (i = 0; i < depth; ++i)
  ------------------
  |  Branch (108:17): [True: 4.45k, False: 2.67k]
  ------------------
  109|  4.45k|        infoSink.debug << "  ";
  110|  2.67k|}
_ZN7glslang16TOutputTraverserC2ER9TInfoSink:
   67|    891|    TOutputTraverser(TInfoSink& i) : infoSink(i), extraOutput(NoExtraOutput) { }

_ZN7glslang15TConstTraverser14visitAggregateENS_6TVisitEPNS_16TIntermAggregateE:
   72|  4.41k|{
   73|  4.41k|    if (! node->isConstructor() && node->getOp() != EOpComma) {
  ------------------
  |  Branch (73:9): [True: 0, False: 4.41k]
  |  Branch (73:36): [True: 0, False: 0]
  ------------------
   74|      0|        error = true;
   75|       |
   76|      0|        return false;
   77|      0|    }
   78|       |
   79|  4.41k|    bool flag = node->getSequence().size() == 1 && node->getSequence()[0]->getAsTyped()->getAsConstantUnion();
  ------------------
  |  Branch (79:17): [True: 15, False: 4.40k]
  |  Branch (79:52): [True: 15, False: 0]
  ------------------
   80|  4.41k|    if (flag) {
  ------------------
  |  Branch (80:9): [True: 15, False: 4.40k]
  ------------------
   81|     15|        singleConstantParam = true;
   82|     15|        constructorType = node->getOp();
   83|     15|        size = node->getType().computeNumComponents();
   84|       |
   85|     15|        if (node->getType().isMatrix()) {
  ------------------
  |  Branch (85:13): [True: 0, False: 15]
  ------------------
   86|      0|            isMatrix = true;
   87|      0|            matrixCols = node->getType().getMatrixCols();
   88|      0|            matrixRows = node->getType().getMatrixRows();
   89|      0|        }
   90|     15|    }
   91|       |
   92|  4.41k|    for (TIntermSequence::iterator p = node->getSequence().begin();
   93|  17.6k|                                   p != node->getSequence().end(); p++) {
  ------------------
  |  Branch (93:36): [True: 13.2k, False: 4.41k]
  ------------------
   94|       |
   95|  13.2k|        if (node->getOp() == EOpComma)
  ------------------
  |  Branch (95:13): [True: 0, False: 13.2k]
  ------------------
   96|      0|            index = 0;
   97|       |
   98|  13.2k|        (*p)->traverse(this);
   99|  13.2k|    }
  100|  4.41k|    if (flag)
  ------------------
  |  Branch (100:9): [True: 15, False: 4.40k]
  ------------------
  101|     15|    {
  102|     15|        singleConstantParam = false;
  103|     15|        constructorType = EOpNull;
  104|     15|        size = 0;
  105|     15|        isMatrix = false;
  106|     15|        matrixCols = 0;
  107|     15|        matrixRows = 0;
  108|     15|    }
  109|       |
  110|  4.41k|    return false;
  111|  4.41k|}
_ZN7glslang15TConstTraverser18visitConstantUnionEPNS_20TIntermConstantUnionE:
  114|  13.2k|{
  115|  13.2k|    TConstUnionArray leftUnionArray(unionArray);
  116|  13.2k|    int instanceSize = type.computeNumComponents();
  117|       |
  118|  13.2k|    if (index >= instanceSize)
  ------------------
  |  Branch (118:9): [True: 0, False: 13.2k]
  ------------------
  119|      0|        return;
  120|       |
  121|  13.2k|    if (! singleConstantParam) {
  ------------------
  |  Branch (121:9): [True: 13.2k, False: 15]
  ------------------
  122|  13.2k|        int rightUnionSize = node->getType().computeNumComponents();
  123|       |
  124|  13.2k|        const TConstUnionArray& rightUnionArray = node->getConstArray();
  125|  26.4k|        for (int i = 0; i < rightUnionSize; i++) {
  ------------------
  |  Branch (125:25): [True: 13.2k, False: 13.2k]
  ------------------
  126|  13.2k|            if (index >= instanceSize)
  ------------------
  |  Branch (126:17): [True: 0, False: 13.2k]
  ------------------
  127|      0|                return;
  128|  13.2k|            leftUnionArray[index] = rightUnionArray[i];
  129|       |
  130|  13.2k|            index++;
  131|  13.2k|        }
  132|  13.2k|    } else {
  133|     15|        int endIndex = index + size;
  134|     15|        const TConstUnionArray& rightUnionArray = node->getConstArray();
  135|     15|        if (! isMatrix) {
  ------------------
  |  Branch (135:13): [True: 15, False: 0]
  ------------------
  136|     15|            int count = 0;
  137|     15|            int nodeComps = node->getType().computeNumComponents();
  138|     45|            for (int i = index; i < endIndex; i++) {
  ------------------
  |  Branch (138:33): [True: 30, False: 15]
  ------------------
  139|     30|                if (i >= instanceSize)
  ------------------
  |  Branch (139:21): [True: 0, False: 30]
  ------------------
  140|      0|                    return;
  141|       |
  142|     30|                leftUnionArray[i] = rightUnionArray[count];
  143|       |
  144|     30|                (index)++;
  145|       |
  146|     30|                if (nodeComps > 1)
  ------------------
  |  Branch (146:21): [True: 0, False: 30]
  ------------------
  147|      0|                    count++;
  148|     30|            }
  149|     15|        } else {
  150|       |            // constructing a matrix, but from what?
  151|      0|            if (node->isMatrix()) {
  ------------------
  |  Branch (151:17): [True: 0, False: 0]
  ------------------
  152|       |                // Matrix from a matrix; this has the outer matrix, node is the argument matrix.
  153|       |                // Traverse the outer, potentially bigger matrix, fill in missing pieces with the
  154|       |                // identity matrix.
  155|      0|                for (int c = 0; c < matrixCols; ++c) {
  ------------------
  |  Branch (155:33): [True: 0, False: 0]
  ------------------
  156|      0|                    for (int r = 0; r < matrixRows; ++r) {
  ------------------
  |  Branch (156:37): [True: 0, False: 0]
  ------------------
  157|      0|                        int targetOffset = index + c * matrixRows + r;
  158|      0|                        if (r < node->getType().getMatrixRows() && c < node->getType().getMatrixCols()) {
  ------------------
  |  Branch (158:29): [True: 0, False: 0]
  |  Branch (158:68): [True: 0, False: 0]
  ------------------
  159|      0|                            int srcOffset = c * node->getType().getMatrixRows() + r;
  160|      0|                            leftUnionArray[targetOffset] = rightUnionArray[srcOffset];
  161|      0|                        } else if (r == c)
  ------------------
  |  Branch (161:36): [True: 0, False: 0]
  ------------------
  162|      0|                            leftUnionArray[targetOffset].setDConst(1.0);
  163|      0|                        else
  164|      0|                            leftUnionArray[targetOffset].setDConst(0.0);
  165|      0|                    }
  166|      0|                }
  167|      0|            } else {
  168|       |                // matrix from vector or scalar
  169|      0|                int nodeComps = node->getType().computeNumComponents();
  170|      0|                if (nodeComps == 1) {
  ------------------
  |  Branch (170:21): [True: 0, False: 0]
  ------------------
  171|      0|                    for (int c = 0; c < matrixCols; ++c) {
  ------------------
  |  Branch (171:37): [True: 0, False: 0]
  ------------------
  172|      0|                        for (int r = 0; r < matrixRows; ++r) {
  ------------------
  |  Branch (172:41): [True: 0, False: 0]
  ------------------
  173|      0|                            if (r == c)
  ------------------
  |  Branch (173:33): [True: 0, False: 0]
  ------------------
  174|      0|                                leftUnionArray[index] = rightUnionArray[0];
  175|      0|                            else
  176|      0|                                leftUnionArray[index].setDConst(0.0);
  177|      0|                            index++;
  178|      0|                        }
  179|      0|                    }
  180|      0|                } else {
  181|      0|                    int count = 0;
  182|      0|                    for (int i = index; i < endIndex; i++) {
  ------------------
  |  Branch (182:41): [True: 0, False: 0]
  ------------------
  183|      0|                        if (i >= instanceSize)
  ------------------
  |  Branch (183:29): [True: 0, False: 0]
  ------------------
  184|      0|                            return;
  185|       |
  186|       |                        // construct the matrix in column-major order, from
  187|       |                        // the components provided, in order
  188|      0|                        leftUnionArray[i] = rightUnionArray[count];
  189|       |
  190|      0|                        index++;
  191|      0|                        count++;
  192|      0|                    }
  193|      0|                }
  194|      0|            }
  195|      0|        }
  196|     15|    }
  197|  13.2k|}
_ZN7glslang13TIntermediate14parseConstTreeEP11TIntermNodeNS_16TConstUnionArrayENS_9TOperatorERKNS_5TTypeEb:
  200|  4.41k|{
  201|  4.41k|    if (root == nullptr)
  ------------------
  |  Branch (201:9): [True: 0, False: 4.41k]
  ------------------
  202|      0|        return false;
  203|       |
  204|  4.41k|    TConstTraverser it(unionArray, singleConstantParam, constructorType, t);
  205|       |
  206|  4.41k|    root->traverse(&it);
  207|  4.41k|    if (it.error)
  ------------------
  |  Branch (207:9): [True: 0, False: 4.41k]
  ------------------
  208|      0|        return true;
  209|  4.41k|    else
  210|  4.41k|        return false;
  211|  4.41k|}
_ZN7glslang15TConstTraverserC2ERKNS_16TConstUnionArrayEbNS_9TOperatorERKNS_5TTypeE:
   47|  4.41k|      : unionArray(cUnion), type(t),
   48|  4.41k|        constructorType(constructType), singleConstantParam(singleConstParam), error(false), isMatrix(false),
   49|  4.41k|        matrixCols(0), matrixRows(0) {  index = 0; tOp = EOpNull; }

_ZN7glslang10TPpContext9CPPdefineEPNS_8TPpTokenE:
   96|   121k|{
   97|   121k|    MacroSymbol mac;
   98|       |
   99|       |    // get the macro name
  100|   121k|    int token = scanToken(ppToken);
  101|   121k|    if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (101:9): [True: 1, False: 121k]
  ------------------
  102|      1|        parseContext.ppError(ppToken->loc, "must be followed by macro name", "#define", "");
  103|      1|        return token;
  104|      1|    }
  105|   121k|    if (ppToken->loc.string >= 0) {
  ------------------
  |  Branch (105:9): [True: 19, False: 121k]
  ------------------
  106|       |        // We are in user code; check for reserved name use:
  107|     19|        parseContext.reservedPpErrorCheck(ppToken->loc, ppToken->name, "#define");
  108|     19|    }
  109|       |
  110|       |    // save the macro name
  111|   121k|    const int defAtom = atomStrings.getAddAtom(ppToken->name);
  112|   121k|    TSourceLoc defineLoc = ppToken->loc; // because ppToken might go to the next line before we report errors
  113|       |
  114|       |    // gather parameters to the macro, between (...)
  115|   121k|    token = scanToken(ppToken);
  116|   121k|    if (token == '(' && !ppToken->space) {
  ------------------
  |  Branch (116:9): [True: 5, False: 121k]
  |  Branch (116:25): [True: 5, False: 0]
  ------------------
  117|      5|        mac.functionLike = 1;
  118|      5|        do {
  119|      5|            token = scanToken(ppToken);
  120|      5|            if (mac.args.size() == 0 && token == ')')
  ------------------
  |  Branch (120:17): [True: 5, False: 0]
  |  Branch (120:41): [True: 1, False: 4]
  ------------------
  121|      1|                break;
  122|      4|            if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (122:17): [True: 0, False: 4]
  ------------------
  123|      0|                parseContext.ppError(ppToken->loc, "bad argument", "#define", "");
  124|       |
  125|      0|                return token;
  126|      0|            }
  127|      4|            const int argAtom = atomStrings.getAddAtom(ppToken->name);
  128|       |
  129|       |            // check for duplication of parameter name
  130|      4|            bool duplicate = false;
  131|      4|            for (size_t a = 0; a < mac.args.size(); ++a) {
  ------------------
  |  Branch (131:32): [True: 0, False: 4]
  ------------------
  132|      0|                if (mac.args[a] == argAtom) {
  ------------------
  |  Branch (132:21): [True: 0, False: 0]
  ------------------
  133|      0|                    parseContext.ppError(ppToken->loc, "duplicate macro parameter", "#define", "");
  134|      0|                    duplicate = true;
  135|      0|                    break;
  136|      0|                }
  137|      0|            }
  138|      4|            if (! duplicate)
  ------------------
  |  Branch (138:17): [True: 4, False: 0]
  ------------------
  139|      4|                mac.args.push_back(argAtom);
  140|      4|            token = scanToken(ppToken);
  141|      4|        } while (token == ',');
  ------------------
  |  Branch (141:18): [True: 0, False: 4]
  ------------------
  142|      5|        if (token != ')') {
  ------------------
  |  Branch (142:13): [True: 0, False: 5]
  ------------------
  143|      0|            parseContext.ppError(ppToken->loc, "missing parenthesis", "#define", "");
  144|       |
  145|      0|            return token;
  146|      0|        }
  147|       |
  148|      5|        token = scanToken(ppToken);
  149|   121k|    } else if (token != '\n' && token != EndOfInput && !ppToken->space) {
  ------------------
  |  Branch (149:16): [True: 121k, False: 0]
  |  Branch (149:33): [True: 121k, False: 0]
  |  Branch (149:56): [True: 1, False: 121k]
  ------------------
  150|      1|        parseContext.ppWarn(ppToken->loc, "missing space after macro name", "#define", "");
  151|       |
  152|      1|        return token;
  153|      1|    }
  154|       |
  155|   121k|    int pendingPoundSymbols = 0;
  156|   121k|    TPpToken savePound;
  157|       |    // record the definition of the macro
  158|   249k|    while (token != '\n' && token != EndOfInput) {
  ------------------
  |  Branch (158:12): [True: 128k, False: 121k]
  |  Branch (158:29): [True: 128k, False: 2]
  ------------------
  159|   128k|        if (token == '#') {
  ------------------
  |  Branch (159:13): [True: 2, False: 128k]
  ------------------
  160|      2|            pendingPoundSymbols++;
  161|      2|            if (pendingPoundSymbols == 0) {
  ------------------
  |  Branch (161:17): [True: 0, False: 2]
  ------------------
  162|      0|                savePound = *ppToken;
  163|      0|            }
  164|   128k|        } else if (pendingPoundSymbols == 0) {
  ------------------
  |  Branch (164:20): [True: 128k, False: 1]
  ------------------
  165|   128k|            mac.body.putToken(token, ppToken);
  166|   128k|        } else if (pendingPoundSymbols == 1) {
  ------------------
  |  Branch (166:20): [True: 0, False: 1]
  ------------------
  167|       |            // A single #: stringify
  168|      0|            parseContext.requireProfile(ppToken->loc, ~EEsProfile, "stringify (#)");
  169|      0|            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, nullptr, "stringify (#)");
  170|      0|            bool isArg = false;
  171|      0|            if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (171:17): [True: 0, False: 0]
  ------------------
  172|      0|                for (int i = (int)mac.args.size() - 1; i >= 0; i--) {
  ------------------
  |  Branch (172:56): [True: 0, False: 0]
  ------------------
  173|      0|                    if (strcmp(atomStrings.getString(mac.args[i]), ppToken->name) == 0) {
  ------------------
  |  Branch (173:25): [True: 0, False: 0]
  ------------------
  174|      0|                        isArg = true;
  175|      0|                        break;
  176|      0|                    }
  177|      0|                }
  178|      0|            }
  179|      0|            if (!isArg) {
  ------------------
  |  Branch (179:17): [True: 0, False: 0]
  ------------------
  180|      0|                parseContext.ppError(ppToken->loc, "'#' is not followed by a macro parameter.", "#", "");
  181|      0|                return token;
  182|      0|            }
  183|      0|            mac.body.putToken(tStringifyLevelInput::PUSH, ppToken);
  184|      0|            mac.body.putToken(token, ppToken);
  185|      0|            mac.body.putToken(tStringifyLevelInput::POP, ppToken);
  186|      0|            pendingPoundSymbols = 0;
  187|      1|        } else if (pendingPoundSymbols % 2 == 0) {
  ------------------
  |  Branch (187:20): [True: 1, False: 0]
  ------------------
  188|       |            // Any number of pastes '##' in a row: idempotent, just becomes one paste
  189|      1|            parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
  190|      1|            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, nullptr, "token pasting (##)");
  191|      2|            for (int i = 0; i < pendingPoundSymbols / 2; i++) {
  ------------------
  |  Branch (191:29): [True: 1, False: 1]
  ------------------
  192|      1|                mac.body.putToken(PpAtomPaste, &savePound);
  193|      1|            }
  194|      1|            mac.body.putToken(token, ppToken);
  195|      1|            pendingPoundSymbols = 0;
  196|      1|        } else {
  197|       |            // An odd number of '#' i.e., mix of paste and stringify: does not give valid preprocessing token
  198|      0|            parseContext.ppError(ppToken->loc, "Illegal sequence of paste (##) and stringify (#).", "#", "");
  199|      0|            return token;
  200|      0|        }
  201|       |
  202|   128k|        token = scanToken(ppToken);
  203|   128k|    }
  204|   121k|    if (pendingPoundSymbols != 0) {
  ------------------
  |  Branch (204:9): [True: 0, False: 121k]
  ------------------
  205|      0|        parseContext.ppError(ppToken->loc, "Macro ended with incomplete '#' paste/stringify operators", "#", "");
  206|      0|    }
  207|       |
  208|       |    // check for duplicate definition
  209|   121k|    MacroSymbol* existing = lookupMacroDef(defAtom);
  210|   121k|    if (existing != nullptr) {
  ------------------
  |  Branch (210:9): [True: 1, False: 121k]
  ------------------
  211|      1|        if (! existing->undef) {
  ------------------
  |  Branch (211:13): [True: 1, False: 0]
  ------------------
  212|       |            // Already defined -- need to make sure they are identical:
  213|       |            // "Two replacement lists are identical if and only if the
  214|       |            // preprocessing tokens in both have the same number,
  215|       |            // ordering, spelling, and white-space separation, where all
  216|       |            // white-space separations are considered identical."
  217|      1|            if (existing->functionLike != mac.functionLike) {
  ------------------
  |  Branch (217:17): [True: 0, False: 1]
  ------------------
  218|      0|                parseContext.ppError(defineLoc, "Macro redefined; function-like versus object-like:", "#define",
  219|      0|                    atomStrings.getString(defAtom));
  220|      1|            } else if (existing->args.size() != mac.args.size()) {
  ------------------
  |  Branch (220:24): [True: 0, False: 1]
  ------------------
  221|      0|                parseContext.ppError(defineLoc, "Macro redefined; different number of arguments:", "#define",
  222|      0|                    atomStrings.getString(defAtom));
  223|      1|            } else {
  224|      1|                if (existing->args != mac.args) {
  ------------------
  |  Branch (224:21): [True: 0, False: 1]
  ------------------
  225|      0|                    parseContext.ppError(defineLoc, "Macro redefined; different argument names:", "#define",
  226|      0|                       atomStrings.getString(defAtom));
  227|      0|                }
  228|       |                // set up to compare the two
  229|      1|                existing->body.reset();
  230|      1|                mac.body.reset();
  231|      1|                int newToken;
  232|      1|                bool firstToken = true;
  233|      5|                do {
  234|      5|                    int oldToken;
  235|      5|                    TPpToken oldPpToken;
  236|      5|                    TPpToken newPpToken;
  237|      5|                    oldToken = existing->body.getToken(parseContext, &oldPpToken);
  238|      5|                    newToken = mac.body.getToken(parseContext, &newPpToken);
  239|       |                    // for the first token, preceding spaces don't matter
  240|      5|                    if (firstToken) {
  ------------------
  |  Branch (240:25): [True: 1, False: 4]
  ------------------
  241|      1|                        newPpToken.space = oldPpToken.space;
  242|      1|                        firstToken = false;
  243|      1|                    }
  244|      5|                    if (oldToken != newToken || oldPpToken != newPpToken) {
  ------------------
  |  Branch (244:25): [True: 1, False: 4]
  |  Branch (244:49): [True: 0, False: 4]
  ------------------
  245|      1|                        parseContext.ppError(defineLoc, "Macro redefined; different substitutions:", "#define",
  246|      1|                            atomStrings.getString(defAtom));
  247|      1|                        break;
  248|      1|                    }
  249|      5|                } while (newToken != EndOfInput);
  ------------------
  |  Branch (249:26): [True: 4, False: 0]
  ------------------
  250|      1|            }
  251|      1|        }
  252|      1|        *existing = mac;
  253|      1|    } else
  254|   121k|        addMacroDef(defAtom, mac);
  255|       |
  256|   121k|    return '\n';
  257|   121k|}
_ZN7glslang10TPpContext7CPPelseEiPNS_8TPpTokenE:
  287|    127|{
  288|    127|    inElseSkip = true;
  289|    127|    int depth = 0;
  290|    127|    int token = scanToken(ppToken);
  291|       |
  292|   707k|    while (token != EndOfInput) {
  ------------------
  |  Branch (292:12): [True: 707k, False: 8]
  ------------------
  293|   707k|        if (token != '#') {
  ------------------
  |  Branch (293:13): [True: 615k, False: 92.5k]
  ------------------
  294|  2.18M|            while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (294:20): [True: 1.57M, False: 615k]
  |  Branch (294:37): [True: 1.57M, False: 117]
  ------------------
  295|  1.57M|                token = scanToken(ppToken);
  296|       |
  297|   615k|            if (token == EndOfInput)
  ------------------
  |  Branch (297:17): [True: 117, False: 615k]
  ------------------
  298|    117|                return token;
  299|       |
  300|   615k|            token = scanToken(ppToken);
  301|   615k|            continue;
  302|   615k|        }
  303|       |
  304|  92.5k|        if ((token = scanToken(ppToken)) != PpAtomIdentifier)
  ------------------
  |  Branch (304:13): [True: 11.4k, False: 81.0k]
  ------------------
  305|  11.4k|            continue;
  306|       |
  307|  81.0k|        int nextAtom = atomStrings.getAtom(ppToken->name);
  308|  81.0k|        if (nextAtom == PpAtomIf || nextAtom == PpAtomIfdef || nextAtom == PpAtomIfndef) {
  ------------------
  |  Branch (308:13): [True: 357, False: 80.7k]
  |  Branch (308:37): [True: 29, False: 80.6k]
  |  Branch (308:64): [True: 0, False: 80.6k]
  ------------------
  309|    386|            depth++;
  310|    386|            if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
  ------------------
  |  Branch (310:17): [True: 0, False: 386]
  |  Branch (310:44): [True: 0, False: 386]
  ------------------
  311|      0|                parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if/#ifdef/#ifndef", "");
  312|      0|                return EndOfInput;
  313|    386|            } else {
  314|    386|                ifdepth++;
  315|    386|                elsetracker++;
  316|    386|            }
  317|  80.6k|        } else if (nextAtom == PpAtomEndif) {
  ------------------
  |  Branch (317:20): [True: 49, False: 80.6k]
  ------------------
  318|     49|            token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
  319|     49|            if (elsetracker >= 0)
  ------------------
  |  Branch (319:17): [True: 49, False: 0]
  ------------------
  320|     49|                elseSeen[elsetracker] = false;
  321|     49|            --elsetracker;
  322|     49|            if (depth == 0) {
  ------------------
  |  Branch (322:17): [True: 2, False: 47]
  ------------------
  323|       |                // found the #endif we are looking for
  324|      2|                if (ifdepth > 0)
  ------------------
  |  Branch (324:21): [True: 2, False: 0]
  ------------------
  325|      2|                    --ifdepth;
  326|      2|                break;
  327|      2|            }
  328|     47|            --depth;
  329|     47|            if (ifdepth > 0)
  ------------------
  |  Branch (329:17): [True: 47, False: 0]
  ------------------
  330|     47|                --ifdepth;
  331|  80.6k|        } else if (matchelse && depth == 0) {
  ------------------
  |  Branch (331:20): [True: 80.6k, False: 0]
  |  Branch (331:33): [True: 28.2k, False: 52.3k]
  ------------------
  332|  28.2k|            if (nextAtom == PpAtomElse) {
  ------------------
  |  Branch (332:17): [True: 0, False: 28.2k]
  ------------------
  333|      0|                elseSeen[elsetracker] = true;
  334|      0|                token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
  335|       |                // found the #else we are looking for
  336|      0|                break;
  337|  28.2k|            } else if (nextAtom == PpAtomElif) {
  ------------------
  |  Branch (337:24): [True: 0, False: 28.2k]
  ------------------
  338|      0|                if (elseSeen[elsetracker])
  ------------------
  |  Branch (338:21): [True: 0, False: 0]
  ------------------
  339|      0|                    parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
  340|       |                /* we decrement ifdepth here, because CPPif will increment
  341|       |                * it and we really want to leave it alone */
  342|      0|                if (ifdepth > 0) {
  ------------------
  |  Branch (342:21): [True: 0, False: 0]
  ------------------
  343|      0|                    --ifdepth;
  344|      0|                    elseSeen[elsetracker] = false;
  345|      0|                    --elsetracker;
  346|      0|                }
  347|      0|                inElseSkip = false;
  348|      0|                return CPPif(ppToken);
  349|      0|            }
  350|  52.3k|        } else if (nextAtom == PpAtomElse) {
  ------------------
  |  Branch (350:20): [True: 13, False: 52.3k]
  ------------------
  351|     13|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (351:17): [True: 0, False: 13]
  ------------------
  352|      0|                parseContext.ppError(ppToken->loc, "#else after #else", "#else", "");
  353|     13|            else
  354|     13|                elseSeen[elsetracker] = true;
  355|     13|            token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
  356|  52.3k|        } else if (nextAtom == PpAtomElif) {
  ------------------
  |  Branch (356:20): [True: 18, False: 52.3k]
  ------------------
  357|     18|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (357:17): [True: 0, False: 18]
  ------------------
  358|      0|                parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
  359|     18|        }
  360|  81.0k|    }
  361|       |    
  362|     10|    inElseSkip = false;
  363|     10|    return token;
  364|    127|}
_ZN7glslang10TPpContext15extraTokenCheckEiPNS_8TPpTokenEi:
  368|    206|{
  369|    206|    if (token != '\n' && token != EndOfInput) {
  ------------------
  |  Branch (369:9): [True: 18, False: 188]
  |  Branch (369:26): [True: 15, False: 3]
  ------------------
  370|     15|        static const char* message = "unexpected tokens following directive";
  371|       |
  372|     15|        const char* label;
  373|     15|        if (contextAtom == PpAtomElse)
  ------------------
  |  Branch (373:13): [True: 0, False: 15]
  ------------------
  374|      0|            label = "#else";
  375|     15|        else if (contextAtom == PpAtomElif)
  ------------------
  |  Branch (375:18): [True: 0, False: 15]
  ------------------
  376|      0|            label = "#elif";
  377|     15|        else if (contextAtom == PpAtomEndif)
  ------------------
  |  Branch (377:18): [True: 0, False: 15]
  ------------------
  378|      0|            label = "#endif";
  379|     15|        else if (contextAtom == PpAtomIf)
  ------------------
  |  Branch (379:18): [True: 14, False: 1]
  ------------------
  380|     14|            label = "#if";
  381|      1|        else if (contextAtom == PpAtomLine)
  ------------------
  |  Branch (381:18): [True: 1, False: 0]
  ------------------
  382|      1|            label = "#line";
  383|      0|        else
  384|      0|            label = "";
  385|       |
  386|     15|        if (parseContext.relaxedErrors())
  ------------------
  |  Branch (386:13): [True: 9, False: 6]
  ------------------
  387|      9|            parseContext.ppWarn(ppToken->loc, message, label, "");
  388|      6|        else
  389|      6|            parseContext.ppError(ppToken->loc, message, label, "");
  390|       |
  391|     55|        while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (391:16): [True: 48, False: 7]
  |  Branch (391:33): [True: 40, False: 8]
  ------------------
  392|     40|            token = scanToken(ppToken);
  393|     15|    }
  394|       |
  395|    206|    return token;
  396|    206|}
_ZN7glslang10TPpContext4evalEiibRiRbPNS_8TPpTokenE:
  470|    296|{
  471|    296|    TSourceLoc loc = ppToken->loc;  // because we sometimes read the newline before reporting the error
  472|    296|    if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (472:9): [True: 6, False: 290]
  ------------------
  473|      6|        if (strcmp("defined", ppToken->name) == 0) {
  ------------------
  |  Branch (473:13): [True: 3, False: 3]
  ------------------
  474|      3|            if (! parseContext.isReadingHLSL() && isMacroInput()) {
  ------------------
  |  Branch (474:17): [True: 0, False: 3]
  |  Branch (474:51): [True: 0, False: 0]
  ------------------
  475|      0|                if (parseContext.relaxedErrors())
  ------------------
  |  Branch (475:21): [True: 0, False: 0]
  ------------------
  476|      0|                    parseContext.ppWarn(ppToken->loc, "nonportable when expanded from macros for preprocessor expression",
  477|      0|                        "defined", "");
  478|      0|                else
  479|      0|                    parseContext.ppError(ppToken->loc, "cannot use in preprocessor expression when expanded from macros",
  480|      0|                        "defined", "");
  481|      0|            }
  482|      3|            bool needclose = 0;
  483|      3|            token = scanToken(ppToken);
  484|      3|            if (token == '(') {
  ------------------
  |  Branch (484:17): [True: 3, False: 0]
  ------------------
  485|      3|                needclose = true;
  486|      3|                token = scanToken(ppToken);
  487|      3|            }
  488|      3|            if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (488:17): [True: 0, False: 3]
  ------------------
  489|      0|                parseContext.ppError(loc, "incorrect directive, expected identifier", "preprocessor evaluation", "");
  490|      0|                err = true;
  491|      0|                res = 0;
  492|       |
  493|      0|                return token;
  494|      0|            }
  495|       |
  496|      3|            MacroSymbol* macro = lookupMacroDef(atomStrings.getAtom(ppToken->name));
  497|      3|            res = macro != nullptr ? !macro->undef : 0;
  ------------------
  |  Branch (497:19): [True: 0, False: 3]
  ------------------
  498|      3|            token = scanToken(ppToken);
  499|      3|            if (needclose) {
  ------------------
  |  Branch (499:17): [True: 3, False: 0]
  ------------------
  500|      3|                if (token != ')') {
  ------------------
  |  Branch (500:21): [True: 0, False: 3]
  ------------------
  501|      0|                    parseContext.ppError(loc, "expected ')'", "preprocessor evaluation", "");
  502|      0|                    err = true;
  503|      0|                    res = 0;
  504|       |
  505|      0|                    return token;
  506|      0|                }
  507|      3|                token = scanToken(ppToken);
  508|      3|            }
  509|      3|        } else {
  510|      3|            token = tokenPaste(token, *ppToken);
  511|      3|            token = evalToToken(token, shortCircuit, res, err, ppToken);
  512|      3|            return eval(token, precedence, shortCircuit, res, err, ppToken);
  513|      3|        }
  514|    290|    } else if (token == PpAtomConstInt) {
  ------------------
  |  Branch (514:16): [True: 141, False: 149]
  ------------------
  515|    141|        res = ppToken->ival;
  516|    141|        token = scanToken(ppToken);
  517|    149|    } else if (token == '(') {
  ------------------
  |  Branch (517:16): [True: 1, False: 148]
  ------------------
  518|      1|        token = scanToken(ppToken);
  519|      1|        token = eval(token, MIN_PRECEDENCE, shortCircuit, res, err, ppToken);
  520|      1|        if (! err) {
  ------------------
  |  Branch (520:13): [True: 1, False: 0]
  ------------------
  521|      1|            if (token != ')') {
  ------------------
  |  Branch (521:17): [True: 1, False: 0]
  ------------------
  522|      1|                parseContext.ppError(loc, "expected ')'", "preprocessor evaluation", "");
  523|      1|                err = true;
  524|      1|                res = 0;
  525|       |
  526|      1|                return token;
  527|      1|            }
  528|      0|            token = scanToken(ppToken);
  529|      0|        }
  530|    148|    } else {
  531|    148|        int op = NUM_ELEMENTS(unop) - 1;
  ------------------
  |  |  467|    148|#define NUM_ELEMENTS(A) (sizeof(A) / sizeof(A[0]))
  ------------------
  532|    588|        for (; op >= 0; op--) {
  ------------------
  |  Branch (532:16): [True: 581, False: 7]
  ------------------
  533|    581|            if (unop[op].token == token)
  ------------------
  |  Branch (533:17): [True: 141, False: 440]
  ------------------
  534|    141|                break;
  535|    581|        }
  536|    148|        if (op >= 0) {
  ------------------
  |  Branch (536:13): [True: 141, False: 7]
  ------------------
  537|    141|            token = scanToken(ppToken);
  538|    141|            token = eval(token, UNARY, shortCircuit, res, err, ppToken);
  539|    141|            res = unop[op].op(res);
  540|    141|        } else {
  541|      7|            parseContext.ppError(loc, "bad expression", "preprocessor evaluation", "");
  542|      7|            err = true;
  543|      7|            res = 0;
  544|       |
  545|      7|            return token;
  546|      7|        }
  547|    148|    }
  548|       |
  549|    285|    token = evalToToken(token, shortCircuit, res, err, ppToken);
  550|       |
  551|       |    // Perform evaluation of binary operation, if there is one, otherwise we are done.
  552|    292|    while (! err) {
  ------------------
  |  Branch (552:12): [True: 287, False: 5]
  ------------------
  553|    287|        if (token == ')' || token == '\n')
  ------------------
  |  Branch (553:13): [True: 2, False: 285]
  |  Branch (553:29): [True: 253, False: 32]
  ------------------
  554|    255|            break;
  555|     32|        int op;
  556|    530|        for (op = NUM_ELEMENTS(binop) - 1; op >= 0; op--) {
  ------------------
  |  |  467|     32|#define NUM_ELEMENTS(A) (sizeof(A) / sizeof(A[0]))
  ------------------
  |  Branch (556:44): [True: 509, False: 21]
  ------------------
  557|    509|            if (binop[op].token == token)
  ------------------
  |  Branch (557:17): [True: 11, False: 498]
  ------------------
  558|     11|                break;
  559|    509|        }
  560|     32|        if (op < 0 || binop[op].precedence <= precedence)
  ------------------
  |  Branch (560:13): [True: 21, False: 11]
  |  Branch (560:23): [True: 4, False: 7]
  ------------------
  561|     25|            break;
  562|      7|        int leftSide = res;
  563|       |
  564|       |        // Setup short-circuiting, needed for ES, unless already in a short circuit.
  565|       |        // (Once in a short-circuit, can't turn off again, until that whole subexpression is done.
  566|      7|        if (! shortCircuit) {
  ------------------
  |  Branch (566:13): [True: 7, False: 0]
  ------------------
  567|      7|            if ((token == PpAtomOr  && leftSide == 1) ||
  ------------------
  |  Branch (567:18): [True: 0, False: 7]
  |  Branch (567:40): [True: 0, False: 0]
  ------------------
  568|      7|                (token == PpAtomAnd && leftSide == 0))
  ------------------
  |  Branch (568:18): [True: 1, False: 6]
  |  Branch (568:40): [True: 0, False: 1]
  ------------------
  569|      0|                shortCircuit = true;
  570|      7|        }
  571|       |
  572|      7|        token = scanToken(ppToken);
  573|      7|        token = eval(token, binop[op].precedence, shortCircuit, res, err, ppToken);
  574|       |
  575|      7|        if (binop[op].op == op_div || binop[op].op == op_mod) {
  ------------------
  |  Branch (575:13): [True: 0, False: 7]
  |  Branch (575:39): [True: 1, False: 6]
  ------------------
  576|      1|            if (res == 0) {
  ------------------
  |  Branch (576:17): [True: 1, False: 0]
  ------------------
  577|      1|                parseContext.ppError(loc, "division by 0", "preprocessor evaluation", "");
  578|      1|                res = 1;
  579|      1|            }
  580|      1|        }
  581|      7|        res = binop[op].op(leftSide, res);
  582|      7|    }
  583|       |
  584|    285|    return token;
  585|    296|}
_ZN7glslang10TPpContext11evalToTokenEibRiRbPNS_8TPpTokenE:
  589|    288|{
  590|    291|    while (token == PpAtomIdentifier && strcmp("defined", ppToken->name) != 0) {
  ------------------
  |  Branch (590:12): [True: 5, False: 286]
  |  Branch (590:41): [True: 3, False: 2]
  ------------------
  591|      3|        switch (MacroExpand(ppToken, true, false)) {
  ------------------
  |  Branch (591:17): [True: 3, False: 0]
  ------------------
  592|      0|        case MacroExpandNotStarted:
  ------------------
  |  Branch (592:9): [True: 0, False: 3]
  ------------------
  593|      0|        case MacroExpandError:
  ------------------
  |  Branch (593:9): [True: 0, False: 3]
  ------------------
  594|      0|            parseContext.ppError(ppToken->loc, "can't evaluate expression", "preprocessor evaluation", "");
  595|      0|            err = true;
  596|      0|            res = 0;
  597|      0|            break;
  598|      0|        case MacroExpandStarted:
  ------------------
  |  Branch (598:9): [True: 0, False: 3]
  ------------------
  599|      0|            break;
  600|      3|        case MacroExpandUndef:
  ------------------
  |  Branch (600:9): [True: 3, False: 0]
  ------------------
  601|      3|            if (! shortCircuit && parseContext.isEsProfile()) {
  ------------------
  |  Branch (601:17): [True: 3, False: 0]
  |  Branch (601:35): [True: 2, False: 1]
  ------------------
  602|      2|                const char* message = "undefined macro in expression not allowed in es profile";
  603|      2|                if (parseContext.relaxedErrors())
  ------------------
  |  Branch (603:21): [True: 1, False: 1]
  ------------------
  604|      1|                    parseContext.ppWarn(ppToken->loc, message, "preprocessor evaluation", ppToken->name);
  605|      1|                else
  606|      1|                    parseContext.ppError(ppToken->loc, message, "preprocessor evaluation", ppToken->name);
  607|      2|            }
  608|      3|            break;
  609|      3|        }
  610|      3|        token = scanToken(ppToken);
  611|      3|        if (err)
  ------------------
  |  Branch (611:13): [True: 0, False: 3]
  ------------------
  612|      0|            break;
  613|      3|    }
  614|       |
  615|    288|    return token;
  616|    288|}
_ZN7glslang10TPpContext5CPPifEPNS_8TPpTokenE:
  620|    140|{
  621|    140|    int token = scanToken(ppToken);
  622|    140|    if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
  ------------------
  |  Branch (622:9): [True: 0, False: 140]
  |  Branch (622:36): [True: 0, False: 140]
  ------------------
  623|      0|        parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if", "");
  624|      0|        return EndOfInput;
  625|    140|    } else {
  626|    140|        elsetracker++;
  627|    140|        ifdepth++;
  628|    140|    }
  629|    140|    int res = 0;
  630|    140|    bool err = false;
  631|    140|    token = eval(token, MIN_PRECEDENCE, false, res, err, ppToken);
  632|    140|    token = extraTokenCheck(PpAtomIf, ppToken, token);
  633|    140|    if (!res && !err)
  ------------------
  |  Branch (633:9): [True: 133, False: 7]
  |  Branch (633:17): [True: 127, False: 6]
  ------------------
  634|    127|        token = CPPelse(1, ppToken);
  635|       |
  636|    140|    return token;
  637|    140|}
_ZN7glslang10TPpContext7CPPlineEPNS_8TPpTokenE:
  758|      3|{
  759|       |    // "#line must have, after macro substitution, one of the following forms:
  760|       |    // "#line line
  761|       |    // "#line line source-string-number"
  762|       |
  763|      3|    int token = scanToken(ppToken);
  764|      3|    const TSourceLoc directiveLoc = ppToken->loc;
  765|      3|    if (token == '\n') {
  ------------------
  |  Branch (765:9): [True: 0, False: 3]
  ------------------
  766|      0|        parseContext.ppError(ppToken->loc, "must by followed by an integral literal", "#line", "");
  767|      0|        return token;
  768|      0|    }
  769|       |
  770|      3|    int lineRes = 0; // Line number after macro expansion.
  771|      3|    int lineToken = 0;
  772|      3|    bool hasFile = false;
  773|      3|    int fileRes = 0; // Source file number after macro expansion.
  774|      3|    const char* sourceName = nullptr; // Optional source file name.
  775|      3|    bool lineErr = false;
  776|      3|    bool fileErr = false;
  777|      3|    disableEscapeSequences = true;
  778|      3|    token = eval(token, MIN_PRECEDENCE, false, lineRes, lineErr, ppToken);
  779|      3|    disableEscapeSequences = false;
  780|      3|    if (! lineErr) {
  ------------------
  |  Branch (780:9): [True: 2, False: 1]
  ------------------
  781|      2|        lineToken = lineRes;
  782|      2|        if (token == '\n')
  ------------------
  |  Branch (782:13): [True: 1, False: 1]
  ------------------
  783|      1|            ++lineRes;
  784|       |
  785|      2|        if (parseContext.lineDirectiveShouldSetNextLine())
  ------------------
  |  Branch (785:13): [True: 2, False: 0]
  ------------------
  786|      2|            --lineRes;
  787|      2|        parseContext.setCurrentLine(lineRes);
  788|       |
  789|      2|        if (token != '\n') {
  ------------------
  |  Branch (789:13): [True: 1, False: 1]
  ------------------
  790|      1|            if (token == PpAtomConstString) {
  ------------------
  |  Branch (790:17): [True: 0, False: 1]
  ------------------
  791|      0|                parseContext.ppRequireExtensions(directiveLoc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based #line");
  792|       |                // We need to save a copy of the string instead of pointing
  793|       |                // to the name field of the token since the name field
  794|       |                // will likely be overwritten by the next token scan.
  795|      0|                sourceName = atomStrings.getString(atomStrings.getAddAtom(ppToken->name));
  796|      0|                parseContext.setCurrentSourceName(sourceName);
  797|      0|                hasFile = true;
  798|      0|                token = scanToken(ppToken);
  799|      1|            } else {
  800|      1|                token = eval(token, MIN_PRECEDENCE, false, fileRes, fileErr, ppToken);
  801|      1|                if (! fileErr) {
  ------------------
  |  Branch (801:21): [True: 0, False: 1]
  ------------------
  802|      0|                    parseContext.setCurrentString(fileRes);
  803|      0|                    hasFile = true;
  804|      0|                }
  805|      1|            }
  806|      1|        }
  807|      2|    }
  808|      3|    if (!fileErr && !lineErr) {
  ------------------
  |  Branch (808:9): [True: 2, False: 1]
  |  Branch (808:21): [True: 1, False: 1]
  ------------------
  809|      1|        parseContext.notifyLineDirective(directiveLoc.line, lineToken, hasFile, fileRes, sourceName);
  810|      1|    }
  811|      3|    token = extraTokenCheck(PpAtomLine, ppToken, token);
  812|       |
  813|      3|    return token;
  814|      3|}
_ZN7glslang10TPpContext10CPPversionEPNS_8TPpTokenE:
  897|    336|{
  898|    336|    int token = scanToken(ppToken);
  899|       |
  900|    336|    if (errorOnVersion || versionSeen) {
  ------------------
  |  Branch (900:9): [True: 41, False: 295]
  |  Branch (900:27): [True: 0, False: 295]
  ------------------
  901|     41|        if (parseContext.isReadingHLSL())
  ------------------
  |  Branch (901:13): [True: 21, False: 20]
  ------------------
  902|     21|            parseContext.ppError(ppToken->loc, "invalid preprocessor command", "#version", "");
  903|     20|        else
  904|     20|            parseContext.ppError(ppToken->loc, "must occur first in shader", "#version", "");
  905|     41|    }
  906|    336|    versionSeen = true;
  907|       |
  908|    336|    if (token == '\n') {
  ------------------
  |  Branch (908:9): [True: 16, False: 320]
  ------------------
  909|     16|        parseContext.ppError(ppToken->loc, "must be followed by version number", "#version", "");
  910|       |
  911|     16|        return token;
  912|     16|    }
  913|       |
  914|    320|    if (token != PpAtomConstInt)
  ------------------
  |  Branch (914:9): [True: 156, False: 164]
  ------------------
  915|    156|        parseContext.ppError(ppToken->loc, "must be followed by version number", "#version", "");
  916|       |
  917|    320|    ppToken->ival = atoi(ppToken->name);
  918|    320|    int versionNumber = ppToken->ival;
  919|    320|    int line = ppToken->loc.line;
  920|    320|    token = scanToken(ppToken);
  921|       |
  922|    320|    if (token == '\n') {
  ------------------
  |  Branch (922:9): [True: 40, False: 280]
  ------------------
  923|     40|        parseContext.notifyVersion(line, versionNumber, nullptr);
  924|     40|        return token;
  925|    280|    } else {
  926|    280|        int profileAtom = atomStrings.getAtom(ppToken->name);
  927|    280|        if (profileAtom != PpAtomCore &&
  ------------------
  |  Branch (927:13): [True: 280, False: 0]
  ------------------
  928|    280|            profileAtom != PpAtomCompatibility &&
  ------------------
  |  Branch (928:13): [True: 280, False: 0]
  ------------------
  929|    280|            profileAtom != PpAtomEs)
  ------------------
  |  Branch (929:13): [True: 280, False: 0]
  ------------------
  930|    280|            parseContext.ppError(ppToken->loc, "bad profile name; use es, core, or compatibility", "#version", "");
  931|    280|        parseContext.notifyVersion(line, versionNumber, ppToken->name);
  932|    280|        token = scanToken(ppToken);
  933|       |
  934|    280|        if (token == '\n')
  ------------------
  |  Branch (934:13): [True: 0, False: 280]
  ------------------
  935|      0|            return token;
  936|    280|        else
  937|    280|            parseContext.ppError(ppToken->loc, "bad tokens following profile -- expected newline", "#version", "");
  938|    280|    }
  939|       |
  940|    280|    return token;
  941|    320|}
_ZN7glslang10TPpContext12CPPextensionEPNS_8TPpTokenE:
  945|      4|{
  946|      4|    int line = ppToken->loc.line;
  947|      4|    int token = scanToken(ppToken);
  948|      4|    char extensionName[MaxTokenLength + 1];
  949|       |
  950|      4|    if (token=='\n') {
  ------------------
  |  Branch (950:9): [True: 0, False: 4]
  ------------------
  951|      0|        parseContext.ppError(ppToken->loc, "extension name not specified", "#extension", "");
  952|      0|        return token;
  953|      0|    }
  954|       |
  955|      4|    if (token != PpAtomIdentifier)
  ------------------
  |  Branch (955:9): [True: 0, False: 4]
  ------------------
  956|      0|        parseContext.ppError(ppToken->loc, "extension name expected", "#extension", "");
  957|       |
  958|      4|    snprintf(extensionName, sizeof(extensionName), "%s", ppToken->name);
  959|       |
  960|      4|    token = scanToken(ppToken);
  961|      4|    if (token != ':') {
  ------------------
  |  Branch (961:9): [True: 0, False: 4]
  ------------------
  962|      0|        parseContext.ppError(ppToken->loc, "':' missing after extension name", "#extension", "");
  963|      0|        return token;
  964|      0|    }
  965|       |
  966|      4|    token = scanToken(ppToken);
  967|      4|    if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (967:9): [True: 1, False: 3]
  ------------------
  968|      1|        parseContext.ppError(ppToken->loc, "behavior for extension not specified", "#extension", "");
  969|      1|        return token;
  970|      1|    }
  971|       |
  972|      3|    parseContext.updateExtensionBehavior(line, extensionName, ppToken->name);
  973|      3|    parseContext.notifyExtensionDirective(line, extensionName, ppToken->name);
  974|       |
  975|      3|    token = scanToken(ppToken);
  976|      3|    if (token == '\n')
  ------------------
  |  Branch (976:9): [True: 3, False: 0]
  ------------------
  977|      3|        return token;
  978|      0|    else
  979|      0|        parseContext.ppError(ppToken->loc,  "extra tokens -- expected newline", "#extension","");
  980|       |
  981|      0|    return token;
  982|      3|}
_ZN7glslang10TPpContext11readCPPlineEPNS_8TPpTokenE:
  985|   122k|{
  986|   122k|    int token = scanToken(ppToken);
  987|       |
  988|   122k|    if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (988:9): [True: 122k, False: 87]
  ------------------
  989|   122k|        switch (atomStrings.getAtom(ppToken->name)) {
  990|   121k|        case PpAtomDefine:
  ------------------
  |  Branch (990:9): [True: 121k, False: 733]
  ------------------
  991|   121k|            token = CPPdefine(ppToken);
  992|   121k|            break;
  993|      0|        case PpAtomElse:
  ------------------
  |  Branch (993:9): [True: 0, False: 122k]
  ------------------
  994|      0|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (994:17): [True: 0, False: 0]
  ------------------
  995|      0|                parseContext.ppError(ppToken->loc, "#else after #else", "#else", "");
  996|      0|            elseSeen[elsetracker] = true;
  997|      0|            if (ifdepth == 0)
  ------------------
  |  Branch (997:17): [True: 0, False: 0]
  ------------------
  998|      0|                parseContext.ppError(ppToken->loc, "mismatched statements", "#else", "");
  999|      0|            token = extraTokenCheck(PpAtomElse, ppToken, scanToken(ppToken));
 1000|      0|            token = CPPelse(0, ppToken);
 1001|      0|            break;
 1002|      0|        case PpAtomElif:
  ------------------
  |  Branch (1002:9): [True: 0, False: 122k]
  ------------------
 1003|      0|            if (ifdepth == 0)
  ------------------
  |  Branch (1003:17): [True: 0, False: 0]
  ------------------
 1004|      0|                parseContext.ppError(ppToken->loc, "mismatched statements", "#elif", "");
 1005|      0|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (1005:17): [True: 0, False: 0]
  ------------------
 1006|      0|                parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
 1007|       |            // this token is really a dont care, but we still need to eat the tokens
 1008|      0|            token = scanToken(ppToken);
 1009|      0|            while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (1009:20): [True: 0, False: 0]
  |  Branch (1009:37): [True: 0, False: 0]
  ------------------
 1010|      0|                token = scanToken(ppToken);
 1011|      0|            token = CPPelse(0, ppToken);
 1012|      0|            break;
 1013|      1|        case PpAtomEndif:
  ------------------
  |  Branch (1013:9): [True: 1, False: 122k]
  ------------------
 1014|      1|            if (ifdepth == 0)
  ------------------
  |  Branch (1014:17): [True: 1, False: 0]
  ------------------
 1015|      1|                parseContext.ppError(ppToken->loc, "mismatched statements", "#endif", "");
 1016|      0|            else {
 1017|      0|                if (elsetracker >= 0)
  ------------------
  |  Branch (1017:21): [True: 0, False: 0]
  ------------------
 1018|      0|                    elseSeen[elsetracker] = false;
 1019|      0|                --elsetracker;
 1020|      0|                --ifdepth;
 1021|      0|            }
 1022|      1|            token = extraTokenCheck(PpAtomEndif, ppToken, scanToken(ppToken));
 1023|      1|            break;
 1024|    140|        case PpAtomIf:
  ------------------
  |  Branch (1024:9): [True: 140, False: 122k]
  ------------------
 1025|    140|            token = CPPif(ppToken);
 1026|    140|            break;
 1027|      0|        case PpAtomIfdef:
  ------------------
  |  Branch (1027:9): [True: 0, False: 122k]
  ------------------
 1028|      0|            token = CPPifdef(1, ppToken);
 1029|      0|            break;
 1030|      0|        case PpAtomIfndef:
  ------------------
  |  Branch (1030:9): [True: 0, False: 122k]
  ------------------
 1031|      0|            token = CPPifdef(0, ppToken);
 1032|      0|            break;
 1033|      3|        case PpAtomLine:
  ------------------
  |  Branch (1033:9): [True: 3, False: 122k]
  ------------------
 1034|      3|            token = CPPline(ppToken);
 1035|      3|            break;
 1036|      0|        case PpAtomInclude:
  ------------------
  |  Branch (1036:9): [True: 0, False: 122k]
  ------------------
 1037|      0|            if(!parseContext.isReadingHLSL()) {
  ------------------
  |  Branch (1037:16): [True: 0, False: 0]
  ------------------
 1038|      0|                const std::array exts = { E_GL_GOOGLE_include_directive, E_GL_ARB_shading_language_include };
 1039|      0|                parseContext.ppRequireExtensions(ppToken->loc, exts, "#include");
 1040|      0|            }
 1041|      0|            token = CPPinclude(ppToken);
 1042|      0|            break;
 1043|      0|        case PpAtomPragma:
  ------------------
  |  Branch (1043:9): [True: 0, False: 122k]
  ------------------
 1044|      0|            token = CPPpragma(ppToken);
 1045|      0|            break;
 1046|      0|        case PpAtomUndef:
  ------------------
  |  Branch (1046:9): [True: 0, False: 122k]
  ------------------
 1047|      0|            token = CPPundef(ppToken);
 1048|      0|            break;
 1049|      0|        case PpAtomError:
  ------------------
  |  Branch (1049:9): [True: 0, False: 122k]
  ------------------
 1050|      0|            token = CPPerror(ppToken);
 1051|      0|            break;
 1052|    336|        case PpAtomVersion:
  ------------------
  |  Branch (1052:9): [True: 336, False: 121k]
  ------------------
 1053|    336|            token = CPPversion(ppToken);
 1054|    336|            break;
 1055|      4|        case PpAtomExtension:
  ------------------
  |  Branch (1055:9): [True: 4, False: 122k]
  ------------------
 1056|      4|            token = CPPextension(ppToken);
 1057|      4|            break;
 1058|    249|        default:
  ------------------
  |  Branch (1058:9): [True: 249, False: 122k]
  ------------------
 1059|    249|            parseContext.ppError(ppToken->loc, "invalid directive:", "#", ppToken->name);
 1060|    249|            break;
 1061|   122k|        }
 1062|   122k|    } else if (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (1062:16): [True: 27, False: 60]
  |  Branch (1062:33): [True: 27, False: 0]
  ------------------
 1063|     27|        parseContext.ppError(ppToken->loc, "invalid directive", "#", "");
 1064|       |
 1065|   122k|    while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (1065:12): [True: 1.08k, False: 121k]
  |  Branch (1065:29): [True: 550, False: 535]
  ------------------
 1066|    550|        token = scanToken(ppToken);
 1067|       |
 1068|   122k|    return token;
 1069|   122k|}
_ZN7glslang10TPpContext15PrescanMacroArgERNS0_11TokenStreamEPNS_8TPpTokenEb:
 1107|      1|{
 1108|       |    // expand the argument
 1109|      1|    TokenStream* expandedArg = new TokenStream;
 1110|      1|    pushInput(new tMarkerInput(this));
 1111|      1|    pushTokenStreamInput(arg);
 1112|      1|    int token;
 1113|    144|    while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput) {
  ------------------
  |  Branch (1113:12): [True: 143, False: 1]
  |  Branch (1113:68): [True: 143, False: 0]
  ------------------
 1114|    143|        token = tokenPaste(token, *ppToken);
 1115|    143|        if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (1115:13): [True: 1, False: 142]
  ------------------
 1116|      1|            switch (MacroExpand(ppToken, false, newLineOkay)) {
  ------------------
  |  Branch (1116:21): [True: 1, False: 0]
  ------------------
 1117|      1|            case MacroExpandNotStarted:
  ------------------
  |  Branch (1117:13): [True: 1, False: 0]
  ------------------
 1118|      1|                break;
 1119|      0|            case MacroExpandError:
  ------------------
  |  Branch (1119:13): [True: 0, False: 1]
  ------------------
 1120|       |                // toss the rest of the pushed-input argument by scanning until tMarkerInput
 1121|      0|                while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput)
  ------------------
  |  Branch (1121:24): [True: 0, False: 0]
  |  Branch (1121:80): [True: 0, False: 0]
  ------------------
 1122|      0|                    ;
 1123|      0|                break;
 1124|      0|            case MacroExpandStarted:
  ------------------
  |  Branch (1124:13): [True: 0, False: 1]
  ------------------
 1125|      0|            case MacroExpandUndef:
  ------------------
  |  Branch (1125:13): [True: 0, False: 1]
  ------------------
 1126|      0|                continue;
 1127|      1|            }
 1128|      1|        }
 1129|    143|        if (token == tMarkerInput::marker || token == EndOfInput)
  ------------------
  |  Branch (1129:13): [True: 0, False: 143]
  |  Branch (1129:46): [True: 0, False: 143]
  ------------------
 1130|      0|            break;
 1131|    143|        expandedArg->putToken(token, ppToken);
 1132|    143|    }
 1133|       |
 1134|      1|    if (token != tMarkerInput::marker) {
  ------------------
  |  Branch (1134:9): [True: 0, False: 1]
  ------------------
 1135|       |        // Error, or MacroExpand ate the marker, so had bad input, recover
 1136|      0|        delete expandedArg;
 1137|      0|        expandedArg = nullptr;
 1138|      0|    }
 1139|       |
 1140|      1|    return expandedArg;
 1141|      1|}
_ZN7glslang10TPpContext11tMacroInput4scanEPNS_8TPpTokenE:
 1148|  2.00k|{
 1149|  2.00k|    int token;
 1150|  2.00k|    do {
 1151|  2.00k|        token = mac->body.getToken(pp->parseContext, ppToken);
 1152|  2.00k|    } while (token == ' ');  // handle white space in macro
  ------------------
  |  Branch (1152:14): [True: 0, False: 2.00k]
  ------------------
 1153|       |
 1154|       |    // Hash operators basically turn off a round of macro substitution
 1155|       |    // (the round done on the argument before the round done on the RHS of the
 1156|       |    // macro definition):
 1157|       |    //
 1158|       |    // "A parameter in the replacement list, unless preceded by a # or ##
 1159|       |    // preprocessing token or followed by a ## preprocessing token (see below),
 1160|       |    // is replaced by the corresponding argument after all macros contained
 1161|       |    // therein have been expanded."
 1162|       |    //
 1163|       |    // "If, in the replacement list, a parameter is immediately preceded or
 1164|       |    // followed by a ## preprocessing token, the parameter is replaced by the
 1165|       |    // corresponding argument's preprocessing token sequence."
 1166|       |
 1167|  2.00k|    bool pasting = false;
 1168|  2.00k|    if (postpaste) {
  ------------------
  |  Branch (1168:9): [True: 0, False: 2.00k]
  ------------------
 1169|       |        // don't expand next token
 1170|      0|        pasting = true;
 1171|      0|        postpaste = false;
 1172|      0|    }
 1173|       |
 1174|  2.00k|    if (prepaste) {
  ------------------
  |  Branch (1174:9): [True: 0, False: 2.00k]
  ------------------
 1175|       |        // already know we should be on a ##, verify
 1176|      0|        assert(token == PpAtomPaste);
 1177|      0|        prepaste = false;
 1178|      0|        postpaste = true;
 1179|      0|    }
 1180|       |
 1181|       |    // see if are preceding a ##
 1182|  2.00k|    if (mac->body.peekTokenizedPasting(false)) {
  ------------------
  |  Branch (1182:9): [True: 0, False: 2.00k]
  ------------------
 1183|      0|        prepaste = true;
 1184|      0|        pasting = true;
 1185|      0|    }
 1186|       |
 1187|       |
 1188|       |    // TODO: preprocessor:  properly handle whitespace (or lack of it) between tokens when expanding
 1189|  2.00k|    if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (1189:9): [True: 569, False: 1.43k]
  ------------------
 1190|    569|        int i;
 1191|    569|        for (i = (int)mac->args.size() - 1; i >= 0; i--)
  ------------------
  |  Branch (1191:45): [True: 0, False: 569]
  ------------------
 1192|      0|            if (strcmp(pp->atomStrings.getString(mac->args[i]), ppToken->name) == 0)
  ------------------
  |  Branch (1192:17): [True: 0, False: 0]
  ------------------
 1193|      0|                break;
 1194|    569|        if (i >= 0) {
  ------------------
  |  Branch (1194:13): [True: 0, False: 569]
  ------------------
 1195|      0|            TokenStream* arg = expandedArgs[i];
 1196|      0|            bool expanded = !!arg && !pasting;
  ------------------
  |  Branch (1196:29): [True: 0, False: 0]
  |  Branch (1196:38): [True: 0, False: 0]
  ------------------
 1197|       |            // HLSL does expand macros before concatenation
 1198|      0|            if (arg == nullptr || (pasting && !pp->parseContext.isReadingHLSL()) ) {
  ------------------
  |  Branch (1198:17): [True: 0, False: 0]
  |  Branch (1198:36): [True: 0, False: 0]
  |  Branch (1198:47): [True: 0, False: 0]
  ------------------
 1199|      0|                arg = args[i];
 1200|      0|            }
 1201|      0|            pp->pushTokenStreamInput(*arg, prepaste, expanded);
 1202|       |
 1203|      0|            return pp->scanToken(ppToken);
 1204|      0|        }
 1205|    569|    }
 1206|       |
 1207|  2.00k|    if (token == EndOfInput)
  ------------------
  |  Branch (1207:9): [True: 0, False: 2.00k]
  ------------------
 1208|      0|        mac->busy = 0;
 1209|       |
 1210|  2.00k|    return token;
 1211|  2.00k|}
_ZN7glslang10TPpContext10tZeroInput4scanEPNS_8TPpTokenE:
 1215|      6|{
 1216|      6|    if (done)
  ------------------
  |  Branch (1216:9): [True: 3, False: 3]
  ------------------
 1217|      3|        return EndOfInput;
 1218|       |
 1219|      3|    ppToken->name[0] = '0';
 1220|      3|    ppToken->name[1] = 0;
 1221|      3|    ppToken->ival = 0;
 1222|      3|    ppToken->space = false;
 1223|      3|    done = true;
 1224|       |
 1225|      3|    return PpAtomConstInt;
 1226|      6|}
_ZN7glslang10TPpContext11MacroExpandEPNS_8TPpTokenEbb:
 1241|  67.1M|{
 1242|  67.1M|    ppToken->space = false;
 1243|  67.1M|    int macroAtom = atomStrings.getAtom(ppToken->name);
 1244|       |
 1245|       |    // Bound total MacroExpand nesting depth to prevent stack overflow
 1246|       |    // via unbounded MacroExpand <-> PrescanMacroArg mutual recursion.
 1247|  67.1M|    if (macroExpandDepth >= maxMacroExpandDepth) {
  ------------------
  |  Branch (1247:9): [True: 0, False: 67.1M]
  ------------------
 1248|      0|        parseContext.ppError(ppToken->loc, "macro expansion depth limit exceeded",
 1249|      0|                             "macro expansion", ppToken->name);
 1250|      0|        return MacroExpandNotStarted;
 1251|      0|    }
 1252|  67.1M|    struct DepthGuard {
 1253|  67.1M|        int& d;
 1254|  67.1M|        explicit DepthGuard(int& d_) : d(d_) { ++d; }
 1255|  67.1M|        ~DepthGuard() { --d; }
 1256|  67.1M|    } guard(macroExpandDepth);
 1257|       |
 1258|  67.1M|    if (ppToken->fullyExpanded)
  ------------------
  |  Branch (1258:9): [True: 0, False: 67.1M]
  ------------------
 1259|      0|        return MacroExpandNotStarted;
 1260|       |
 1261|  67.1M|    switch (macroAtom) {
 1262|      0|    case PpAtomLineMacro:
  ------------------
  |  Branch (1262:5): [True: 0, False: 67.1M]
  ------------------
 1263|       |        // Arguments which are macro have been replaced in the first stage.
 1264|      0|        if (ppToken->ival == 0)
  ------------------
  |  Branch (1264:13): [True: 0, False: 0]
  ------------------
 1265|      0|            ppToken->ival = parseContext.getCurrentLoc().line;
 1266|      0|        snprintf(ppToken->name, sizeof(ppToken->name), "%d", ppToken->ival);
 1267|      0|        UngetToken(PpAtomConstInt, ppToken);
 1268|      0|        return MacroExpandStarted;
 1269|       |
 1270|      0|    case PpAtomFileMacro: {
  ------------------
  |  Branch (1270:5): [True: 0, False: 67.1M]
  ------------------
 1271|      0|        if (parseContext.getCurrentLoc().name)
  ------------------
  |  Branch (1271:13): [True: 0, False: 0]
  ------------------
 1272|      0|            parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based __FILE__");
 1273|      0|        ppToken->ival = parseContext.getCurrentLoc().string;
 1274|      0|        snprintf(ppToken->name, sizeof(ppToken->name), "%s", ppToken->loc.getStringNameOrNum().c_str());
 1275|      0|        UngetToken(PpAtomConstInt, ppToken);
 1276|      0|        return MacroExpandStarted;
 1277|      0|    }
 1278|       |
 1279|      0|    case PpAtomVersionMacro:
  ------------------
  |  Branch (1279:5): [True: 0, False: 67.1M]
  ------------------
 1280|      0|        ppToken->ival = parseContext.version;
 1281|      0|        snprintf(ppToken->name, sizeof(ppToken->name), "%d", ppToken->ival);
 1282|      0|        UngetToken(PpAtomConstInt, ppToken);
 1283|      0|        return MacroExpandStarted;
 1284|       |
 1285|  67.1M|    default:
  ------------------
  |  Branch (1285:5): [True: 67.1M, False: 0]
  ------------------
 1286|  67.1M|        break;
 1287|  67.1M|    }
 1288|       |
 1289|  67.1M|    MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom);
  ------------------
  |  Branch (1289:26): [True: 67.1M, False: 336]
  ------------------
 1290|       |
 1291|       |    // no recursive expansions
 1292|  67.1M|    if (macro != nullptr && macro->busy) {
  ------------------
  |  Branch (1292:9): [True: 335, False: 67.1M]
  |  Branch (1292:29): [True: 324, False: 11]
  ------------------
 1293|    324|        ppToken->fullyExpanded = true;
 1294|    324|        return MacroExpandNotStarted;
 1295|    324|    }
 1296|       |
 1297|       |    // not expanding undefined macros
 1298|  67.1M|    if ((macro == nullptr || macro->undef) && ! expandUndef)
  ------------------
  |  Branch (1298:10): [True: 67.1M, False: 11]
  |  Branch (1298:30): [True: 0, False: 11]
  |  Branch (1298:47): [True: 67.1M, False: 3]
  ------------------
 1299|  67.1M|        return MacroExpandNotStarted;
 1300|       |
 1301|       |    // 0 is the value of an undefined macro
 1302|     14|    if ((macro == nullptr || macro->undef) && expandUndef) {
  ------------------
  |  Branch (1302:10): [True: 3, False: 11]
  |  Branch (1302:30): [True: 0, False: 11]
  |  Branch (1302:47): [True: 3, False: 0]
  ------------------
 1303|      3|        pushInput(new tZeroInput(this));
 1304|      3|        return MacroExpandUndef;
 1305|      3|    }
 1306|       |
 1307|     11|    tMacroInput *in = new tMacroInput(this);
 1308|       |
 1309|     11|    TSourceLoc loc = ppToken->loc;  // in case we go to the next line before discovering the error
 1310|     11|    in->mac = macro;
 1311|     11|    if (macro->functionLike) {
  ------------------
  |  Branch (1311:9): [True: 4, False: 7]
  ------------------
 1312|       |        // We don't know yet if this will be a successful call of a
 1313|       |        // function-like macro; need to look for a '(', but without trashing
 1314|       |        // the passed in ppToken, until we know we are no longer speculative.
 1315|      4|        TPpToken parenToken;
 1316|      4|        int token = scanToken(&parenToken);
 1317|      4|        if (newLineOkay) {
  ------------------
  |  Branch (1317:13): [True: 4, False: 0]
  ------------------
 1318|      4|            while (token == '\n')
  ------------------
  |  Branch (1318:20): [True: 0, False: 4]
  ------------------
 1319|      0|                token = scanToken(&parenToken);
 1320|      4|        }
 1321|      4|        if (token != '(') {
  ------------------
  |  Branch (1321:13): [True: 1, False: 3]
  ------------------
 1322|       |            // Function-like macro called with object-like syntax: okay, don't expand.
 1323|       |            // (We ate exactly one token that might not be white space; put it back.
 1324|      1|            UngetToken(token, &parenToken);
 1325|      1|            delete in;
 1326|      1|            return MacroExpandNotStarted;
 1327|      1|        }
 1328|      3|        in->args.resize(in->mac->args.size());
 1329|      6|        for (size_t i = 0; i < in->mac->args.size(); i++)
  ------------------
  |  Branch (1329:28): [True: 3, False: 3]
  ------------------
 1330|      3|            in->args[i] = new TokenStream;
 1331|      3|        in->expandedArgs.resize(in->mac->args.size());
 1332|      6|        for (size_t i = 0; i < in->mac->args.size(); i++)
  ------------------
  |  Branch (1332:28): [True: 3, False: 3]
  ------------------
 1333|      3|            in->expandedArgs[i] = nullptr;
 1334|      3|        size_t arg = 0;
 1335|      3|        bool tokenRecorded = false;
 1336|      3|        do {
 1337|      3|            TVector<char> nestStack;
 1338|    350|            while (true) {
  ------------------
  |  Branch (1338:20): [True: 350, Folded]
  ------------------
 1339|    350|                token = scanToken(ppToken);
 1340|    350|                if (token == EndOfInput || token == tMarkerInput::marker) {
  ------------------
  |  Branch (1340:21): [True: 2, False: 348]
  |  Branch (1340:44): [True: 0, False: 348]
  ------------------
 1341|      2|                    parseContext.ppError(loc, "End of input in macro", "macro expansion", atomStrings.getString(macroAtom));
 1342|      2|                    delete in;
 1343|      2|                    return MacroExpandError;
 1344|      2|                }
 1345|    348|                if (token == '\n') {
  ------------------
  |  Branch (1345:21): [True: 151, False: 197]
  ------------------
 1346|    151|                    if (! newLineOkay) {
  ------------------
  |  Branch (1346:25): [True: 0, False: 151]
  ------------------
 1347|      0|                        parseContext.ppError(loc, "End of line in macro substitution:", "macro expansion", atomStrings.getString(macroAtom));
 1348|      0|                        delete in;
 1349|      0|                        return MacroExpandError;
 1350|      0|                    }
 1351|    151|                    continue;
 1352|    151|                }
 1353|    197|                if (token == '#') {
  ------------------
  |  Branch (1353:21): [True: 0, False: 197]
  ------------------
 1354|      0|                    parseContext.ppError(ppToken->loc, "unexpected '#'", "macro expansion", atomStrings.getString(macroAtom));
 1355|      0|                    delete in;
 1356|      0|                    return MacroExpandError;
 1357|      0|                }
 1358|    197|                if (in->mac->args.size() == 0 && token != ')')
  ------------------
  |  Branch (1358:21): [True: 0, False: 197]
  |  Branch (1358:50): [True: 0, False: 0]
  ------------------
 1359|      0|                    break;
 1360|    197|                if (nestStack.size() == 0 && (token == ',' || token == ')'))
  ------------------
  |  Branch (1360:21): [True: 173, False: 24]
  |  Branch (1360:47): [True: 0, False: 173]
  |  Branch (1360:63): [True: 1, False: 172]
  ------------------
 1361|      1|                    break;
 1362|    196|                if (token == '(')
  ------------------
  |  Branch (1362:21): [True: 9, False: 187]
  ------------------
 1363|      9|                    nestStack.push_back(')');
 1364|    187|                else if (token == '{' && parseContext.isReadingHLSL())
  ------------------
  |  Branch (1364:26): [True: 0, False: 187]
  |  Branch (1364:42): [True: 0, False: 0]
  ------------------
 1365|      0|                    nestStack.push_back('}');
 1366|    187|                else if (nestStack.size() > 0 && token == nestStack.back())
  ------------------
  |  Branch (1366:26): [True: 21, False: 166]
  |  Branch (1366:50): [True: 6, False: 15]
  ------------------
 1367|      6|                    nestStack.pop_back();
 1368|       |
 1369|       |                //Macro replacement list is expanded in the last stage.
 1370|    196|                if (atomStrings.getAtom(ppToken->name) == PpAtomLineMacro)
  ------------------
  |  Branch (1370:21): [True: 0, False: 196]
  ------------------
 1371|      0|                    ppToken->ival = parseContext.getCurrentLoc().line;
 1372|       |
 1373|    196|                in->args[arg]->putToken(token, ppToken);
 1374|    196|                tokenRecorded = true;
 1375|    196|            }
 1376|       |            // end of single argument scan
 1377|       |
 1378|      1|            if (token == ')') {
  ------------------
  |  Branch (1378:17): [True: 1, False: 0]
  ------------------
 1379|       |                // closing paren of call
 1380|      1|                if (in->mac->args.size() == 1 && !tokenRecorded)
  ------------------
  |  Branch (1380:21): [True: 1, False: 0]
  |  Branch (1380:50): [True: 0, False: 1]
  ------------------
 1381|      0|                    break;
 1382|      1|                arg++;
 1383|      1|                break;
 1384|      1|            }
 1385|      0|            arg++;
 1386|      0|        } while (arg < in->mac->args.size());
  ------------------
  |  Branch (1386:18): [True: 0, False: 0]
  ------------------
 1387|       |        // end of all arguments scan
 1388|       |
 1389|      1|        if (arg < in->mac->args.size())
  ------------------
  |  Branch (1389:13): [True: 0, False: 1]
  ------------------
 1390|      0|            parseContext.ppError(loc, "Too few args in Macro", "macro expansion", atomStrings.getString(macroAtom));
 1391|      1|        else if (token != ')') {
  ------------------
  |  Branch (1391:18): [True: 0, False: 1]
  ------------------
 1392|       |            // Error recover code; find end of call, if possible
 1393|      0|            int depth = 0;
 1394|      0|            while (token != EndOfInput && (depth > 0 || token != ')')) {
  ------------------
  |  Branch (1394:20): [True: 0, False: 0]
  |  Branch (1394:44): [True: 0, False: 0]
  |  Branch (1394:57): [True: 0, False: 0]
  ------------------
 1395|      0|                if (token == ')' || token == '}')
  ------------------
  |  Branch (1395:21): [True: 0, False: 0]
  |  Branch (1395:37): [True: 0, False: 0]
  ------------------
 1396|      0|                    depth--;
 1397|      0|                token = scanToken(ppToken);
 1398|      0|                if (token == '(' || token == '{')
  ------------------
  |  Branch (1398:21): [True: 0, False: 0]
  |  Branch (1398:37): [True: 0, False: 0]
  ------------------
 1399|      0|                    depth++;
 1400|      0|            }
 1401|       |
 1402|      0|            if (token == EndOfInput) {
  ------------------
  |  Branch (1402:17): [True: 0, False: 0]
  ------------------
 1403|      0|                parseContext.ppError(loc, "End of input in macro", "macro expansion", atomStrings.getString(macroAtom));
 1404|      0|                delete in;
 1405|      0|                return MacroExpandError;
 1406|      0|            }
 1407|      0|            parseContext.ppError(loc, "Too many args in macro", "macro expansion", atomStrings.getString(macroAtom));
 1408|      0|        }
 1409|       |
 1410|       |        // We need both expanded and non-expanded forms of the argument, for whether or
 1411|       |        // not token pasting will be applied later when the argument is consumed next to ##.
 1412|      2|        for (size_t i = 0; i < in->mac->args.size(); i++)
  ------------------
  |  Branch (1412:28): [True: 1, False: 1]
  ------------------
 1413|      1|            in->expandedArgs[i] = PrescanMacroArg(*in->args[i], ppToken, newLineOkay);
 1414|      1|    }
 1415|       |
 1416|      8|    pushInput(in);
 1417|      8|    macro->busy = 1;
 1418|      8|    macro->body.reset();
 1419|       |
 1420|      8|    return MacroExpandStarted;
 1421|     11|}
Pp.cpp:_ZN7glslang12_GLOBAL__N_16op_posEi:
  428|    136|    int op_pos(int a) { return a; }
Pp.cpp:_ZN7glslang12_GLOBAL__N_17op_cmplEi:
  430|      4|    int op_cmpl(int a) { return ~a; }
Pp.cpp:_ZN7glslang12_GLOBAL__N_16op_notEi:
  431|      1|    int op_not(int a) { return !a; }
Pp.cpp:_ZN7glslang12_GLOBAL__N_19op_logandEii:
  407|      1|    int op_logand(int a, int b) { return a && b; }
  ------------------
  |  Branch (407:42): [True: 1, False: 0]
  |  Branch (407:47): [True: 1, False: 0]
  ------------------
Pp.cpp:_ZN7glslang12_GLOBAL__N_15op_orEii:
  408|      1|    int op_or(int a, int b) { return a | b; }
Pp.cpp:_ZN7glslang12_GLOBAL__N_16op_andEii:
  410|      2|    int op_and(int a, int b) { return a & b; }
Pp.cpp:_ZN7glslang12_GLOBAL__N_15op_gtEii:
  415|      2|    int op_gt(int a, int b) { return a > b; }
Pp.cpp:_ZN7glslang12_GLOBAL__N_16op_modEii:
  427|      1|    int op_mod(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a % b; }
  ------------------
  |  Branch (427:39): [True: 0, False: 1]
  |  Branch (427:55): [True: 0, False: 0]
  ------------------
Pp.cpp:_ZZN7glslang10TPpContext11MacroExpandEPNS_8TPpTokenEbbEN10DepthGuardC2ERi:
 1254|  67.1M|        explicit DepthGuard(int& d_) : d(d_) { ++d; }
Pp.cpp:_ZZN7glslang10TPpContext11MacroExpandEPNS_8TPpTokenEbbEN10DepthGuardD2Ev:
 1255|  67.1M|        ~DepthGuard() { --d; }

_ZN7glslang14TStringAtomMapC2Ev:
  160|  15.2k|{
  161|  15.2k|    badToken.assign("<bad token>");
  162|       |
  163|       |    // Add single character tokens to the atom table:
  164|  15.2k|    const char* s = "~!%^&*()-+=|,.<>/?;:[]{}#\\";
  165|  15.2k|    char t[2];
  166|       |
  167|  15.2k|    t[1] = '\0';
  168|   410k|    while (*s) {
  ------------------
  |  Branch (168:12): [True: 395k, False: 15.2k]
  ------------------
  169|   395k|        t[0] = *s;
  170|   395k|        addAtomFixed(t, s[0]);
  171|   395k|        s++;
  172|   395k|    }
  173|       |
  174|       |    // Add multiple character scanner tokens :
  175|   654k|    for (size_t ii = 0; ii < sizeof(tokens)/sizeof(tokens[0]); ii++)
  ------------------
  |  Branch (175:25): [True: 639k, False: 15.2k]
  ------------------
  176|   639k|        addAtomFixed(tokens[ii].str, tokens[ii].val);
  177|       |
  178|  15.2k|    nextAtom = PpAtomLast;
  179|  15.2k|}

_ZN7glslang10TPpContextC2ERNS_17TParseContextBaseERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERNS_7TShader8IncluderE:
   88|  15.2k|    preamble(nullptr), strings(nullptr), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false),
   89|  15.2k|    rootFileName(rootFileName),
   90|  15.2k|    currentSourceFile(rootFileName),
   91|  15.2k|    disableEscapeSequences(false),
   92|  15.2k|    inElseSkip(false)
   93|  15.2k|{
   94|  15.2k|    ifdepth = 0;
   95|  1.01M|    for (elsetracker = 0; elsetracker <= maxIfNesting; elsetracker++)
  ------------------
  |  Branch (95:27): [True: 1.00M, False: 15.2k]
  ------------------
   96|  1.00M|        elseSeen[elsetracker] = false;
   97|  15.2k|    elsetracker = 0;
   98|       |
   99|  15.2k|    strtodStream.imbue(std::locale::classic());
  100|  15.2k|}
_ZN7glslang10TPpContextD2Ev:
  103|  15.2k|{
  104|  15.2k|    delete [] preamble;
  105|       |
  106|       |    // free up the inputStack
  107|  15.8k|    while (! inputStack.empty())
  ------------------
  |  Branch (107:12): [True: 624, False: 15.2k]
  ------------------
  108|    624|        popInput();
  109|  15.2k|}
_ZN7glslang10TPpContext8setInputERNS_13TInputScannerEb:
  112|  13.4k|{
  113|  13.4k|    assert(inputStack.size() == 0);
  114|       |
  115|  13.4k|    pushInput(new tStringInput(this, input));
  116|       |
  117|  13.4k|    errorOnVersion = versionWillBeError;
  118|  13.4k|    versionSeen = false;
  119|  13.4k|}

_ZN7glslang8TPpTokenC2Ev:
   93|   246M|    TPpToken() { clear(); }
_ZN7glslang8TPpToken5clearEv:
   95|   380M|    {
   96|   380M|        space = false;
   97|   380M|        i64val = 0;
   98|   380M|        loc.init();
   99|   380M|        name[0] = 0;
  100|   380M|        fullyExpanded = false;
  101|   380M|    }
_ZNK7glslang8TPpTokeneqERKS0_:
  105|      4|    {
  106|      4|        return space == right.space &&
  ------------------
  |  Branch (106:16): [True: 4, False: 0]
  ------------------
  107|      4|               ival == right.ival && dval == right.dval && i64val == right.i64val &&
  ------------------
  |  Branch (107:16): [True: 4, False: 0]
  |  Branch (107:38): [True: 4, False: 0]
  |  Branch (107:60): [True: 4, False: 0]
  ------------------
  108|      4|               strncmp(name, right.name, MaxTokenLength) == 0;
  ------------------
  |  Branch (108:16): [True: 4, False: 0]
  ------------------
  109|      4|    }
_ZNK7glslang8TPpTokenneERKS0_:
  110|      4|    bool operator!=(const TPpToken& right) const { return ! operator==(right); }
_ZNK7glslang14TStringAtomMap7getAtomEPKc:
  141|  67.4M|    {
  142|  67.4M|        auto it = atomMap.find(s);
  143|  67.4M|        return it == atomMap.end() ? 0 : it->second;
  ------------------
  |  Branch (143:16): [True: 67.3M, False: 128k]
  ------------------
  144|  67.4M|    }
_ZN7glslang14TStringAtomMap10getAddAtomEPKc:
  148|   121k|    {
  149|   121k|        int atom = getAtom(s);
  150|   121k|        if (atom == 0) {
  ------------------
  |  Branch (150:13): [True: 121k, False: 4]
  ------------------
  151|   121k|            atom = nextAtom++;
  152|   121k|            addAtomFixed(s, atom);
  153|   121k|        }
  154|   121k|        return atom;
  155|   121k|    }
_ZNK7glslang14TStringAtomMap9getStringEi:
  158|  55.6M|    const char* getString(int atom) const { return stringMap[atom]->c_str(); }
_ZN7glslang14TStringAtomMap12addAtomFixedEPKci:
  176|  1.15M|    {
  177|  1.15M|        auto it = atomMap.insert(std::pair<TString, int>(s, atom)).first;
  178|  1.15M|        if (stringMap.size() < (size_t)atom + 1)
  ------------------
  |  Branch (178:13): [True: 16.7k, False: 1.13M]
  ------------------
  179|  16.7k|            stringMap.resize(atom + 100, &badToken);
  180|  1.15M|        stringMap[atom] = &it->first;
  181|  1.15M|    }
_ZN7glslang10TPpContext6tInputC2EPS0_:
  208|  13.4k|        tInput(TPpContext* p) : done(false), pp(p) { }
_ZN7glslang10TPpContext6tInputD2Ev:
  209|  13.4k|        virtual ~tInput() { }
_ZN7glslang10TPpContext6tInput11peekPastingEv:
  214|   131M|        virtual bool peekPasting() { return false; }             // true when about to see ##
_ZN7glslang10TPpContext6tInput13isStringInputEv:
  218|  2.15k|        virtual bool isStringInput() { return false; }
_ZN7glslang10TPpContext6tInput15notifyActivatedEv:
  221|  13.4k|        virtual void notifyActivated() {}
_ZN7glslang10TPpContext6tInput13notifyDeletedEv:
  223|  13.4k|        virtual void notifyDeleted() {}
_ZN7glslang10TPpContext9pushInputEPNS0_6tInputE:
  232|  13.4k|    {
  233|  13.4k|        inputStack.push_back(in);
  234|  13.4k|        in->notifyActivated();
  235|  13.4k|    }
_ZN7glslang10TPpContext8popInputEv:
  237|  13.4k|    {
  238|  13.4k|        inputStack.back()->notifyDeleted();
  239|  13.4k|        delete inputStack.back();
  240|  13.4k|        inputStack.pop_back();
  241|  13.4k|    }
_ZN7glslang10TPpContext11TokenStream5TokenC2EiRKNS_8TPpTokenE:
  255|   128k|                atom(atom),
  256|   128k|                space(ppToken.space),
  257|   128k|                i64val(ppToken.i64val),
  258|   128k|                name(ppToken.name) { }
_ZN7glslang10TPpContext11TokenStream5Token3getERNS_8TPpTokenE:
  260|  2.16k|            {
  261|  2.16k|                ppToken.clear();
  262|  2.16k|                ppToken.space = space;
  263|  2.16k|                ppToken.i64val = i64val;
  264|  2.16k|                snprintf(ppToken.name, sizeof(ppToken.name), "%s", name.c_str());
  265|  2.16k|                return atom;
  266|  2.16k|            }
_ZNK7glslang10TPpContext11TokenStream5Token6isAtomEi:
  267|  4.30k|            bool isAtom(int a) const { return atom == a; }
_ZN7glslang10TPpContext11TokenStreamC2Ev:
  278|   243k|        TokenStream() : currentPos(0) { }
_ZN7glslang10TPpContext11TokenStream9peekTokenEi:
  281|  4.30k|        bool peekToken(int atom) { return !atEnd() && stream[currentPos].isAtom(atom); }
  ------------------
  |  Branch (281:43): [True: 4.30k, False: 2]
  |  Branch (281:55): [True: 0, False: 4.30k]
  ------------------
_ZN7glslang10TPpContext11TokenStream5atEndEv:
  317|  6.60k|        bool atEnd() { return currentPos >= stream.size(); }
_ZN7glslang10TPpContext11TokenStream5resetEv:
  319|     11|        void reset() { currentPos = 0; }
_ZN7glslang10TPpContext11MacroSymbolC2Ev:
  331|   243k|        MacroSymbol() : functionLike(0), busy(0), undef(0) { }
_ZN7glslang10TPpContext14lookupMacroDefEi:
  342|   121k|    {
  343|   121k|        auto existingMacroIt = macroDefs.find(atom);
  344|   121k|        return (existingMacroIt == macroDefs.end()) ? nullptr : &(existingMacroIt->second);
  ------------------
  |  Branch (344:16): [True: 121k, False: 336]
  ------------------
  345|   121k|    }
_ZN7glslang10TPpContext11addMacroDefEiRNS0_11MacroSymbolE:
  346|   121k|    void addMacroDef(int atom, MacroSymbol& macroDef) { macroDefs[atom] = macroDef; }
_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE:
  369|   134M|    {
  370|   134M|        int token = EndOfInput;
  371|       |
  372|   134M|        while (! inputStack.empty()) {
  ------------------
  |  Branch (372:16): [True: 134M, False: 12.9k]
  ------------------
  373|   134M|            token = inputStack.back()->scan(ppToken);
  374|   134M|            if (token != EndOfInput || inputStack.empty())
  ------------------
  |  Branch (374:17): [True: 134M, False: 12.8k]
  |  Branch (374:40): [True: 0, False: 12.8k]
  ------------------
  375|   134M|                break;
  376|  12.8k|            popInput();
  377|  12.8k|        }
  378|   134M|        if (!inputStack.empty() && inputStack.back()->isStringInput() && !inElseSkip) {
  ------------------
  |  Branch (378:13): [True: 134M, False: 12.9k]
  |  Branch (378:36): [True: 134M, False: 2.15k]
  |  Branch (378:74): [True: 132M, False: 2.28M]
  ------------------
  379|   132M|            if (token == '\n') {
  ------------------
  |  Branch (379:17): [True: 8.86M, False: 123M]
  ------------------
  380|  8.86M|                lastLineTokens.clear();
  381|  8.86M|                lastLineTokenLocs.clear();
  382|   123M|            } else {
  383|   123M|                lastLineTokens.push_back(token);
  384|   123M|                lastLineTokenLocs.push_back(ppToken->loc);
  385|   123M|            }
  386|   132M|        }
  387|   134M|        return token;
  388|   134M|    }
_ZN7glslang10TPpContext7getCharEv:
  389|  18.9k|    int  getChar() { return inputStack.back()->getch(); }
_ZN7glslang10TPpContext9ungetCharEv:
  390|  7.64k|    void ungetChar() { inputStack.back()->ungetch(); }
_ZN7glslang10TPpContext11peekPastingEv:
  391|   131M|    bool peekPasting() { return !inputStack.empty() && inputStack.back()->peekPasting(); }
  ------------------
  |  Branch (391:33): [True: 131M, False: 12.2k]
  |  Branch (391:56): [True: 0, False: 131M]
  ------------------
_ZN7glslang10TPpContext11tMacroInputC2EPS0_:
  407|     11|        tMacroInput(TPpContext* pp) : tInput(pp), prepaste(false), postpaste(false) { }
_ZN7glslang10TPpContext11tMacroInputD2Ev:
  409|     11|        {
  410|     14|            for (size_t i = 0; i < args.size(); ++i)
  ------------------
  |  Branch (410:32): [True: 3, False: 11]
  ------------------
  411|      3|                delete args[i];
  412|     14|            for (size_t i = 0; i < expandedArgs.size(); ++i)
  ------------------
  |  Branch (412:32): [True: 3, False: 11]
  ------------------
  413|      3|                delete expandedArgs[i];
  414|     11|        }
_ZN7glslang10TPpContext11tMacroInput11peekPastingEv:
  419|  2.00k|        bool peekPasting() override { return prepaste; }
_ZN7glslang10TPpContext12tMarkerInputC2EPS0_:
  435|      1|        tMarkerInput(TPpContext* pp) : tInput(pp) { }
_ZN7glslang10TPpContext12tMarkerInput4scanEPNS_8TPpTokenE:
  437|      1|        {
  438|      1|            if (done)
  ------------------
  |  Branch (438:17): [True: 0, False: 1]
  ------------------
  439|      0|                return EndOfInput;
  440|      1|            done = true;
  441|       |
  442|      1|            return marker;
  443|      1|        }
_ZN7glslang10TPpContext10tZeroInputC2EPS0_:
  460|      3|        tZeroInput(TPpContext* pp) : tInput(pp) { }
_ZN7glslang10TPpContext11tTokenInputC2EPS0_PNS0_11TokenStreamEbb:
  509|      1|            tInput(pp),
  510|      1|            tokens(t),
  511|      1|            lastTokenPastes(prepasting),
  512|      1|            preExpanded(expanded) { }
_ZN7glslang10TPpContext11tTokenInput4scanEPNS_8TPpTokenE:
  513|    144|        virtual int scan(TPpToken *ppToken) override {
  514|    144|            int token = tokens->getToken(pp->parseContext, ppToken);
  515|    144|            ppToken->fullyExpanded = preExpanded;
  516|    144|            if (tokens->atEnd() && token == PpAtomIdentifier) {
  ------------------
  |  Branch (516:17): [True: 2, False: 142]
  |  Branch (516:36): [True: 0, False: 2]
  ------------------
  517|      0|                int macroAtom = pp->atomStrings.getAtom(ppToken->name);
  518|      0|                MacroSymbol* macro = macroAtom == 0 ? nullptr : pp->lookupMacroDef(macroAtom);
  ------------------
  |  Branch (518:38): [True: 0, False: 0]
  ------------------
  519|      0|                if (macro && macro->functionLike)
  ------------------
  |  Branch (519:21): [True: 0, False: 0]
  |  Branch (519:30): [True: 0, False: 0]
  ------------------
  520|      0|                    ppToken->fullyExpanded = false;
  521|      0|            }
  522|    144|            return token;
  523|    144|        }
_ZN7glslang10TPpContext11tTokenInput11peekPastingEv:
  526|    143|        virtual bool peekPasting() override { return tokens->peekTokenizedPasting(lastTokenPastes); }
_ZN7glslang10TPpContext16tUngotTokenInputC2EPS0_iPNS_8TPpTokenE:
  536|      1|        tUngotTokenInput(TPpContext* pp, int t, TPpToken* p) : tInput(pp), token(t), lval(*p) { }
_ZN7glslang10TPpContext12tStringInputC2EPS0_RNS_13TInputScannerE:
  550|  13.4k|        tStringInput(TPpContext* pp, TInputScanner& i) : tInput(pp), input(&i) { }
_ZN7glslang10TPpContext12tStringInput13isStringInputEv:
  552|   134M|        bool isStringInput() override { return true; }
_ZN7glslang10TPpContext12tStringInput5getchEv:
  557|   738M|        {
  558|   738M|            int ch = input->get();
  559|       |
  560|   738M|            if (ch == '\\') {
  ------------------
  |  Branch (560:17): [True: 26.5k, False: 738M]
  ------------------
  561|       |                // Move past escaped newlines, as many as sequentially exist
  562|  27.0k|                do {
  563|  27.0k|                    if (input->peek() == '\r' || input->peek() == '\n') {
  ------------------
  |  Branch (563:25): [True: 15.4k, False: 11.6k]
  |  Branch (563:50): [True: 628, False: 11.0k]
  ------------------
  564|  16.0k|                        bool allowed = pp->parseContext.lineContinuationCheck(input->getSourceLoc(), pp->inComment);
  565|  16.0k|                        if (! allowed && pp->inComment)
  ------------------
  |  Branch (565:29): [True: 1.36k, False: 14.6k]
  |  Branch (565:42): [True: 1.33k, False: 30]
  ------------------
  566|  1.33k|                            return '\\';
  567|       |
  568|       |                        // escape one newline now
  569|  14.7k|                        ch = input->get();
  570|  14.7k|                        int nextch = input->get();
  571|  14.7k|                        if (ch == '\r' && nextch == '\n')
  ------------------
  |  Branch (571:29): [True: 14.0k, False: 641]
  |  Branch (571:43): [True: 508, False: 13.5k]
  ------------------
  572|    508|                            ch = input->get();
  573|  14.1k|                        else
  574|  14.1k|                            ch = nextch;
  575|  14.7k|                    } else
  576|  11.0k|                        return '\\';
  577|  27.0k|                } while (ch == '\\');
  ------------------
  |  Branch (577:26): [True: 503, False: 14.2k]
  ------------------
  578|  26.5k|            }
  579|       |
  580|       |            // handle any non-escaped newline
  581|   738M|            if (ch == '\r' || ch == '\n') {
  ------------------
  |  Branch (581:17): [True: 887k, False: 737M]
  |  Branch (581:31): [True: 9.28M, False: 728M]
  ------------------
  582|  10.1M|                if (ch == '\r' && input->peek() == '\n')
  ------------------
  |  Branch (582:21): [True: 887k, False: 9.28M]
  |  Branch (582:35): [True: 4.03k, False: 883k]
  ------------------
  583|  4.03k|                    input->get();
  584|  10.1M|                return '\n';
  585|  10.1M|            }
  586|       |
  587|   728M|            return ch;
  588|   738M|        }
_ZN7glslang10TPpContext12tStringInput7ungetchEv:
  595|  69.1M|        {
  596|  69.1M|            input->unget();
  597|       |
  598|  69.1M|            do {
  599|  69.1M|                int ch = input->peek();
  600|  69.1M|                if (ch == '\r' || ch == '\n') {
  ------------------
  |  Branch (600:21): [True: 396k, False: 68.7M]
  |  Branch (600:35): [True: 217k, False: 68.4M]
  ------------------
  601|   614k|                    if (ch == '\n') {
  ------------------
  |  Branch (601:25): [True: 217k, False: 396k]
  ------------------
  602|       |                        // correct for two-character newline
  603|   217k|                        input->unget();
  604|   217k|                        if (input->peek() != '\r')
  ------------------
  |  Branch (604:29): [True: 217k, False: 347]
  ------------------
  605|   217k|                            input->get();
  606|   217k|                    }
  607|       |                    // now in front of a complete newline, move past an escape character
  608|   614k|                    input->unget();
  609|   614k|                    if (input->peek() == '\\')
  ------------------
  |  Branch (609:25): [True: 0, False: 614k]
  ------------------
  610|      0|                        input->unget();
  611|   614k|                    else {
  612|   614k|                        input->get();
  613|   614k|                        break;
  614|   614k|                    }
  615|   614k|                } else
  616|  68.4M|                    break;
  617|  69.1M|            } while (true);
  ------------------
  |  Branch (617:22): [True: 0, Folded]
  ------------------
  618|  69.1M|        }

_ZN7glslang10TPpContext11lFloatConstEiiPNS_8TPpTokenE:
  113|  6.76k|{
  114|  6.76k|    const auto saveName = [&](int ch) {
  115|  6.76k|        if (len <= MaxTokenLength)
  116|  6.76k|            ppToken->name[len++] = static_cast<char>(ch);
  117|  6.76k|    };
  118|       |
  119|       |    // find the range of non-zero digits before the decimal point
  120|  6.76k|    int startNonZero = 0;
  121|  18.3k|    while (startNonZero < len && ppToken->name[startNonZero] == '0')
  ------------------
  |  Branch (121:12): [True: 13.8k, False: 4.56k]
  |  Branch (121:34): [True: 11.6k, False: 2.20k]
  ------------------
  122|  11.6k|        ++startNonZero;
  123|  6.76k|    int endNonZero = len;
  124|  6.86k|    while (endNonZero > startNonZero && ppToken->name[endNonZero-1] == '0')
  ------------------
  |  Branch (124:12): [True: 2.30k, False: 4.56k]
  |  Branch (124:41): [True: 103, False: 2.20k]
  ------------------
  125|    103|        --endNonZero;
  126|  6.76k|    int numWholeNumberDigits = endNonZero - startNonZero;
  127|       |
  128|       |    // accumulate the range's value
  129|  6.76k|    bool fastPath = numWholeNumberDigits <= 15;  // when the number gets too complex, set to false
  130|  6.76k|    unsigned long long wholeNumber = 0;
  131|  6.76k|    if (fastPath) {
  ------------------
  |  Branch (131:9): [True: 6.38k, False: 382]
  ------------------
  132|  10.2k|        for (int i = startNonZero; i < endNonZero; ++i)
  ------------------
  |  Branch (132:36): [True: 3.84k, False: 6.38k]
  ------------------
  133|  3.84k|            wholeNumber = wholeNumber * 10 + (ppToken->name[i] - '0');
  134|  6.38k|    }
  135|  6.76k|    int decimalShift = len - endNonZero;
  136|       |
  137|       |    // Decimal point:
  138|  6.76k|    bool hasDecimalOrExponent = false;
  139|  6.76k|    if (ch == '.') {
  ------------------
  |  Branch (139:9): [True: 3.19k, False: 3.57k]
  ------------------
  140|  3.19k|        hasDecimalOrExponent = true;
  141|  3.19k|        saveName(ch);
  142|  3.19k|        ch = getChar();
  143|  3.19k|        int firstDecimal = len;
  144|       |
  145|  3.19k|#ifdef ENABLE_HLSL
  146|       |        // 1.#INF or -1.#INF
  147|  3.19k|        if (ch == '#' && (ifdepth > 0 || parseContext.intermediate.getSource() == EShSourceHlsl)) {
  ------------------
  |  Branch (147:13): [True: 2, False: 3.19k]
  |  Branch (147:27): [True: 0, False: 2]
  |  Branch (147:42): [True: 0, False: 2]
  ------------------
  148|      0|            if ((len <  2) ||
  ------------------
  |  Branch (148:17): [True: 0, False: 0]
  ------------------
  149|      0|                (len == 2 && ppToken->name[0] != '1') ||
  ------------------
  |  Branch (149:18): [True: 0, False: 0]
  |  Branch (149:30): [True: 0, False: 0]
  ------------------
  150|      0|                (len == 3 && ppToken->name[1] != '1' && !(ppToken->name[0] == '-' || ppToken->name[0] == '+')) ||
  ------------------
  |  Branch (150:18): [True: 0, False: 0]
  |  Branch (150:30): [True: 0, False: 0]
  |  Branch (150:59): [True: 0, False: 0]
  |  Branch (150:86): [True: 0, False: 0]
  ------------------
  151|      0|                (len >  3))
  ------------------
  |  Branch (151:17): [True: 0, False: 0]
  ------------------
  152|      0|                parseContext.ppError(ppToken->loc, "unexpected use of", "#", "");
  153|      0|            else {
  154|       |                // we have 1.# or -1.# or +1.#, check for 'INF'
  155|      0|                if ((ch = getChar()) != 'I' ||
  ------------------
  |  Branch (155:21): [True: 0, False: 0]
  ------------------
  156|      0|                    (ch = getChar()) != 'N' ||
  ------------------
  |  Branch (156:21): [True: 0, False: 0]
  ------------------
  157|      0|                    (ch = getChar()) != 'F')
  ------------------
  |  Branch (157:21): [True: 0, False: 0]
  ------------------
  158|      0|                    parseContext.ppError(ppToken->loc, "expected 'INF'", "#", "");
  159|      0|                else {
  160|       |                    // we have [+-].#INF, and we are targeting IEEE 754, so wrap it up:
  161|      0|                    saveName('I');
  162|      0|                    saveName('N');
  163|      0|                    saveName('F');
  164|      0|                    ppToken->name[len] = '\0';
  165|      0|                    if (ppToken->name[0] == '-')
  ------------------
  |  Branch (165:25): [True: 0, False: 0]
  ------------------
  166|      0|                        ppToken->i64val = 0xfff0000000000000; // -Infinity
  167|      0|                    else
  168|      0|                        ppToken->i64val = 0x7ff0000000000000; // +Infinity
  169|      0|                    return PpAtomConstFloat;
  170|      0|                }
  171|      0|            }
  172|      0|        }
  173|  3.19k|#endif
  174|       |
  175|       |        // Consume leading-zero digits after the decimal point
  176|  5.53k|        while (ch == '0') {
  ------------------
  |  Branch (176:16): [True: 2.34k, False: 3.19k]
  ------------------
  177|  2.34k|            saveName(ch);
  178|  2.34k|            ch = getChar();
  179|  2.34k|        }
  180|  3.19k|        int startNonZeroDecimal = len;
  181|  3.19k|        int endNonZeroDecimal = len;
  182|       |
  183|       |        // Consume remaining digits, up to the exponent
  184|  4.87k|        while (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (184:16): [True: 4.31k, False: 563]
  |  Branch (184:29): [True: 1.68k, False: 2.63k]
  ------------------
  185|  1.68k|            saveName(ch);
  186|  1.68k|            if (ch != '0')
  ------------------
  |  Branch (186:17): [True: 1.48k, False: 197]
  ------------------
  187|  1.48k|                endNonZeroDecimal = len;
  188|  1.68k|            ch = getChar();
  189|  1.68k|        }
  190|       |
  191|       |        // Compute accumulation up to the last non-zero digit
  192|  3.19k|        if (endNonZeroDecimal > startNonZeroDecimal) {
  ------------------
  |  Branch (192:13): [True: 825, False: 2.36k]
  ------------------
  193|    825|            numWholeNumberDigits += endNonZeroDecimal - endNonZero - 1; // don't include the "."
  194|    825|            if (numWholeNumberDigits > 15)
  ------------------
  |  Branch (194:17): [True: 0, False: 825]
  ------------------
  195|      0|                fastPath = false;
  196|    825|            if (fastPath) {
  ------------------
  |  Branch (196:17): [True: 825, False: 0]
  ------------------
  197|  3.19k|                for (int i = endNonZero; i < endNonZeroDecimal; ++i) {
  ------------------
  |  Branch (197:42): [True: 2.37k, False: 825]
  ------------------
  198|  2.37k|                    if (ppToken->name[i] != '.')
  ------------------
  |  Branch (198:25): [True: 1.54k, False: 825]
  ------------------
  199|  1.54k|                        wholeNumber = wholeNumber * 10 + (ppToken->name[i] - '0');
  200|  2.37k|                }
  201|    825|            }
  202|    825|            decimalShift = firstDecimal - endNonZeroDecimal;
  203|    825|        }
  204|  3.19k|    }
  205|       |
  206|       |    // Exponent:
  207|  6.76k|    bool negativeExponent = false;
  208|  6.76k|    double exponentValue = 0.0;
  209|  6.76k|    int exponent = 0;
  210|  6.76k|    {
  211|  6.76k|        if (ch == 'e' || ch == 'E') {
  ------------------
  |  Branch (211:13): [True: 1.50k, False: 5.25k]
  |  Branch (211:26): [True: 305, False: 4.95k]
  ------------------
  212|  1.81k|            hasDecimalOrExponent = true;
  213|  1.81k|            saveName(ch);
  214|  1.81k|            ch = getChar();
  215|  1.81k|            if (ch == '+' || ch == '-') {
  ------------------
  |  Branch (215:17): [True: 1, False: 1.81k]
  |  Branch (215:30): [True: 25, False: 1.78k]
  ------------------
  216|     26|                negativeExponent = ch == '-';
  217|     26|                saveName(ch);
  218|     26|                ch = getChar();
  219|     26|            }
  220|  1.81k|            if (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (220:17): [True: 1.80k, False: 8]
  |  Branch (220:30): [True: 1.73k, False: 66]
  ------------------
  221|  6.89k|                while (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (221:24): [True: 6.61k, False: 281]
  |  Branch (221:37): [True: 5.15k, False: 1.45k]
  ------------------
  222|  5.15k|                    if (exponent < 500) {
  ------------------
  |  Branch (222:25): [True: 3.53k, False: 1.61k]
  ------------------
  223|  3.53k|                        exponent = exponent * 10 + (ch - '0');
  224|  3.53k|                    }
  225|  5.15k|                    saveName(ch);
  226|  5.15k|                    ch = getChar();
  227|  5.15k|                }
  228|  1.73k|            } else {
  229|     74|                parseContext.ppError(ppToken->loc, "bad character in float exponent", "", "");
  230|     74|            }
  231|  1.81k|        }
  232|       |
  233|       |        // Compensate for location of decimal
  234|  6.76k|        if (negativeExponent)
  ------------------
  |  Branch (234:13): [True: 25, False: 6.74k]
  ------------------
  235|     25|            exponent -= decimalShift;
  236|  6.74k|        else {
  237|  6.74k|            exponent += decimalShift;
  238|  6.74k|            if (exponent < 0) {
  ------------------
  |  Branch (238:17): [True: 825, False: 5.91k]
  ------------------
  239|    825|                negativeExponent = true;
  240|    825|                exponent = -exponent;
  241|    825|            }
  242|  6.74k|        }
  243|  6.76k|        if (exponent > 22)
  ------------------
  |  Branch (243:13): [True: 1.34k, False: 5.41k]
  ------------------
  244|  1.34k|            fastPath = false;
  245|       |
  246|  6.76k|        if (fastPath) {
  ------------------
  |  Branch (246:13): [True: 5.03k, False: 1.72k]
  ------------------
  247|       |            // Compute the floating-point value of the exponent
  248|  5.03k|            exponentValue = 1.0;
  249|  5.03k|            if (exponent > 0) {
  ------------------
  |  Branch (249:17): [True: 1.18k, False: 3.84k]
  ------------------
  250|  1.18k|                double expFactor = 10;
  251|  3.57k|                while (exponent > 0) {
  ------------------
  |  Branch (251:24): [True: 2.38k, False: 1.18k]
  ------------------
  252|  2.38k|                    if (exponent & 0x1)
  ------------------
  |  Branch (252:25): [True: 1.56k, False: 819]
  ------------------
  253|  1.56k|                        exponentValue *= expFactor;
  254|  2.38k|                    expFactor *= expFactor;
  255|  2.38k|                    exponent >>= 1;
  256|  2.38k|                }
  257|  1.18k|            }
  258|  5.03k|        }
  259|  6.76k|    }
  260|       |
  261|       |    // Suffix:
  262|  6.76k|    bool isDouble = false;
  263|  6.76k|    bool isFloat16 = false;
  264|  6.76k|    bool isFE2M1 = false;
  265|  6.76k|    bool isFE3M2 = false;
  266|  6.76k|    bool isFE2M3 = false;
  267|  6.76k|    bool isFUE8M0 = false;
  268|  6.76k|    bool isFMXINT8 = false;
  269|  6.76k|    if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (269:9): [True: 35, False: 6.73k]
  |  Branch (269:22): [True: 1.18k, False: 5.54k]
  ------------------
  270|  1.21k|        if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
  ------------------
  |  Branch (270:13): [True: 1, False: 1.21k]
  |  Branch (270:29): [True: 1, False: 0]
  ------------------
  271|      1|            parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
  272|  1.21k|        if (ifdepth == 0 && !hasDecimalOrExponent)
  ------------------
  |  Branch (272:13): [True: 1, False: 1.21k]
  |  Branch (272:29): [True: 0, False: 1]
  ------------------
  273|      0|            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
  274|  1.21k|        if (parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (274:13): [True: 4, False: 1.21k]
  ------------------
  275|      4|            int ch2 = getChar();
  276|      4|            if (ch2 != 'f' && ch2 != 'F') {
  ------------------
  |  Branch (276:17): [True: 4, False: 0]
  |  Branch (276:31): [True: 4, False: 0]
  ------------------
  277|      4|                ungetChar();
  278|      4|                ungetChar();
  279|      4|            } else {
  280|      0|                saveName(ch);
  281|      0|                saveName(ch2);
  282|      0|                isDouble = true;
  283|      0|            }
  284|  1.21k|        } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (284:20): [True: 1.21k, False: 0]
  ------------------
  285|  1.21k|            saveName(ch);
  286|  1.21k|            isDouble = true;
  287|  1.21k|        }
  288|  5.54k|    } else if (ch == 'h' || ch == 'H') {
  ------------------
  |  Branch (288:16): [True: 534, False: 5.01k]
  |  Branch (288:29): [True: 502, False: 4.51k]
  ------------------
  289|  1.03k|        if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
  ------------------
  |  Branch (289:13): [True: 2, False: 1.03k]
  |  Branch (289:29): [True: 2, False: 0]
  ------------------
  290|      2|            parseContext.float16Check(ppToken->loc, "half floating-point suffix");
  291|  1.03k|        if (ifdepth == 0 && !hasDecimalOrExponent)
  ------------------
  |  Branch (291:13): [True: 2, False: 1.03k]
  |  Branch (291:29): [True: 1, False: 1]
  ------------------
  292|      1|            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
  293|  1.03k|        if (parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (293:13): [True: 34, False: 1.00k]
  ------------------
  294|     34|            int ch2 = getChar();
  295|     34|            if (ch2 != 'f' && ch2 != 'F') {
  ------------------
  |  Branch (295:17): [True: 31, False: 3]
  |  Branch (295:31): [True: 31, False: 0]
  ------------------
  296|     31|                ungetChar();
  297|     31|                ungetChar();
  298|     31|            } else {
  299|      3|                saveName(ch);
  300|      3|                saveName(ch2);
  301|      3|                isFloat16 = true;
  302|      3|            }
  303|  1.00k|        } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (303:20): [True: 1.00k, False: 0]
  ------------------
  304|  1.00k|            saveName(ch);
  305|  1.00k|            isFloat16 = true;
  306|  1.00k|        }
  307|  1.03k|    } else
  308|  4.51k|    if (ch == 'f' || ch == 'F') {
  ------------------
  |  Branch (308:9): [True: 888, False: 3.62k]
  |  Branch (308:22): [True: 488, False: 3.13k]
  ------------------
  309|  1.37k|        if (ifdepth == 0)
  ------------------
  |  Branch (309:13): [True: 5, False: 1.37k]
  ------------------
  310|      5|            parseContext.profileRequires(ppToken->loc,  EEsProfile, 300, nullptr, "floating-point suffix");
  311|  1.37k|        if (ifdepth == 0 && !parseContext.relaxedErrors())
  ------------------
  |  Branch (311:13): [True: 5, False: 1.37k]
  |  Branch (311:29): [True: 0, False: 5]
  ------------------
  312|      0|            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix");
  313|  1.37k|        if (ifdepth == 0 && !hasDecimalOrExponent)
  ------------------
  |  Branch (313:13): [True: 5, False: 1.37k]
  |  Branch (313:29): [True: 3, False: 2]
  ------------------
  314|      3|            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
  315|  1.37k|        saveName(ch);
  316|       |
  317|  1.37k|        auto const &try_str = [&](const char *str, size_t numChar) {
  318|  1.37k|            size_t counter = 0;
  319|  1.37k|            for (size_t i = 0; i < numChar; ++i) {
  320|  1.37k|                if (getChar() != str[i]) {
  321|  1.37k|                    break;
  322|  1.37k|                }
  323|  1.37k|                counter++;
  324|  1.37k|            }
  325|  1.37k|            if (counter == numChar) {
  326|  1.37k|                for (size_t i = 0; i < numChar; ++i) {
  327|  1.37k|                    saveName(str[i]);
  328|  1.37k|                }
  329|  1.37k|                return true;
  330|  1.37k|            } else {
  331|       |                // called getChar one more than counter times
  332|  1.37k|                counter++;
  333|  1.37k|                while (counter) {
  334|  1.37k|                    ungetChar();
  335|  1.37k|                    counter--;
  336|  1.37k|                }
  337|  1.37k|                return false;
  338|  1.37k|            }
  339|  1.37k|        };
  340|       |
  341|  1.37k|        if (ch == 'f') {
  ------------------
  |  Branch (341:13): [True: 888, False: 488]
  ------------------
  342|    888|            if (try_str("e2m1", 4)) {
  ------------------
  |  Branch (342:17): [True: 0, False: 888]
  ------------------
  343|      0|                isFE2M1 = true;
  344|    888|            } else if (try_str("e3m2", 4)) {
  ------------------
  |  Branch (344:24): [True: 0, False: 888]
  ------------------
  345|      0|                isFE3M2 = true;
  346|    888|            } else if (try_str("e2m3", 4)) {
  ------------------
  |  Branch (346:24): [True: 0, False: 888]
  ------------------
  347|      0|                isFE2M3 = true;
  348|    888|            } else if (try_str("ue8m0", 5)) {
  ------------------
  |  Branch (348:24): [True: 0, False: 888]
  ------------------
  349|      0|                isFUE8M0 = true;
  350|    888|            } else if (try_str("mxint8", 6)) {
  ------------------
  |  Branch (350:24): [True: 0, False: 888]
  ------------------
  351|      0|                isFMXINT8 = true;
  352|      0|            }
  353|    888|        }
  354|  1.37k|    } else
  355|  3.13k|        ungetChar();
  356|       |
  357|       |    // Patch up the name and length for overflow
  358|       |
  359|  6.76k|    if (len > MaxTokenLength) {
  ------------------
  |  Branch (359:9): [True: 0, False: 6.76k]
  ------------------
  360|      0|        len = MaxTokenLength;
  361|      0|        parseContext.ppError(ppToken->loc, "float literal too long", "", "");
  362|      0|    }
  363|  6.76k|    ppToken->name[len] = '\0';
  364|       |
  365|       |    // Compute the numerical value
  366|  6.76k|    if (fastPath) {
  ------------------
  |  Branch (366:9): [True: 5.03k, False: 1.72k]
  ------------------
  367|       |        // compute the floating-point value of the exponent
  368|  5.03k|        if (exponentValue == 0.0)
  ------------------
  |  Branch (368:13): [True: 0, False: 5.03k]
  ------------------
  369|      0|            ppToken->dval = (double)wholeNumber;
  370|  5.03k|        else if (negativeExponent)
  ------------------
  |  Branch (370:18): [True: 838, False: 4.19k]
  ------------------
  371|    838|            ppToken->dval = (double)wholeNumber / exponentValue;
  372|  4.19k|        else
  373|  4.19k|            ppToken->dval = (double)wholeNumber * exponentValue;
  374|  5.03k|    } else {
  375|       |        // slow path
  376|  1.72k|        ppToken->dval = 0.0;
  377|       |
  378|       |        // remove suffix
  379|  1.72k|        TString numstr(ppToken->name);
  380|  1.72k|        if (numstr.back() == 'f' || numstr.back() == 'F')
  ------------------
  |  Branch (380:13): [True: 348, False: 1.38k]
  |  Branch (380:37): [True: 206, False: 1.17k]
  ------------------
  381|    554|            numstr.pop_back();
  382|  1.72k|        if (numstr.back() == 'h' || numstr.back() == 'H')
  ------------------
  |  Branch (382:13): [True: 5, False: 1.72k]
  |  Branch (382:37): [True: 0, False: 1.72k]
  ------------------
  383|      5|            numstr.pop_back();
  384|  1.72k|        if (numstr.back() == 'l' || numstr.back() == 'L')
  ------------------
  |  Branch (384:13): [True: 1, False: 1.72k]
  |  Branch (384:37): [True: 3, False: 1.72k]
  ------------------
  385|      4|            numstr.pop_back();
  386|       |
  387|       |        // use platform library
  388|  1.72k|        strtodStream.clear();
  389|  1.72k|        strtodStream.str(numstr.c_str());
  390|  1.72k|        strtodStream >> ppToken->dval;
  391|  1.72k|        if (strtodStream.fail()) {
  ------------------
  |  Branch (391:13): [True: 249, False: 1.48k]
  ------------------
  392|       |            // Assume failure combined with a large exponent was overflow, in
  393|       |            // an attempt to set INF.
  394|    249|            if (!negativeExponent && exponent + numWholeNumberDigits > 300)
  ------------------
  |  Branch (394:17): [True: 247, False: 2]
  |  Branch (394:38): [True: 219, False: 28]
  ------------------
  395|    219|                ppToken->i64val = 0x7ff0000000000000; // +Infinity
  396|       |            // Assume failure combined with a small exponent was overflow.
  397|    249|            if (negativeExponent && exponent + numWholeNumberDigits > 300)
  ------------------
  |  Branch (397:17): [True: 2, False: 247]
  |  Branch (397:37): [True: 2, False: 0]
  ------------------
  398|      2|                ppToken->dval = 0.0;
  399|       |            // Unknown reason for failure. Theory is that either
  400|       |            //  - the 0.0 is still there, or
  401|       |            //  - something reasonable was written that is better than 0.0
  402|    249|        }
  403|  1.72k|    }
  404|       |
  405|       |    // Return the right token type
  406|  6.76k|    if (isDouble)
  ------------------
  |  Branch (406:9): [True: 1.21k, False: 5.55k]
  ------------------
  407|  1.21k|        return PpAtomConstDouble;
  408|  5.55k|    else if (isFloat16)
  ------------------
  |  Branch (408:14): [True: 1.00k, False: 4.54k]
  ------------------
  409|  1.00k|        return PpAtomConstFloat16;
  410|  4.54k|    else if (isFE2M1)
  ------------------
  |  Branch (410:14): [True: 0, False: 4.54k]
  ------------------
  411|      0|        return PpAtomConstFloatE2M1;
  412|  4.54k|    else if (isFE3M2)
  ------------------
  |  Branch (412:14): [True: 0, False: 4.54k]
  ------------------
  413|      0|        return PpAtomConstFloatE3M2;
  414|  4.54k|    else if (isFE2M3)
  ------------------
  |  Branch (414:14): [True: 0, False: 4.54k]
  ------------------
  415|      0|        return PpAtomConstFloatE2M3;
  416|  4.54k|    else if (isFUE8M0)
  ------------------
  |  Branch (416:14): [True: 0, False: 4.54k]
  ------------------
  417|      0|        return PpAtomConstFloatUE8M0;
  418|  4.54k|    else if (isFMXINT8)
  ------------------
  |  Branch (418:14): [True: 0, False: 4.54k]
  ------------------
  419|      0|        return PpAtomConstFloatMXINT8;
  420|  4.54k|    else
  421|  4.54k|        return PpAtomConstFloat;
  422|  6.76k|}
_ZN7glslang10TPpContext16characterLiteralEPNS_8TPpTokenE:
  431|     12|{
  432|     12|    ppToken->name[0] = 0;
  433|     12|    ppToken->ival = 0;
  434|       |
  435|     12|    if (parseContext.intermediate.getSource() != EShSourceHlsl) {
  ------------------
  |  Branch (435:9): [True: 6, False: 6]
  ------------------
  436|       |        // illegal, except in macro definition, for which case we report the character
  437|      6|        return '\'';
  438|      6|    }
  439|       |
  440|      6|    int ch = getChar();
  441|      6|    switch (ch) {
  442|      0|    case '\'':
  ------------------
  |  Branch (442:5): [True: 0, False: 6]
  ------------------
  443|       |        // As empty sequence:  ''
  444|      0|        parseContext.ppError(ppToken->loc, "unexpected", "\'", "");
  445|      0|        return PpAtomConstInt;
  446|      0|    case '\\':
  ------------------
  |  Branch (446:5): [True: 0, False: 6]
  ------------------
  447|       |        // As escape sequence:  '\XXX'
  448|      0|        switch (ch = getChar()) {
  449|      0|        case 'a':
  ------------------
  |  Branch (449:9): [True: 0, False: 0]
  ------------------
  450|      0|            ppToken->ival = 7;
  451|      0|            break;
  452|      0|        case 'b':
  ------------------
  |  Branch (452:9): [True: 0, False: 0]
  ------------------
  453|      0|            ppToken->ival = 8;
  454|      0|            break;
  455|      0|        case 't':
  ------------------
  |  Branch (455:9): [True: 0, False: 0]
  ------------------
  456|      0|            ppToken->ival = 9;
  457|      0|            break;
  458|      0|        case 'n':
  ------------------
  |  Branch (458:9): [True: 0, False: 0]
  ------------------
  459|      0|            ppToken->ival = 10;
  460|      0|            break;
  461|      0|        case 'v':
  ------------------
  |  Branch (461:9): [True: 0, False: 0]
  ------------------
  462|      0|            ppToken->ival = 11;
  463|      0|            break;
  464|      0|        case 'f':
  ------------------
  |  Branch (464:9): [True: 0, False: 0]
  ------------------
  465|      0|            ppToken->ival = 12;
  466|      0|            break;
  467|      0|        case 'r':
  ------------------
  |  Branch (467:9): [True: 0, False: 0]
  ------------------
  468|      0|            ppToken->ival = 13;
  469|      0|            break;
  470|      0|        case 'x':
  ------------------
  |  Branch (470:9): [True: 0, False: 0]
  ------------------
  471|      0|        case '0':
  ------------------
  |  Branch (471:9): [True: 0, False: 0]
  ------------------
  472|      0|            parseContext.ppError(ppToken->loc, "octal and hex sequences not supported", "\\", "");
  473|      0|            break;
  474|      0|        default:
  ------------------
  |  Branch (474:9): [True: 0, False: 0]
  ------------------
  475|       |            // This catches '\'', '\"', '\?', etc.
  476|       |            // Also, things like '\C' mean the same thing as 'C'
  477|       |            // (after the above cases are filtered out).
  478|      0|            ppToken->ival = ch;
  479|      0|            break;
  480|      0|        }
  481|      0|        break;
  482|      6|    default:
  ------------------
  |  Branch (482:5): [True: 6, False: 0]
  ------------------
  483|      6|        ppToken->ival = ch;
  484|      6|        break;
  485|      6|    }
  486|      6|    ppToken->name[0] = (char)ppToken->ival;
  487|      6|    ppToken->name[1] = '\0';
  488|      6|    ch = getChar();
  489|      6|    if (ch != '\'') {
  ------------------
  |  Branch (489:9): [True: 6, False: 0]
  ------------------
  490|      6|        parseContext.ppError(ppToken->loc, "expected", "\'", "");
  491|       |        // Look ahead for a closing '
  492|    254|        do {
  493|    254|            ch = getChar();
  494|    254|        } while (ch != '\'' && ch != EndOfInput && ch != '\n');
  ------------------
  |  Branch (494:18): [True: 254, False: 0]
  |  Branch (494:32): [True: 250, False: 4]
  |  Branch (494:52): [True: 248, False: 2]
  ------------------
  495|      6|    }
  496|       |
  497|      6|    return PpAtomConstInt;
  498|      6|}
_ZN7glslang10TPpContext12tStringInput4scanEPNS_8TPpTokenE:
  512|   134M|{
  513|   134M|    int AlreadyComplained = 0;
  514|   134M|    int len = 0;
  515|   134M|    int ch = 0;
  516|   134M|    int ii = 0;
  517|   134M|    unsigned long long ival = 0;
  518|   134M|    const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
  519|   134M|                                                                     ch == 'f' || ch == 'F' ||
  520|   134M|                                                                     ch == 'h' || ch == 'H'; };
  521|       |
  522|   134M|    static const char* const Int64_Extensions[] = {
  523|   134M|        E_GL_ARB_gpu_shader_int64,
  524|   134M|        E_GL_EXT_shader_explicit_arithmetic_types,
  525|   134M|        E_GL_NV_gpu_shader5,
  526|   134M|        E_GL_EXT_shader_explicit_arithmetic_types_int64 };
  527|   134M|    static const int Num_Int64_Extensions = sizeof(Int64_Extensions) / sizeof(Int64_Extensions[0]);
  528|       |
  529|   134M|    static const char* const Int16_Extensions[] = {
  530|   134M|        E_GL_AMD_gpu_shader_int16,
  531|   134M|        E_GL_EXT_shader_explicit_arithmetic_types,
  532|   134M|        E_GL_EXT_shader_explicit_arithmetic_types_int16 };
  533|   134M|    static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]);
  534|       |
  535|   134M|    ppToken->clear();
  536|   134M|    ch = getch();
  537|   134M|    for (;;) {
  538|   192M|        while (ch == ' ' || ch == '\t') {
  ------------------
  |  Branch (538:16): [True: 57.7M, False: 134M]
  |  Branch (538:29): [True: 10.1k, False: 134M]
  ------------------
  539|  57.7M|            ppToken->space = true;
  540|  57.7M|            ch = getch();
  541|  57.7M|        }
  542|       |
  543|   134M|        ppToken->loc = pp->parseContext.getCurrentLoc();
  544|   134M|        len = 0;
  545|   134M|        switch (ch) {
  546|  65.5M|        default:
  ------------------
  |  Branch (546:9): [True: 65.5M, False: 69.1M]
  ------------------
  547|       |            // Single character token, including EndOfInput, '#' and '\' (escaped newlines are handled at a lower level, so this is just a '\' token)
  548|  65.5M|            if (ch > PpAtomMaxSingle)
  ------------------
  |  Branch (548:17): [True: 834k, False: 64.7M]
  ------------------
  549|   834k|                ch = PpAtomBadToken;
  550|  65.5M|            return ch;
  551|       |
  552|  60.8k|        case 'A': case 'B': case 'C': case 'D': case 'E':
  ------------------
  |  Branch (552:9): [True: 4.61k, False: 134M]
  |  Branch (552:19): [True: 2.95k, False: 134M]
  |  Branch (552:29): [True: 10.0k, False: 134M]
  |  Branch (552:39): [True: 31.1k, False: 134M]
  |  Branch (552:49): [True: 12.0k, False: 134M]
  ------------------
  553|   270k|        case 'F': case 'G': case 'H': case 'I': case 'J':
  ------------------
  |  Branch (553:9): [True: 1.50k, False: 134M]
  |  Branch (553:19): [True: 124k, False: 134M]
  |  Branch (553:29): [True: 2.72k, False: 134M]
  |  Branch (553:39): [True: 79.7k, False: 134M]
  |  Branch (553:49): [True: 497, False: 134M]
  ------------------
  554|   510k|        case 'K': case 'L': case 'M': case 'N': case 'O':
  ------------------
  |  Branch (554:9): [True: 118k, False: 134M]
  |  Branch (554:19): [True: 743, False: 134M]
  |  Branch (554:29): [True: 119k, False: 134M]
  |  Branch (554:39): [True: 240, False: 134M]
  |  Branch (554:49): [True: 425, False: 134M]
  ------------------
  555|   675k|        case 'P': case 'Q': case 'R': case 'S': case 'T':
  ------------------
  |  Branch (555:9): [True: 2.69k, False: 134M]
  |  Branch (555:19): [True: 7.69k, False: 134M]
  |  Branch (555:29): [True: 6.72k, False: 134M]
  |  Branch (555:39): [True: 58.4k, False: 134M]
  |  Branch (555:49): [True: 89.3k, False: 134M]
  ------------------
  556|   705k|        case 'U': case 'V': case 'W': case 'X': case 'Y':
  ------------------
  |  Branch (556:9): [True: 4.08k, False: 134M]
  |  Branch (556:19): [True: 255, False: 134M]
  |  Branch (556:29): [True: 24.7k, False: 134M]
  |  Branch (556:39): [True: 531, False: 134M]
  |  Branch (556:49): [True: 323, False: 134M]
  ------------------
  557|   816k|        case 'Z': case '_':
  ------------------
  |  Branch (557:9): [True: 82, False: 134M]
  |  Branch (557:19): [True: 110k, False: 134M]
  ------------------
  558|  9.23M|        case 'a': case 'b': case 'c': case 'd': case 'e':
  ------------------
  |  Branch (558:9): [True: 702k, False: 133M]
  |  Branch (558:19): [True: 3.36M, False: 131M]
  |  Branch (558:29): [True: 2.88M, False: 131M]
  |  Branch (558:39): [True: 1.20M, False: 133M]
  |  Branch (558:49): [True: 258k, False: 134M]
  ------------------
  559|  36.2M|        case 'f': case 'g': case 'h': case 'i': case 'j':
  ------------------
  |  Branch (559:9): [True: 7.78M, False: 126M]
  |  Branch (559:19): [True: 574k, False: 134M]
  |  Branch (559:29): [True: 2.22M, False: 132M]
  |  Branch (559:39): [True: 16.4M, False: 118M]
  |  Branch (559:49): [True: 234, False: 134M]
  ------------------
  560|  40.9M|        case 'k': case 'l': case 'm': case 'n': case 'o':
  ------------------
  |  Branch (560:9): [True: 579, False: 134M]
  |  Branch (560:19): [True: 243k, False: 134M]
  |  Branch (560:29): [True: 1.75M, False: 132M]
  |  Branch (560:39): [True: 1.58M, False: 133M]
  |  Branch (560:49): [True: 1.08M, False: 133M]
  ------------------
  561|  48.7M|        case 'p': case 'q': case 'r': case 's': case 't':
  ------------------
  |  Branch (561:9): [True: 134k, False: 134M]
  |  Branch (561:19): [True: 593, False: 134M]
  |  Branch (561:29): [True: 459k, False: 134M]
  |  Branch (561:39): [True: 5.30M, False: 129M]
  |  Branch (561:49): [True: 1.96M, False: 132M]
  ------------------
  562|  67.6M|        case 'u': case 'v': case 'w': case 'x': case 'y':
  ------------------
  |  Branch (562:9): [True: 11.4M, False: 123M]
  |  Branch (562:19): [True: 7.04M, False: 127M]
  |  Branch (562:29): [True: 180k, False: 134M]
  |  Branch (562:39): [True: 127k, False: 134M]
  |  Branch (562:49): [True: 85.7k, False: 134M]
  ------------------
  563|  67.6M|        case 'z':
  ------------------
  |  Branch (563:9): [True: 86, False: 134M]
  ------------------
  564|   542M|            do {
  565|   542M|                if (len < MaxTokenLength) {
  ------------------
  |  Branch (565:21): [True: 542M, False: 0]
  ------------------
  566|   542M|                    ppToken->name[len++] = (char)ch;
  567|   542M|                    ch = getch();
  568|   542M|                } else {
  569|      0|                    if (! AlreadyComplained) {
  ------------------
  |  Branch (569:25): [True: 0, False: 0]
  ------------------
  570|      0|                        pp->parseContext.ppError(ppToken->loc, "name too long", "", "");
  571|      0|                        AlreadyComplained = 1;
  572|      0|                    }
  573|      0|                    ch = getch();
  574|      0|                }
  575|   542M|            } while ((ch >= 'a' && ch <= 'z') ||
  ------------------
  |  Branch (575:23): [True: 378M, False: 163M]
  |  Branch (575:36): [True: 378M, False: 29.9k]
  ------------------
  576|   163M|                     (ch >= 'A' && ch <= 'Z') ||
  ------------------
  |  Branch (576:23): [True: 45.0M, False: 118M]
  |  Branch (576:36): [True: 38.6M, False: 6.33M]
  ------------------
  577|   124M|                     (ch >= '0' && ch <= '9') ||
  ------------------
  |  Branch (577:23): [True: 58.4M, False: 66.4M]
  |  Branch (577:36): [True: 51.6M, False: 6.84M]
  ------------------
  578|  73.2M|                     ch == '_');
  ------------------
  |  Branch (578:22): [True: 5.64M, False: 67.6M]
  ------------------
  579|       |
  580|       |            // line continuation with no token before or after makes len == 0, and need to start over skipping white space, etc.
  581|  67.6M|            if (len == 0)
  ------------------
  |  Branch (581:17): [True: 0, False: 67.6M]
  ------------------
  582|      0|                continue;
  583|       |
  584|  67.6M|            ppToken->name[len] = '\0';
  585|  67.6M|            ungetch();
  586|  67.6M|            return PpAtomIdentifier;
  587|  77.6k|        case '0':
  ------------------
  |  Branch (587:9): [True: 77.6k, False: 134M]
  ------------------
  588|  77.6k|            ppToken->name[len++] = (char)ch;
  589|  77.6k|            ch = getch();
  590|  77.6k|            if (ch == 'x' || ch == 'X') {
  ------------------
  |  Branch (590:17): [True: 26.2k, False: 51.3k]
  |  Branch (590:30): [True: 108, False: 51.2k]
  ------------------
  591|       |                // must be hexadecimal
  592|       |
  593|  26.3k|                bool isUnsigned = false;
  594|  26.3k|                bool isInt64 = false;
  595|  26.3k|                bool isInt16 = false;
  596|  26.3k|                ppToken->name[len++] = (char)ch;
  597|  26.3k|                ch = getch();
  598|  26.3k|                if ((ch >= '0' && ch <= '9') ||
  ------------------
  |  Branch (598:22): [True: 26.3k, False: 0]
  |  Branch (598:35): [True: 25.2k, False: 1.09k]
  ------------------
  599|  1.09k|                    (ch >= 'A' && ch <= 'F') ||
  ------------------
  |  Branch (599:22): [True: 1.09k, False: 0]
  |  Branch (599:35): [True: 1.09k, False: 2]
  ------------------
  600|  26.3k|                    (ch >= 'a' && ch <= 'f')) {
  ------------------
  |  Branch (600:22): [True: 2, False: 0]
  |  Branch (600:35): [True: 2, False: 0]
  ------------------
  601|       |
  602|  26.3k|                    ival = 0;
  603|  51.6k|                    do {
  604|  51.6k|                        if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
  ------------------
  |  Branch (604:29): [True: 51.6k, False: 0]
  |  Branch (604:53): [True: 51.6k, False: 1]
  ------------------
  605|  51.6k|                            ppToken->name[len++] = (char)ch;
  606|  51.6k|                            if (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (606:33): [True: 51.6k, False: 0]
  |  Branch (606:46): [True: 50.4k, False: 1.23k]
  ------------------
  607|  50.4k|                                ii = ch - '0';
  608|  50.4k|                            } else if (ch >= 'A' && ch <= 'F') {
  ------------------
  |  Branch (608:40): [True: 1.23k, False: 0]
  |  Branch (608:53): [True: 1.20k, False: 34]
  ------------------
  609|  1.20k|                                ii = ch - 'A' + 10;
  610|  1.20k|                            } else if (ch >= 'a' && ch <= 'f') {
  ------------------
  |  Branch (610:40): [True: 34, False: 0]
  |  Branch (610:53): [True: 34, False: 0]
  ------------------
  611|     34|                                ii = ch - 'a' + 10;
  612|     34|                            } else
  613|      0|                                pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", "");
  614|  51.6k|                            ival = (ival << 4) | ii;
  615|  51.6k|                        } else {
  616|      1|                            if (! AlreadyComplained) {
  ------------------
  |  Branch (616:33): [True: 1, False: 0]
  ------------------
  617|      1|                                if(len < MaxTokenLength)
  ------------------
  |  Branch (617:36): [True: 1, False: 0]
  ------------------
  618|      1|                                    pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
  619|      0|                                else
  620|      0|                                    pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too long", "", "");
  621|      1|                                AlreadyComplained = 1;
  622|      1|                            }
  623|      1|                            ival = 0xffffffffffffffffull;
  624|      1|                        }
  625|  51.6k|                        ch = getch();
  626|  51.6k|                    } while ((ch >= '0' && ch <= '9') ||
  ------------------
  |  Branch (626:31): [True: 51.6k, False: 37]
  |  Branch (626:44): [True: 25.1k, False: 26.4k]
  ------------------
  627|  26.5k|                             (ch >= 'A' && ch <= 'F') ||
  ------------------
  |  Branch (627:31): [True: 3.02k, False: 23.4k]
  |  Branch (627:44): [True: 105, False: 2.92k]
  ------------------
  628|  26.4k|                             (ch >= 'a' && ch <= 'f'));
  ------------------
  |  Branch (628:31): [True: 105, False: 26.3k]
  |  Branch (628:44): [True: 32, False: 73]
  ------------------
  629|  26.3k|                } else {
  630|      0|                    pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", "");
  631|      0|                }
  632|  26.3k|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (632:21): [True: 0, False: 26.3k]
  |  Branch (632:34): [True: 1.80k, False: 24.5k]
  ------------------
  633|  1.80k|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (633:25): [True: 1.80k, False: 0]
  ------------------
  634|  1.80k|                        ppToken->name[len++] = (char)ch;
  635|  1.80k|                    isUnsigned = true;
  636|       |
  637|  1.80k|                    int nextCh = getch();
  638|  1.80k|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (638:25): [True: 0, False: 1.80k]
  |  Branch (638:42): [True: 0, False: 1.80k]
  ------------------
  639|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (639:29): [True: 0, False: 0]
  ------------------
  640|      0|                            ppToken->name[len++] = (char)nextCh;
  641|      0|                        isInt64 = true;
  642|      0|                    } else
  643|  1.80k|                        ungetch();
  644|       |
  645|  1.80k|                    nextCh = getch();
  646|  1.80k|                    if ((nextCh == 's' || nextCh == 'S') &&
  ------------------
  |  Branch (646:26): [True: 0, False: 1.80k]
  |  Branch (646:43): [True: 0, False: 1.80k]
  ------------------
  647|      0|                            pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (647:29): [True: 0, False: 0]
  ------------------
  648|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (648:29): [True: 0, False: 0]
  ------------------
  649|      0|                            ppToken->name[len++] = (char)nextCh;
  650|      0|                        isInt16 = true;
  651|      0|                    } else
  652|  1.80k|                        ungetch();
  653|  24.5k|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (653:28): [True: 2, False: 24.5k]
  |  Branch (653:41): [True: 3, False: 24.5k]
  ------------------
  654|      5|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (654:25): [True: 5, False: 0]
  ------------------
  655|      5|                        ppToken->name[len++] = (char)ch;
  656|      5|                    isInt64 = true;
  657|  24.5k|                } else if ((ch == 's' || ch == 'S') &&
  ------------------
  |  Branch (657:29): [True: 0, False: 24.5k]
  |  Branch (657:42): [True: 699, False: 23.8k]
  ------------------
  658|    699|                           pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (658:28): [True: 92, False: 607]
  ------------------
  659|     92|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (659:25): [True: 92, False: 0]
  ------------------
  660|     92|                        ppToken->name[len++] = (char)ch;
  661|     92|                    isInt16 = true;
  662|     92|                } else
  663|  24.4k|                    ungetch();
  664|  26.3k|                ppToken->name[len] = '\0';
  665|       |
  666|  26.3k|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (666:21): [True: 5, False: 26.3k]
  |  Branch (666:32): [True: 0, False: 5]
  ------------------
  667|      0|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (667:25): [True: 0, False: 0]
  ------------------
  668|      0|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  669|      0|                                                        "64-bit hexadecimal literal");
  670|      0|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  671|      0|                            Num_Int64_Extensions, Int64_Extensions, "64-bit hexadecimal literal");
  672|      0|                    }
  673|      0|                    ppToken->i64val = ival;
  674|      0|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (674:28): [True: 0, False: 0]
  ------------------
  675|  26.3k|                } else if (isInt16) {
  ------------------
  |  Branch (675:28): [True: 92, False: 26.2k]
  ------------------
  676|     92|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (676:25): [True: 0, False: 92]
  ------------------
  677|      0|                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (677:29): [True: 0, False: 0]
  ------------------
  678|      0|                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  679|      0|                                                             "16-bit hexadecimal literal");
  680|      0|                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  681|      0|                                Num_Int16_Extensions, Int16_Extensions, "16-bit hexadecimal literal");
  682|      0|                        }
  683|      0|                    }
  684|     92|                    ppToken->ival = (int)ival;
  685|     92|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (685:28): [True: 0, False: 92]
  ------------------
  686|  26.2k|                } else {
  687|  26.2k|                    if (ival > 0xffffffffu && !AlreadyComplained)
  ------------------
  |  Branch (687:25): [True: 1, False: 26.2k]
  |  Branch (687:47): [True: 0, False: 1]
  ------------------
  688|      0|                        pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
  689|  26.2k|                    ppToken->ival = (int)ival;
  690|  26.2k|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (690:28): [True: 1.80k, False: 24.4k]
  ------------------
  691|  26.2k|                }
  692|  51.2k|            } else if ((ch == 'b' || ch == 'B') && pp->parseContext.intermediate.getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (692:25): [True: 0, False: 51.2k]
  |  Branch (692:38): [True: 0, False: 51.2k]
  |  Branch (692:52): [True: 0, False: 0]
  ------------------
  693|       |                // must be binary
  694|      0|                bool isUnsigned = false;
  695|      0|                bool isInt64 = false;
  696|      0|                bool isInt16 = false;
  697|      0|                ppToken->name[len++] = (char)ch;
  698|      0|                ch = getch();
  699|       |
  700|       |                // Check value
  701|      0|                if ((ch == '0' || ch == '1'))
  ------------------
  |  Branch (701:22): [True: 0, False: 0]
  |  Branch (701:35): [True: 0, False: 0]
  ------------------
  702|      0|                {
  703|      0|                    ival = 0;
  704|      0|                    do {
  705|      0|                        if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
  ------------------
  |  Branch (705:29): [True: 0, False: 0]
  |  Branch (705:53): [True: 0, False: 0]
  ------------------
  706|      0|                            ppToken->name[len++] = (char)ch;
  707|      0|                            if (ch == '0' || ch == '1') {
  ------------------
  |  Branch (707:33): [True: 0, False: 0]
  |  Branch (707:46): [True: 0, False: 0]
  ------------------
  708|      0|                                ii = ch - '0';
  709|      0|                            } else {
  710|      0|                                pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
  711|      0|                            }
  712|      0|                            ival = (ival << 1) | ii;
  713|      0|                        }
  714|      0|                        else
  715|      0|                        {
  716|      0|                            if (! AlreadyComplained) {
  ------------------
  |  Branch (716:33): [True: 0, False: 0]
  ------------------
  717|      0|                                if(len < MaxTokenLength)
  ------------------
  |  Branch (717:36): [True: 0, False: 0]
  ------------------
  718|      0|                                    pp->parseContext.ppError(ppToken->loc, "binary literal too big", "", "");
  719|      0|                                else
  720|      0|                                    pp->parseContext.ppError(ppToken->loc, "binary literal too long", "", "");
  721|      0|                                AlreadyComplained = 1;
  722|      0|                            }
  723|      0|                            ival = 0xffffffffffffffffull;
  724|      0|                        }
  725|      0|                        ch = getch();
  726|      0|                    } while (ch == '0' || ch == '1');
  ------------------
  |  Branch (726:30): [True: 0, False: 0]
  |  Branch (726:43): [True: 0, False: 0]
  ------------------
  727|      0|                }
  728|      0|                else
  729|      0|                {
  730|      0|                   pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
  731|      0|                }
  732|       |
  733|       |                // check type
  734|      0|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (734:21): [True: 0, False: 0]
  |  Branch (734:34): [True: 0, False: 0]
  ------------------
  735|      0|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (735:25): [True: 0, False: 0]
  ------------------
  736|      0|                        ppToken->name[len++] = (char)ch;
  737|      0|                    isUnsigned = true;
  738|       |
  739|      0|                    int nextCh = getch();
  740|      0|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (740:25): [True: 0, False: 0]
  |  Branch (740:42): [True: 0, False: 0]
  ------------------
  741|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (741:29): [True: 0, False: 0]
  ------------------
  742|      0|                            ppToken->name[len++] = (char)nextCh;
  743|      0|                        isInt64 = true;
  744|      0|                    } else
  745|      0|                        ungetch();
  746|       |
  747|      0|                    nextCh = getch();
  748|      0|                    if ((nextCh == 's' || nextCh == 'S') &&
  ------------------
  |  Branch (748:26): [True: 0, False: 0]
  |  Branch (748:43): [True: 0, False: 0]
  ------------------
  749|      0|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (749:33): [True: 0, False: 0]
  ------------------
  750|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (750:29): [True: 0, False: 0]
  ------------------
  751|      0|                            ppToken->name[len++] = (char)nextCh;
  752|      0|                        isInt16 = true;
  753|      0|                    } else
  754|      0|                        ungetch();
  755|      0|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (755:28): [True: 0, False: 0]
  |  Branch (755:41): [True: 0, False: 0]
  ------------------
  756|      0|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (756:25): [True: 0, False: 0]
  ------------------
  757|      0|                        ppToken->name[len++] = (char)ch;
  758|      0|                    isInt64 = true;
  759|      0|                } else if ((ch == 's' || ch == 'S') &&
  ------------------
  |  Branch (759:29): [True: 0, False: 0]
  |  Branch (759:42): [True: 0, False: 0]
  ------------------
  760|      0|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (760:33): [True: 0, False: 0]
  ------------------
  761|      0|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (761:25): [True: 0, False: 0]
  ------------------
  762|      0|                        ppToken->name[len++] = (char)ch;
  763|      0|                    isInt16 = true;
  764|      0|                } else {
  765|      0|                    ungetch();
  766|      0|                }
  767|      0|                ppToken->name[len] = '\0';
  768|       |
  769|       |                // Assign value
  770|      0|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (770:21): [True: 0, False: 0]
  |  Branch (770:32): [True: 0, False: 0]
  ------------------
  771|      0|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (771:25): [True: 0, False: 0]
  ------------------
  772|      0|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  773|      0|                                                        "64-bit binary literal");
  774|      0|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  775|      0|                            Num_Int64_Extensions, Int64_Extensions, "64-bit binary literal");
  776|      0|                    }
  777|      0|                    ppToken->i64val = ival;
  778|      0|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (778:28): [True: 0, False: 0]
  ------------------
  779|      0|                } else if (isInt16) {
  ------------------
  |  Branch (779:28): [True: 0, False: 0]
  ------------------
  780|      0|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (780:25): [True: 0, False: 0]
  ------------------
  781|      0|                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (781:29): [True: 0, False: 0]
  ------------------
  782|      0|                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  783|      0|                                                            "16-bit binary literal");
  784|      0|                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  785|      0|                                Num_Int16_Extensions, Int16_Extensions, "16-bit binary literal");
  786|      0|                        }
  787|      0|                    }
  788|      0|                    ppToken->ival = (int)ival;
  789|      0|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (789:28): [True: 0, False: 0]
  ------------------
  790|      0|                } else {
  791|      0|                    ppToken->ival = (int)ival;
  792|      0|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (792:28): [True: 0, False: 0]
  ------------------
  793|      0|                }
  794|  51.2k|            } else {
  795|       |                // could be octal integer or floating point, speculative pursue octal until it must be floating point
  796|       |
  797|  51.2k|                bool isUnsigned = false;
  798|  51.2k|                bool isInt64 = false;
  799|  51.2k|                bool isInt16 = false;
  800|  51.2k|                bool octalOverflow = false;
  801|  51.2k|                bool nonOctal = false;
  802|  51.2k|                ival = 0;
  803|       |
  804|       |                // see how much octal-like stuff we can read
  805|  66.0k|                while (ch >= '0' && ch <= '7') {
  ------------------
  |  Branch (805:24): [True: 57.6k, False: 8.37k]
  |  Branch (805:37): [True: 14.7k, False: 42.8k]
  ------------------
  806|  14.7k|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (806:25): [True: 14.7k, False: 0]
  ------------------
  807|  14.7k|                        ppToken->name[len++] = (char)ch;
  808|      0|                    else if (! AlreadyComplained) {
  ------------------
  |  Branch (808:30): [True: 0, False: 0]
  ------------------
  809|      0|                        pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
  810|      0|                        AlreadyComplained = 1;
  811|      0|                    }
  812|  14.7k|                    if (ival <= 0x1fffffffffffffffull) {
  ------------------
  |  Branch (812:25): [True: 14.7k, False: 11]
  ------------------
  813|  14.7k|                        ii = ch - '0';
  814|  14.7k|                        ival = (ival << 3) | ii;
  815|  14.7k|                    } else
  816|     11|                        octalOverflow = true;
  817|  14.7k|                    ch = getch();
  818|  14.7k|                }
  819|       |
  820|       |                // could be part of a float...
  821|  51.2k|                if (ch == '8' || ch == '9') {
  ------------------
  |  Branch (821:21): [True: 371, False: 50.8k]
  |  Branch (821:34): [True: 18, False: 50.8k]
  ------------------
  822|    389|                    nonOctal = true;
  823|  6.20k|                    do {
  824|  6.20k|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (824:29): [True: 6.20k, False: 0]
  ------------------
  825|  6.20k|                            ppToken->name[len++] = (char)ch;
  826|      0|                        else if (! AlreadyComplained) {
  ------------------
  |  Branch (826:34): [True: 0, False: 0]
  ------------------
  827|      0|                            pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
  828|      0|                            AlreadyComplained = 1;
  829|      0|                        }
  830|  6.20k|                        ch = getch();
  831|  6.20k|                    } while (ch >= '0' && ch <= '9');
  ------------------
  |  Branch (831:30): [True: 6.19k, False: 11]
  |  Branch (831:43): [True: 5.81k, False: 378]
  ------------------
  832|    389|                }
  833|  51.2k|                if (floatingPointChar(ch))
  ------------------
  |  Branch (833:21): [True: 1.99k, False: 49.2k]
  ------------------
  834|  1.99k|                    return pp->lFloatConst(len, ch, ppToken);
  835|       |
  836|       |                // wasn't a float, so must be octal...
  837|  49.2k|                if (nonOctal)
  ------------------
  |  Branch (837:21): [True: 13, False: 49.2k]
  ------------------
  838|     13|                    pp->parseContext.ppError(ppToken->loc, "octal literal digit too large", "", "");
  839|       |
  840|  49.2k|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (840:21): [True: 116, False: 49.1k]
  |  Branch (840:34): [True: 27.0k, False: 22.1k]
  ------------------
  841|  27.1k|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (841:25): [True: 27.1k, False: 0]
  ------------------
  842|  27.1k|                        ppToken->name[len++] = (char)ch;
  843|  27.1k|                    isUnsigned = true;
  844|       |
  845|  27.1k|                    int nextCh = getch();
  846|  27.1k|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (846:25): [True: 0, False: 27.1k]
  |  Branch (846:42): [True: 16, False: 27.1k]
  ------------------
  847|     16|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (847:29): [True: 16, False: 0]
  ------------------
  848|     16|                            ppToken->name[len++] = (char)nextCh;
  849|     16|                        isInt64 = true;
  850|     16|                    } else
  851|  27.1k|                        ungetch();
  852|       |
  853|  27.1k|                    nextCh = getch();
  854|  27.1k|                    if ((nextCh == 's' || nextCh == 'S') && 
  ------------------
  |  Branch (854:26): [True: 28, False: 27.1k]
  |  Branch (854:43): [True: 17, False: 27.0k]
  ------------------
  855|     45|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (855:33): [True: 9, False: 36]
  ------------------
  856|      9|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (856:29): [True: 9, False: 0]
  ------------------
  857|      9|                            ppToken->name[len++] = (char)nextCh;
  858|      9|                        isInt16 = true;
  859|      9|                    } else
  860|  27.1k|                        ungetch();
  861|  27.1k|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (861:28): [True: 276, False: 21.8k]
  |  Branch (861:41): [True: 463, False: 21.3k]
  ------------------
  862|    739|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (862:25): [True: 739, False: 0]
  ------------------
  863|    739|                        ppToken->name[len++] = (char)ch;
  864|    739|                    isInt64 = true;
  865|  21.3k|                } else if ((ch == 's' || ch == 'S') && 
  ------------------
  |  Branch (865:29): [True: 73, False: 21.3k]
  |  Branch (865:42): [True: 0, False: 21.3k]
  ------------------
  866|     73|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (866:33): [True: 14, False: 59]
  ------------------
  867|     14|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (867:25): [True: 14, False: 0]
  ------------------
  868|     14|                        ppToken->name[len++] = (char)ch;
  869|     14|                    isInt16 = true;
  870|     14|                } else
  871|  21.3k|                    ungetch();
  872|  49.2k|                ppToken->name[len] = '\0';
  873|       |
  874|  49.2k|                if (!isInt64 && ival > 0xffffffffu)
  ------------------
  |  Branch (874:21): [True: 48.5k, False: 755]
  |  Branch (874:33): [True: 2, False: 48.5k]
  ------------------
  875|      2|                    octalOverflow = true;
  876|       |
  877|  49.2k|                if (octalOverflow)
  ------------------
  |  Branch (877:21): [True: 2, False: 49.2k]
  ------------------
  878|      2|                    pp->parseContext.ppError(ppToken->loc, "octal literal too big", "", "");
  879|       |
  880|  49.2k|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (880:21): [True: 755, False: 48.5k]
  |  Branch (880:32): [True: 40, False: 715]
  ------------------
  881|     40|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (881:25): [True: 2, False: 38]
  ------------------
  882|      2|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  883|      2|                                                        "64-bit octal literal");
  884|      2|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  885|      2|                            Num_Int64_Extensions, Int64_Extensions, "64-bit octal literal");
  886|      2|                    }
  887|     40|                    ppToken->i64val = ival;
  888|     40|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (888:28): [True: 3, False: 37]
  ------------------
  889|  49.2k|                } else if (isInt16) {
  ------------------
  |  Branch (889:28): [True: 23, False: 49.1k]
  ------------------
  890|     23|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (890:25): [True: 0, False: 23]
  ------------------
  891|      0|                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (891:29): [True: 0, False: 0]
  ------------------
  892|      0|                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  893|      0|                                                            "16-bit octal literal");
  894|      0|                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  895|      0|                                Num_Int16_Extensions, Int16_Extensions, "16-bit octal literal");
  896|      0|                        }
  897|      0|                    }
  898|     23|                    ppToken->ival = (int)ival;
  899|     23|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (899:28): [True: 9, False: 14]
  ------------------
  900|  49.1k|                } else {
  901|  49.1k|                    ppToken->ival = (int)ival;
  902|  49.1k|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (902:28): [True: 27.1k, False: 22.0k]
  ------------------
  903|  49.1k|                }
  904|  49.2k|            }
  905|      0|            break;
  906|   357k|        case '1': case '2': case '3': case '4':
  ------------------
  |  Branch (906:9): [True: 195k, False: 134M]
  |  Branch (906:19): [True: 29.2k, False: 134M]
  |  Branch (906:29): [True: 11.7k, False: 134M]
  |  Branch (906:39): [True: 121k, False: 134M]
  ------------------
  907|   411k|        case '5': case '6': case '7': case '8': case '9':
  ------------------
  |  Branch (907:9): [True: 5.35k, False: 134M]
  |  Branch (907:19): [True: 12.5k, False: 134M]
  |  Branch (907:29): [True: 3.30k, False: 134M]
  |  Branch (907:39): [True: 30.7k, False: 134M]
  |  Branch (907:49): [True: 2.13k, False: 134M]
  ------------------
  908|       |            // can't be hexadecimal or octal, is either decimal or floating point
  909|       |
  910|   539k|            do {
  911|   539k|                if (len < MaxTokenLength)
  ------------------
  |  Branch (911:21): [True: 539k, False: 0]
  ------------------
  912|   539k|                    ppToken->name[len++] = (char)ch;
  913|      0|                else if (! AlreadyComplained) {
  ------------------
  |  Branch (913:26): [True: 0, False: 0]
  ------------------
  914|      0|                    pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
  915|      0|                    AlreadyComplained = 1;
  916|      0|                }
  917|   539k|                ch = getch();
  918|   539k|            } while (ch >= '0' && ch <= '9');
  ------------------
  |  Branch (918:22): [True: 391k, False: 148k]
  |  Branch (918:35): [True: 127k, False: 263k]
  ------------------
  919|   411k|            if (floatingPointChar(ch))
  ------------------
  |  Branch (919:17): [True: 1.67k, False: 409k]
  ------------------
  920|  1.67k|                return pp->lFloatConst(len, ch, ppToken);
  921|   409k|            else {
  922|       |                // Finish handling signed and unsigned integers
  923|   409k|                int numericLen = len;
  924|   409k|                bool isUnsigned = false;
  925|   409k|                bool isInt64 = false;
  926|   409k|                bool isInt16 = false;
  927|   409k|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (927:21): [True: 1.06k, False: 408k]
  |  Branch (927:34): [True: 408, False: 408k]
  ------------------
  928|  1.47k|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (928:25): [True: 1.47k, False: 0]
  ------------------
  929|  1.47k|                        ppToken->name[len++] = (char)ch;
  930|  1.47k|                    isUnsigned = true;
  931|       |
  932|  1.47k|                    int nextCh = getch();
  933|  1.47k|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (933:25): [True: 421, False: 1.05k]
  |  Branch (933:42): [True: 76, False: 978]
  ------------------
  934|    497|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (934:29): [True: 497, False: 0]
  ------------------
  935|    497|                            ppToken->name[len++] = (char)nextCh;
  936|    497|                        isInt64 = true;
  937|    497|                    } else
  938|    978|                        ungetch();
  939|       |
  940|  1.47k|                    nextCh = getch();
  941|  1.47k|                    if ((nextCh == 's' || nextCh == 'S') &&
  ------------------
  |  Branch (941:26): [True: 275, False: 1.20k]
  |  Branch (941:43): [True: 23, False: 1.17k]
  ------------------
  942|    298|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (942:33): [True: 77, False: 221]
  ------------------
  943|     77|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (943:29): [True: 77, False: 0]
  ------------------
  944|     77|                            ppToken->name[len++] = (char)nextCh;
  945|     77|                        isInt16 = true;
  946|     77|                    } else
  947|  1.39k|                        ungetch();
  948|   408k|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (948:28): [True: 23, False: 408k]
  |  Branch (948:41): [True: 152, False: 408k]
  ------------------
  949|    175|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (949:25): [True: 175, False: 0]
  ------------------
  950|    175|                        ppToken->name[len++] = (char)ch;
  951|    175|                    isInt64 = true;
  952|   408k|                } else if ((ch == 's' || ch == 'S') &&
  ------------------
  |  Branch (952:29): [True: 2.76k, False: 405k]
  |  Branch (952:42): [True: 353, False: 405k]
  ------------------
  953|  3.11k|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (953:33): [True: 291, False: 2.82k]
  ------------------
  954|    291|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (954:25): [True: 291, False: 0]
  ------------------
  955|    291|                        ppToken->name[len++] = (char)ch;
  956|    291|                    isInt16 = true;
  957|    291|                } else
  958|   407k|                    ungetch();
  959|       |
  960|   409k|                ppToken->name[len] = '\0';
  961|   409k|                ival = 0;
  962|   409k|                const unsigned oneTenthMaxInt  = 0xFFFFFFFFu / 10;
  963|   409k|                const unsigned remainderMaxInt = 0xFFFFFFFFu - 10 * oneTenthMaxInt;
  964|   409k|                const unsigned long long oneTenthMaxInt64  = 0xFFFFFFFFFFFFFFFFull / 10;
  965|   409k|                const unsigned long long remainderMaxInt64 = 0xFFFFFFFFFFFFFFFFull - 10 * oneTenthMaxInt64;
  966|   409k|                const unsigned short oneTenthMaxInt16  = 0xFFFFu / 10;
  967|   409k|                const unsigned short remainderMaxInt16 = 0xFFFFu - 10 * oneTenthMaxInt16;
  968|   944k|                for (int i = 0; i < numericLen; i++) {
  ------------------
  |  Branch (968:33): [True: 535k, False: 409k]
  ------------------
  969|   535k|                    ch = ppToken->name[i] - '0';
  970|   535k|                    bool overflow = false;
  971|   535k|                    if (isInt64)
  ------------------
  |  Branch (971:25): [True: 722, False: 534k]
  ------------------
  972|    722|                        overflow = (ival > oneTenthMaxInt64 || (ival == oneTenthMaxInt64 && (unsigned long long)ch > remainderMaxInt64));
  ------------------
  |  Branch (972:37): [True: 1, False: 721]
  |  Branch (972:65): [True: 0, False: 721]
  |  Branch (972:93): [True: 0, False: 0]
  ------------------
  973|   534k|                    else if (isInt16)
  ------------------
  |  Branch (973:30): [True: 757, False: 533k]
  ------------------
  974|    757|                        overflow = (ival > oneTenthMaxInt16 || (ival == oneTenthMaxInt16 && (unsigned short)ch > remainderMaxInt16));
  ------------------
  |  Branch (974:37): [True: 1, False: 756]
  |  Branch (974:65): [True: 0, False: 756]
  |  Branch (974:93): [True: 0, False: 0]
  ------------------
  975|   533k|                    else
  976|   533k|                        overflow = (ival > oneTenthMaxInt || (ival == oneTenthMaxInt && (unsigned)ch > remainderMaxInt));
  ------------------
  |  Branch (976:37): [True: 19, False: 533k]
  |  Branch (976:63): [True: 196, False: 533k]
  |  Branch (976:89): [True: 1, False: 195]
  ------------------
  977|   535k|                    if (overflow) {
  ------------------
  |  Branch (977:25): [True: 22, False: 535k]
  ------------------
  978|     22|                        pp->parseContext.ppError(ppToken->loc, "numeric literal too big", "", "");
  979|     22|                        ival = 0xFFFFFFFFFFFFFFFFull;
  980|     22|                        break;
  981|     22|                    } else
  982|   535k|                        ival = ival * 10 + ch;
  983|   535k|                }
  984|       |
  985|   409k|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (985:21): [True: 672, False: 409k]
  |  Branch (985:32): [True: 23, False: 649]
  ------------------
  986|     23|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (986:25): [True: 10, False: 13]
  ------------------
  987|     10|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  988|     10|                                                        "64-bit literal");
  989|     10|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  990|     10|                            Num_Int64_Extensions, Int64_Extensions, "64-bit literal");
  991|     10|                    }
  992|     23|                    ppToken->i64val = ival;
  993|     23|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (993:28): [True: 9, False: 14]
  ------------------
  994|   409k|                } else if (isInt16) {
  ------------------
  |  Branch (994:28): [True: 368, False: 409k]
  ------------------
  995|    368|                    if (pp->ifdepth == 0 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (995:25): [True: 3, False: 365]
  |  Branch (995:45): [True: 3, False: 0]
  ------------------
  996|      3|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  997|      3|                                                        "16-bit  literal");
  998|      3|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  999|      3|                            Num_Int16_Extensions, Int16_Extensions, "16-bit literal");
 1000|      3|                    }
 1001|    368|                    ppToken->ival = (int)ival;
 1002|    368|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (1002:28): [True: 77, False: 291]
  ------------------
 1003|   409k|                } else {
 1004|   409k|                    ppToken->ival = (int)ival;
 1005|   409k|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (1005:28): [True: 1.38k, False: 408k]
  ------------------
 1006|   409k|                }
 1007|   409k|            }
 1008|      0|            break;
 1009|  4.29k|        case '-':
  ------------------
  |  Branch (1009:9): [True: 4.29k, False: 134M]
  ------------------
 1010|  4.29k|            ch = getch();
 1011|  4.29k|            if (ch == '-') {
  ------------------
  |  Branch (1011:17): [True: 190, False: 4.10k]
  ------------------
 1012|    190|                return PpAtomDecrement;
 1013|  4.10k|            } else if (ch == '=') {
  ------------------
  |  Branch (1013:24): [True: 0, False: 4.10k]
  ------------------
 1014|      0|                return PPAtomSubAssign;
 1015|  4.10k|            } else {
 1016|  4.10k|                ungetch();
 1017|  4.10k|                return '-';
 1018|  4.10k|            }
 1019|  31.7k|        case '+':
  ------------------
  |  Branch (1019:9): [True: 31.7k, False: 134M]
  ------------------
 1020|  31.7k|            ch = getch();
 1021|  31.7k|            if (ch == '+') {
  ------------------
  |  Branch (1021:17): [True: 20.7k, False: 10.9k]
  ------------------
 1022|  20.7k|                return PpAtomIncrement;
 1023|  20.7k|            } else if (ch == '=') {
  ------------------
  |  Branch (1023:24): [True: 69, False: 10.8k]
  ------------------
 1024|     69|                return PPAtomAddAssign;
 1025|  10.8k|            } else {
 1026|  10.8k|                ungetch();
 1027|  10.8k|                return '+';
 1028|  10.8k|            }
 1029|  3.73k|        case '*':
  ------------------
  |  Branch (1029:9): [True: 3.73k, False: 134M]
  ------------------
 1030|  3.73k|            ch = getch();
 1031|  3.73k|            if (ch == '=') {
  ------------------
  |  Branch (1031:17): [True: 0, False: 3.73k]
  ------------------
 1032|      0|                return PPAtomMulAssign;
 1033|  3.73k|            } else {
 1034|  3.73k|                ungetch();
 1035|  3.73k|                return '*';
 1036|  3.73k|            }
 1037|  3.45k|        case '%':
  ------------------
  |  Branch (1037:9): [True: 3.45k, False: 134M]
  ------------------
 1038|  3.45k|            ch = getch();
 1039|  3.45k|            if (ch == '=') {
  ------------------
  |  Branch (1039:17): [True: 0, False: 3.45k]
  ------------------
 1040|      0|                return PPAtomModAssign;
 1041|  3.45k|            } else {
 1042|  3.45k|                ungetch();
 1043|  3.45k|                return '%';
 1044|  3.45k|            }
 1045|    683|        case '^':
  ------------------
  |  Branch (1045:9): [True: 683, False: 134M]
  ------------------
 1046|    683|            ch = getch();
 1047|    683|            if (ch == '^') {
  ------------------
  |  Branch (1047:17): [True: 399, False: 284]
  ------------------
 1048|    399|                return PpAtomXor;
 1049|    399|            } else {
 1050|    284|                if (ch == '=')
  ------------------
  |  Branch (1050:21): [True: 5, False: 279]
  ------------------
 1051|      5|                    return PpAtomXorAssign;
 1052|    279|                else{
 1053|    279|                    ungetch();
 1054|    279|                    return '^';
 1055|    279|                }
 1056|    284|            }
 1057|       |
 1058|   186k|        case '=':
  ------------------
  |  Branch (1058:9): [True: 186k, False: 134M]
  ------------------
 1059|   186k|            ch = getch();
 1060|   186k|            if (ch == '=') {
  ------------------
  |  Branch (1060:17): [True: 4.54k, False: 182k]
  ------------------
 1061|  4.54k|                return PpAtomEQ;
 1062|   182k|            } else {
 1063|   182k|                ungetch();
 1064|   182k|                return '=';
 1065|   182k|            }
 1066|  1.76k|        case '!':
  ------------------
  |  Branch (1066:9): [True: 1.76k, False: 134M]
  ------------------
 1067|  1.76k|            ch = getch();
 1068|  1.76k|            if (ch == '=') {
  ------------------
  |  Branch (1068:17): [True: 0, False: 1.76k]
  ------------------
 1069|      0|                return PpAtomNE;
 1070|  1.76k|            } else {
 1071|  1.76k|                ungetch();
 1072|  1.76k|                return '!';
 1073|  1.76k|            }
 1074|  2.07k|        case '|':
  ------------------
  |  Branch (1074:9): [True: 2.07k, False: 134M]
  ------------------
 1075|  2.07k|            ch = getch();
 1076|  2.07k|            if (ch == '|') {
  ------------------
  |  Branch (1076:17): [True: 860, False: 1.21k]
  ------------------
 1077|    860|                return PpAtomOr;
 1078|  1.21k|            } else if (ch == '=') {
  ------------------
  |  Branch (1078:24): [True: 0, False: 1.21k]
  ------------------
 1079|      0|                return PpAtomOrAssign;
 1080|  1.21k|            } else {
 1081|  1.21k|                ungetch();
 1082|  1.21k|                return '|';
 1083|  1.21k|            }
 1084|    217|        case '&':
  ------------------
  |  Branch (1084:9): [True: 217, False: 134M]
  ------------------
 1085|    217|            ch = getch();
 1086|    217|            if (ch == '&') {
  ------------------
  |  Branch (1086:17): [True: 4, False: 213]
  ------------------
 1087|      4|                return PpAtomAnd;
 1088|    213|            } else if (ch == '=') {
  ------------------
  |  Branch (1088:24): [True: 6, False: 207]
  ------------------
 1089|      6|                return PpAtomAndAssign;
 1090|    207|            } else {
 1091|    207|                ungetch();
 1092|    207|                return '&';
 1093|    207|            }
 1094|   117k|        case '<':
  ------------------
  |  Branch (1094:9): [True: 117k, False: 134M]
  ------------------
 1095|   117k|            ch = getch();
 1096|   117k|            if (ch == '<') {
  ------------------
  |  Branch (1096:17): [True: 204, False: 116k]
  ------------------
 1097|    204|                ch = getch();
 1098|    204|                if (ch == '=')
  ------------------
  |  Branch (1098:21): [True: 0, False: 204]
  ------------------
 1099|      0|                    return PpAtomLeftAssign;
 1100|    204|                else {
 1101|    204|                    ungetch();
 1102|    204|                    return PpAtomLeft;
 1103|    204|                }
 1104|   116k|            } else if (ch == '=') {
  ------------------
  |  Branch (1104:24): [True: 1, False: 116k]
  ------------------
 1105|      1|                return PpAtomLE;
 1106|   116k|            } else {
 1107|   116k|                ungetch();
 1108|   116k|                return '<';
 1109|   116k|            }
 1110|   116k|        case '>':
  ------------------
  |  Branch (1110:9): [True: 116k, False: 134M]
  ------------------
 1111|   116k|            ch = getch();
 1112|   116k|            if (ch == '>') {
  ------------------
  |  Branch (1112:17): [True: 165, False: 115k]
  ------------------
 1113|    165|                ch = getch();
 1114|    165|                if (ch == '=')
  ------------------
  |  Branch (1114:21): [True: 2, False: 163]
  ------------------
 1115|      2|                    return PpAtomRightAssign;
 1116|    163|                else {
 1117|    163|                    ungetch();
 1118|    163|                    return PpAtomRight;
 1119|    163|                }
 1120|   115k|            } else if (ch == '=') {
  ------------------
  |  Branch (1120:24): [True: 728, False: 115k]
  ------------------
 1121|    728|                return PpAtomGE;
 1122|   115k|            } else {
 1123|   115k|                ungetch();
 1124|   115k|                return '>';
 1125|   115k|            }
 1126|  94.3k|        case '.':
  ------------------
  |  Branch (1126:9): [True: 94.3k, False: 134M]
  ------------------
 1127|  94.3k|            ch = getch();
 1128|  94.3k|            if (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (1128:17): [True: 3.68k, False: 90.6k]
  |  Branch (1128:30): [True: 3.09k, False: 590]
  ------------------
 1129|  3.09k|                ungetch();
 1130|  3.09k|                return pp->lFloatConst(0, '.', ppToken);
 1131|  91.2k|            } else {
 1132|  91.2k|                ungetch();
 1133|  91.2k|                return '.';
 1134|  91.2k|            }
 1135|   437k|        case '/':
  ------------------
  |  Branch (1135:9): [True: 437k, False: 134M]
  ------------------
 1136|   437k|            ch = getch();
 1137|   437k|            if (ch == '/') {
  ------------------
  |  Branch (1137:17): [True: 40.4k, False: 396k]
  ------------------
 1138|  40.4k|                pp->inComment = true;
 1139|   657k|                do {
 1140|   657k|                    ch = getch();
 1141|   657k|                } while (ch != '\n' && ch != EndOfInput);
  ------------------
  |  Branch (1141:26): [True: 616k, False: 40.4k]
  |  Branch (1141:40): [True: 616k, False: 21]
  ------------------
 1142|  40.4k|                ppToken->space = true;
 1143|  40.4k|                pp->inComment = false;
 1144|       |
 1145|  40.4k|                return ch;
 1146|   396k|            } else if (ch == '*') {
  ------------------
  |  Branch (1146:24): [True: 1.99k, False: 394k]
  ------------------
 1147|  1.99k|                ch = getch();
 1148|  4.42k|                do {
 1149|   876k|                    while (ch != '*') {
  ------------------
  |  Branch (1149:28): [True: 872k, False: 4.35k]
  ------------------
 1150|   872k|                        if (ch == EndOfInput) {
  ------------------
  |  Branch (1150:29): [True: 63, False: 872k]
  ------------------
 1151|     63|                            pp->parseContext.ppError(ppToken->loc, "End of input in comment", "comment", "");
 1152|     63|                            return ch;
 1153|     63|                        }
 1154|   872k|                        ch = getch();
 1155|   872k|                    }
 1156|  4.35k|                    ch = getch();
 1157|  4.35k|                    if (ch == EndOfInput) {
  ------------------
  |  Branch (1157:25): [True: 0, False: 4.35k]
  ------------------
 1158|      0|                        pp->parseContext.ppError(ppToken->loc, "End of input in comment", "comment", "");
 1159|      0|                        return ch;
 1160|      0|                    }
 1161|  4.35k|                } while (ch != '/');
  ------------------
  |  Branch (1161:26): [True: 2.43k, False: 1.92k]
  ------------------
 1162|  1.92k|                ppToken->space = true;
 1163|       |                // loop again to get the next token...
 1164|  1.92k|                break;
 1165|   394k|            } else if (ch == '=') {
  ------------------
  |  Branch (1165:24): [True: 5, False: 394k]
  ------------------
 1166|      5|                return PPAtomDivAssign;
 1167|   394k|            } else {
 1168|   394k|                ungetch();
 1169|   394k|                return '/';
 1170|   394k|            }
 1171|      0|            break;
 1172|     12|        case '\'':
  ------------------
  |  Branch (1172:9): [True: 12, False: 134M]
  ------------------
 1173|     12|            return pp->characterLiteral(ppToken);
 1174|     27|        case '"':
  ------------------
  |  Branch (1174:9): [True: 27, False: 134M]
  ------------------
 1175|       |            // #include uses scanHeaderName() to ignore these escape sequences.
 1176|     27|            ch = getch();
 1177|    126|            while (ch != '"' && ch != '\n' && ch != EndOfInput) {
  ------------------
  |  Branch (1177:20): [True: 112, False: 14]
  |  Branch (1177:33): [True: 100, False: 12]
  |  Branch (1177:47): [True: 99, False: 1]
  ------------------
 1178|     99|                if (len < MaxTokenLength) {
  ------------------
  |  Branch (1178:21): [True: 99, False: 0]
  ------------------
 1179|     99|                    if (ch == '\\' && !pp->disableEscapeSequences) {
  ------------------
  |  Branch (1179:25): [True: 14, False: 85]
  |  Branch (1179:39): [True: 14, False: 0]
  ------------------
 1180|     14|                        int nextCh = getch();
 1181|     14|                        switch (nextCh) {
 1182|      0|                        case '\'': ch = 0x27; break;
  ------------------
  |  Branch (1182:25): [True: 0, False: 14]
  ------------------
 1183|      0|                        case '"':  ch = 0x22; break;
  ------------------
  |  Branch (1183:25): [True: 0, False: 14]
  ------------------
 1184|      0|                        case '?':  ch = 0x3f; break;
  ------------------
  |  Branch (1184:25): [True: 0, False: 14]
  ------------------
 1185|      0|                        case '\\': ch = 0x5c; break;
  ------------------
  |  Branch (1185:25): [True: 0, False: 14]
  ------------------
 1186|      0|                        case 'a':  ch = 0x07; break;
  ------------------
  |  Branch (1186:25): [True: 0, False: 14]
  ------------------
 1187|      0|                        case 'b':  ch = 0x08; break;
  ------------------
  |  Branch (1187:25): [True: 0, False: 14]
  ------------------
 1188|      0|                        case 'f':  ch = 0x0c; break;
  ------------------
  |  Branch (1188:25): [True: 0, False: 14]
  ------------------
 1189|      0|                        case 'n':  ch = 0x0a; break;
  ------------------
  |  Branch (1189:25): [True: 0, False: 14]
  ------------------
 1190|      0|                        case 'r':  ch = 0x0d; break;
  ------------------
  |  Branch (1190:25): [True: 0, False: 14]
  ------------------
 1191|      0|                        case 't':  ch = 0x09; break;
  ------------------
  |  Branch (1191:25): [True: 0, False: 14]
  ------------------
 1192|      0|                        case 'v':  ch = 0x0b; break;
  ------------------
  |  Branch (1192:25): [True: 0, False: 14]
  ------------------
 1193|      0|                        case 'x': 
  ------------------
  |  Branch (1193:25): [True: 0, False: 14]
  ------------------
 1194|       |                            // Hex value, arbitrary number of characters. Terminated by the first
 1195|       |                            // non-hex digit
 1196|      0|                            {
 1197|      0|                                int numDigits = 0;
 1198|      0|                                ch = 0;
 1199|      0|                                while (true) {
  ------------------
  |  Branch (1199:40): [True: 0, Folded]
  ------------------
 1200|      0|                                    nextCh = getch();
 1201|      0|                                    if (nextCh >= '0' && nextCh <= '9')
  ------------------
  |  Branch (1201:41): [True: 0, False: 0]
  |  Branch (1201:58): [True: 0, False: 0]
  ------------------
 1202|      0|                                        nextCh -= '0';
 1203|      0|                                    else if (nextCh >= 'A' && nextCh <= 'F')
  ------------------
  |  Branch (1203:46): [True: 0, False: 0]
  |  Branch (1203:63): [True: 0, False: 0]
  ------------------
 1204|      0|                                        nextCh -= 'A' - 10;
 1205|      0|                                    else if (nextCh >= 'a' && nextCh <= 'f')
  ------------------
  |  Branch (1205:46): [True: 0, False: 0]
  |  Branch (1205:63): [True: 0, False: 0]
  ------------------
 1206|      0|                                        nextCh -= 'a' - 10;
 1207|      0|                                    else {
 1208|      0|                                        ungetch();
 1209|      0|                                        break;
 1210|      0|                                    }
 1211|      0|                                    numDigits++;
 1212|      0|                                    ch = ch * 0x10 + nextCh;
 1213|      0|                                }
 1214|      0|                                if (numDigits == 0) {
  ------------------
  |  Branch (1214:37): [True: 0, False: 0]
  ------------------
 1215|      0|                                    pp->parseContext.ppError(ppToken->loc, "Expected hex value in escape sequence", "string", "");
 1216|      0|                                }
 1217|      0|                                break;
 1218|      0|                            }
 1219|      0|                        case '0':
  ------------------
  |  Branch (1219:25): [True: 0, False: 14]
  ------------------
 1220|      0|                        case '1':
  ------------------
  |  Branch (1220:25): [True: 0, False: 14]
  ------------------
 1221|      0|                        case '2':
  ------------------
  |  Branch (1221:25): [True: 0, False: 14]
  ------------------
 1222|      0|                        case '3':
  ------------------
  |  Branch (1222:25): [True: 0, False: 14]
  ------------------
 1223|      3|                        case '4':
  ------------------
  |  Branch (1223:25): [True: 3, False: 11]
  ------------------
 1224|      3|                        case '5':
  ------------------
  |  Branch (1224:25): [True: 0, False: 14]
  ------------------
 1225|      7|                        case '6':
  ------------------
  |  Branch (1225:25): [True: 4, False: 10]
  ------------------
 1226|      7|                        case '7':
  ------------------
  |  Branch (1226:25): [True: 0, False: 14]
  ------------------
 1227|       |                            // Octal value, up to three octal digits
 1228|      7|                            {
 1229|      7|                                int numDigits = 1;
 1230|      7|                                ch = nextCh - '0';
 1231|     13|                                while (numDigits < 3) {
  ------------------
  |  Branch (1231:40): [True: 12, False: 1]
  ------------------
 1232|     12|                                    nextCh = getch();
 1233|     12|                                    if (nextCh >= '0' && nextCh <= '7')
  ------------------
  |  Branch (1233:41): [True: 11, False: 1]
  |  Branch (1233:58): [True: 6, False: 5]
  ------------------
 1234|      6|                                        nextCh -= '0';
 1235|      6|                                    else {
 1236|      6|                                        ungetch();
 1237|      6|                                        break;
 1238|      6|                                    }
 1239|      6|                                    numDigits++;
 1240|      6|                                    ch = ch * 8 + nextCh;
 1241|      6|                                }
 1242|      7|                                break;
 1243|      7|                            }
 1244|      7|                        default:
  ------------------
  |  Branch (1244:25): [True: 7, False: 7]
  ------------------
 1245|      7|                            pp->parseContext.ppError(ppToken->loc, "Invalid escape sequence", "string", "");
 1246|      7|                            break;
 1247|     14|                        }
 1248|     14|                    }
 1249|     99|                    ppToken->name[len] = (char)ch;
 1250|     99|                    len++;
 1251|     99|                    ch = getch();
 1252|     99|                } else
 1253|      0|                    break;
 1254|     99|            };
 1255|     27|            ppToken->name[len] = '\0';
 1256|     27|            if (ch != '"') {
  ------------------
  |  Branch (1256:17): [True: 13, False: 14]
  ------------------
 1257|     13|                ungetch();
 1258|     13|                pp->parseContext.ppError(ppToken->loc, "End of line in string", "string", "");
 1259|     13|            }
 1260|     27|            return PpAtomConstString;
 1261|  14.0k|        case ':':
  ------------------
  |  Branch (1261:9): [True: 14.0k, False: 134M]
  ------------------
 1262|  14.0k|            ch = getch();
 1263|  14.0k|            if (ch == ':')
  ------------------
  |  Branch (1263:17): [True: 372, False: 13.7k]
  ------------------
 1264|    372|                return PpAtomColonColon;
 1265|  13.7k|            ungetch();
 1266|  13.7k|            return ':';
 1267|   134M|        }
 1268|       |
 1269|  1.92k|        ch = getch();
 1270|  1.92k|    }
 1271|   134M|}
_ZN7glslang10TPpContext8tokenizeERNS_8TPpTokenE:
 1280|   123M|{
 1281|   123M|    int stringifyDepth = 0;
 1282|   123M|    TPpToken stringifiedToken; // Tokens are appended to this as they come in
 1283|   131M|    for (;;) {
 1284|   131M|        int token = scanToken(&ppToken);
 1285|       |
 1286|       |        // Handle token-pasting logic
 1287|   131M|        token = tokenPaste(token, ppToken);
 1288|       |
 1289|   131M|        if (token == EndOfInput) {
  ------------------
  |  Branch (1289:13): [True: 12.2k, False: 131M]
  ------------------
 1290|  12.2k|            missingEndifCheck();
 1291|  12.2k|            return EndOfInput;
 1292|  12.2k|        }
 1293|   131M|        if (token == '#') {
  ------------------
  |  Branch (1293:13): [True: 122k, False: 131M]
  ------------------
 1294|   122k|            if (previous_token == '\n') {
  ------------------
  |  Branch (1294:17): [True: 122k, False: 2]
  ------------------
 1295|   122k|                token = readCPPline(&ppToken);
 1296|   122k|                if (token == EndOfInput) {
  ------------------
  |  Branch (1296:21): [True: 535, False: 121k]
  ------------------
 1297|    535|                    missingEndifCheck();
 1298|    535|                    return EndOfInput;
 1299|    535|                }
 1300|   121k|                continue;
 1301|   122k|            } else {
 1302|      2|                parseContext.ppError(ppToken.loc, "preprocessor directive cannot be preceded by another token", "#", "");
 1303|      2|                return EndOfInput;
 1304|      2|            }
 1305|   122k|        }
 1306|   131M|        previous_token = token;
 1307|       |
 1308|   131M|        if (token == '\n')
  ------------------
  |  Branch (1308:13): [True: 8.74M, False: 123M]
  ------------------
 1309|  8.74M|            continue;
 1310|       |
 1311|   123M|        if (token == tStringifyLevelInput::PUSH) {
  ------------------
  |  Branch (1311:13): [True: 0, False: 123M]
  ------------------
 1312|      0|            stringifyDepth++;
 1313|      0|            continue;
 1314|      0|        }
 1315|   123M|        if (token == tStringifyLevelInput::POP) {
  ------------------
  |  Branch (1315:13): [True: 0, False: 123M]
  ------------------
 1316|      0|            assert(stringifyDepth > 0);
 1317|      0|            stringifyDepth--;
 1318|      0|            if (stringifyDepth == 0) {
  ------------------
  |  Branch (1318:17): [True: 0, False: 0]
  ------------------
 1319|      0|                snprintf(ppToken.name, sizeof(ppToken.name), "%s", stringifiedToken.name);
 1320|      0|                return PpAtomConstString;
 1321|      0|            }
 1322|      0|            continue;
 1323|      0|        }
 1324|       |
 1325|       |        // expand macros
 1326|   123M|        if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (1326:13): [True: 67.1M, False: 55.9M]
  ------------------
 1327|  67.1M|            switch (MacroExpand(&ppToken, false, true)) {
  ------------------
  |  Branch (1327:21): [True: 67.1M, False: 0]
  ------------------
 1328|  67.1M|            case MacroExpandNotStarted:
  ------------------
  |  Branch (1328:13): [True: 67.1M, False: 10]
  ------------------
 1329|  67.1M|                break;
 1330|      2|            case MacroExpandError:
  ------------------
  |  Branch (1330:13): [True: 2, False: 67.1M]
  ------------------
 1331|      2|                return EndOfInput;
 1332|      8|            case MacroExpandStarted:
  ------------------
  |  Branch (1332:13): [True: 8, False: 67.1M]
  ------------------
 1333|      8|            case MacroExpandUndef:
  ------------------
  |  Branch (1333:13): [True: 0, False: 67.1M]
  ------------------
 1334|      8|                continue;
 1335|  67.1M|            }
 1336|  67.1M|        }
 1337|       |
 1338|   123M|        bool needStringSupport = ifdepth == 0 && (token == PpAtomConstString || stringifyDepth > 0);
  ------------------
  |  Branch (1338:34): [True: 123M, False: 6]
  |  Branch (1338:51): [True: 10, False: 123M]
  |  Branch (1338:81): [True: 0, False: 123M]
  ------------------
 1339|   123M|        if (needStringSupport && parseContext.intermediate.getSource() != EShSourceHlsl) {
  ------------------
  |  Branch (1339:13): [True: 10, False: 123M]
  |  Branch (1339:34): [True: 10, False: 0]
  ------------------
 1340|       |            // HLSL allows string literals.
 1341|       |            // GLSL allows string literals with GL_EXT_debug_printf.
 1342|     10|            const char* const string_literal_EXTs[] = { E_GL_EXT_debug_printf, E_GL_EXT_spirv_intrinsics, E_GL_EXT_abort };
 1343|     10|            parseContext.requireExtensions(ppToken.loc, 3, string_literal_EXTs, "string literal");
 1344|     10|            if (!parseContext.extensionTurnedOn(E_GL_EXT_debug_printf) &&
  ------------------
  |  Branch (1344:17): [True: 10, False: 0]
  ------------------
 1345|     10|                !parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics)&&
  ------------------
  |  Branch (1345:17): [True: 10, False: 0]
  ------------------
 1346|     10|                !parseContext.extensionTurnedOn(E_GL_EXT_abort)) {
  ------------------
  |  Branch (1346:17): [True: 10, False: 0]
  ------------------
 1347|     10|                continue;
 1348|     10|            }
 1349|     10|        }
 1350|       |
 1351|   123M|        switch (token) {
 1352|      0|        case PpAtomConstString:
  ------------------
  |  Branch (1352:9): [True: 0, False: 123M]
  ------------------
 1353|      0|            break;
 1354|  67.1M|        case PpAtomIdentifier:
  ------------------
  |  Branch (1354:9): [True: 67.1M, False: 55.9M]
  ------------------
 1355|  67.3M|        case PpAtomConstInt:
  ------------------
  |  Branch (1355:9): [True: 273k, False: 122M]
  ------------------
 1356|  67.4M|        case PpAtomConstUint:
  ------------------
  |  Branch (1356:9): [True: 28.4k, False: 123M]
  ------------------
 1357|  67.4M|        case PpAtomConstFloat:
  ------------------
  |  Branch (1357:9): [True: 4, False: 123M]
  ------------------
 1358|  67.4M|        case PpAtomConstInt64:
  ------------------
  |  Branch (1358:9): [True: 2, False: 123M]
  ------------------
 1359|  67.4M|        case PpAtomConstUint64:
  ------------------
  |  Branch (1359:9): [True: 0, False: 123M]
  ------------------
 1360|  67.4M|        case PpAtomConstInt16:
  ------------------
  |  Branch (1360:9): [True: 0, False: 123M]
  ------------------
 1361|  67.4M|        case PpAtomConstUint16:
  ------------------
  |  Branch (1361:9): [True: 0, False: 123M]
  ------------------
 1362|  67.4M|        case PpAtomConstDouble:
  ------------------
  |  Branch (1362:9): [True: 0, False: 123M]
  ------------------
 1363|  67.4M|        case PpAtomConstFloat16:
  ------------------
  |  Branch (1363:9): [True: 0, False: 123M]
  ------------------
 1364|  67.4M|        case PpAtomConstFloatE2M1:
  ------------------
  |  Branch (1364:9): [True: 0, False: 123M]
  ------------------
 1365|  67.4M|        case PpAtomConstFloatE3M2:
  ------------------
  |  Branch (1365:9): [True: 0, False: 123M]
  ------------------
 1366|  67.4M|        case PpAtomConstFloatE2M3:
  ------------------
  |  Branch (1366:9): [True: 0, False: 123M]
  ------------------
 1367|  67.4M|        case PpAtomConstFloatUE8M0:
  ------------------
  |  Branch (1367:9): [True: 0, False: 123M]
  ------------------
 1368|  67.4M|        case PpAtomConstFloatMXINT8:
  ------------------
  |  Branch (1368:9): [True: 0, False: 123M]
  ------------------
 1369|  67.4M|            if (ppToken.name[0] == '\0')
  ------------------
  |  Branch (1369:17): [True: 0, False: 67.4M]
  ------------------
 1370|      0|                continue;
 1371|  67.4M|            break;
 1372|  67.4M|        case '\'':
  ------------------
  |  Branch (1372:9): [True: 2, False: 123M]
  ------------------
 1373|      2|            parseContext.ppError(ppToken.loc, "character literals not supported", "\'", "");
 1374|      2|            continue;
 1375|  55.6M|        default:
  ------------------
  |  Branch (1375:9): [True: 55.6M, False: 67.4M]
  ------------------
 1376|  55.6M|            snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(token));
 1377|  55.6M|            break;
 1378|   123M|        }
 1379|   123M|        if (stringifyDepth > 0) {
  ------------------
  |  Branch (1379:13): [True: 0, False: 123M]
  ------------------
 1380|      0|            size_t existingLen = strlen(stringifiedToken.name);
 1381|      0|            char* dst = stringifiedToken.name + existingLen;
 1382|       |            // stringify_depth would determine how many layers of \\\"\\\" are needed, if we wanted to.
 1383|      0|            if (ppToken.space) {
  ------------------
  |  Branch (1383:17): [True: 0, False: 0]
  ------------------
 1384|      0|                snprintf(dst, sizeof(stringifiedToken.name) - existingLen - 1, " %s", ppToken.name);
 1385|      0|            } else {
 1386|      0|                snprintf(dst, sizeof(stringifiedToken.name) - existingLen, "%s", ppToken.name);
 1387|      0|            }
 1388|      0|            continue;
 1389|      0|        }
 1390|       |
 1391|   123M|        return token;
 1392|   123M|    }
 1393|   123M|}
_ZN7glslang10TPpContext10tokenPasteEiRNS_8TPpTokenE:
 1401|   131M|{
 1402|       |    // starting with ## is illegal, skip to next token
 1403|   131M|    if (token == PpAtomPaste) {
  ------------------
  |  Branch (1403:9): [True: 0, False: 131M]
  ------------------
 1404|      0|        parseContext.ppError(ppToken.loc, "unexpected location", "##", "");
 1405|      0|        return scanToken(&ppToken);
 1406|      0|    }
 1407|       |
 1408|   131M|    int resultToken = token; // "foo" pasted with "35" is an identifier, not a number
 1409|       |
 1410|       |    // ## can be chained, process all in the chain at once
 1411|   131M|    while (peekPasting()) {
  ------------------
  |  Branch (1411:12): [True: 0, False: 131M]
  ------------------
 1412|      0|        TPpToken pastedPpToken;
 1413|       |
 1414|       |        // next token has to be ##
 1415|      0|        token = scanToken(&pastedPpToken);
 1416|      0|        assert(token == PpAtomPaste);
 1417|       |
 1418|       |        // This covers end of macro expansion
 1419|      0|        if (endOfReplacementList()) {
  ------------------
  |  Branch (1419:13): [True: 0, False: 0]
  ------------------
 1420|       |            // this should be unreachable, incomplete #/## sequences are caught at macro parsing time.
 1421|      0|            parseContext.ppError(ppToken.loc, "unexpected location; end of replacement list", "##", "");
 1422|      0|            break;
 1423|      0|        }
 1424|       |
 1425|       |        // Get the token(s) after the ##.
 1426|       |        // Because of "space" semantics, and prior tokenization, what
 1427|       |        // appeared a single token, e.g. "3A", might have been tokenized
 1428|       |        // into two tokens "3" and "A", but the "A" will have 'space' set to
 1429|       |        // false.  Accumulate all of these to recreate the original lexical
 1430|       |        // appearing token.
 1431|      0|        do {
 1432|      0|            token = scanToken(&pastedPpToken);
 1433|       |
 1434|       |            // This covers end of argument expansion
 1435|      0|            if (token == tMarkerInput::marker) {
  ------------------
  |  Branch (1435:17): [True: 0, False: 0]
  ------------------
 1436|      0|                parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
 1437|      0|                return resultToken;
 1438|      0|            }
 1439|       |
 1440|       |            // get the token text
 1441|      0|            switch (resultToken) {
 1442|      0|            case PpAtomIdentifier:
  ------------------
  |  Branch (1442:13): [True: 0, False: 0]
  ------------------
 1443|       |                // already have the correct text in token.names
 1444|      0|                break;
 1445|      0|            case '=':
  ------------------
  |  Branch (1445:13): [True: 0, False: 0]
  ------------------
 1446|      0|            case '!':
  ------------------
  |  Branch (1446:13): [True: 0, False: 0]
  ------------------
 1447|      0|            case '-':
  ------------------
  |  Branch (1447:13): [True: 0, False: 0]
  ------------------
 1448|      0|            case '~':
  ------------------
  |  Branch (1448:13): [True: 0, False: 0]
  ------------------
 1449|      0|            case '+':
  ------------------
  |  Branch (1449:13): [True: 0, False: 0]
  ------------------
 1450|      0|            case '*':
  ------------------
  |  Branch (1450:13): [True: 0, False: 0]
  ------------------
 1451|      0|            case '/':
  ------------------
  |  Branch (1451:13): [True: 0, False: 0]
  ------------------
 1452|      0|            case '%':
  ------------------
  |  Branch (1452:13): [True: 0, False: 0]
  ------------------
 1453|      0|            case '<':
  ------------------
  |  Branch (1453:13): [True: 0, False: 0]
  ------------------
 1454|      0|            case '>':
  ------------------
  |  Branch (1454:13): [True: 0, False: 0]
  ------------------
 1455|      0|            case '|':
  ------------------
  |  Branch (1455:13): [True: 0, False: 0]
  ------------------
 1456|      0|            case '^':
  ------------------
  |  Branch (1456:13): [True: 0, False: 0]
  ------------------
 1457|      0|            case '&':
  ------------------
  |  Branch (1457:13): [True: 0, False: 0]
  ------------------
 1458|      0|            case PpAtomRight:
  ------------------
  |  Branch (1458:13): [True: 0, False: 0]
  ------------------
 1459|      0|            case PpAtomLeft:
  ------------------
  |  Branch (1459:13): [True: 0, False: 0]
  ------------------
 1460|      0|            case PpAtomAnd:
  ------------------
  |  Branch (1460:13): [True: 0, False: 0]
  ------------------
 1461|      0|            case PpAtomOr:
  ------------------
  |  Branch (1461:13): [True: 0, False: 0]
  ------------------
 1462|      0|            case PpAtomXor:
  ------------------
  |  Branch (1462:13): [True: 0, False: 0]
  ------------------
 1463|      0|                snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(resultToken));
 1464|      0|                snprintf(pastedPpToken.name, sizeof(pastedPpToken.name), "%s", atomStrings.getString(token));
 1465|      0|                break;
 1466|      0|            default:
  ------------------
  |  Branch (1466:13): [True: 0, False: 0]
  ------------------
 1467|      0|                parseContext.ppError(ppToken.loc, "not supported for these tokens", "##", "");
 1468|      0|                return resultToken;
 1469|      0|            }
 1470|       |
 1471|       |            // combine the tokens
 1472|      0|            if (strlen(ppToken.name) + strlen(pastedPpToken.name) > MaxTokenLength) {
  ------------------
  |  Branch (1472:17): [True: 0, False: 0]
  ------------------
 1473|      0|                parseContext.ppError(ppToken.loc, "combined tokens are too long", "##", "");
 1474|      0|                return resultToken;
 1475|      0|            }
 1476|      0|            snprintf(&ppToken.name[0] + strlen(ppToken.name), sizeof(ppToken.name) - strlen(ppToken.name),
 1477|      0|                "%s", pastedPpToken.name);
 1478|       |
 1479|       |            // correct the kind of token we are making, if needed (identifiers stay identifiers)
 1480|      0|            if (resultToken != PpAtomIdentifier) {
  ------------------
  |  Branch (1480:17): [True: 0, False: 0]
  ------------------
 1481|      0|                int newToken = atomStrings.getAtom(ppToken.name);
 1482|      0|                if (newToken > 0)
  ------------------
  |  Branch (1482:21): [True: 0, False: 0]
  ------------------
 1483|      0|                    resultToken = newToken;
 1484|      0|                else
 1485|      0|                    parseContext.ppError(ppToken.loc, "combined token is invalid", "##", "");
 1486|      0|            }
 1487|      0|        } while (peekContinuedPasting(resultToken));
  ------------------
  |  Branch (1487:18): [True: 0, False: 0]
  ------------------
 1488|      0|    }
 1489|       |
 1490|   131M|    return resultToken;
 1491|   131M|}
_ZN7glslang10TPpContext17missingEndifCheckEv:
 1495|  12.8k|{
 1496|  12.8k|    if (ifdepth > 0)
  ------------------
  |  Branch (1496:9): [True: 131, False: 12.6k]
  ------------------
 1497|    131|        parseContext.ppError(parseContext.getCurrentLoc(), "missing #endif", "", "");
 1498|  12.8k|}
PpScanner.cpp:_ZZN7glslang10TPpContext11lFloatConstEiiPNS_8TPpTokenEENK3$_0clEi:
  114|  17.8k|    const auto saveName = [&](int ch) {
  115|  17.8k|        if (len <= MaxTokenLength)
  ------------------
  |  Branch (115:13): [True: 17.8k, False: 0]
  ------------------
  116|  17.8k|            ppToken->name[len++] = static_cast<char>(ch);
  117|  17.8k|    };
PpScanner.cpp:_ZZN7glslang10TPpContext11lFloatConstEiiPNS_8TPpTokenEENK3$_1clEPKcm:
  317|  4.44k|        auto const &try_str = [&](const char *str, size_t numChar) {
  318|  4.44k|            size_t counter = 0;
  319|  4.44k|            for (size_t i = 0; i < numChar; ++i) {
  ------------------
  |  Branch (319:32): [True: 4.44k, False: 0]
  ------------------
  320|  4.44k|                if (getChar() != str[i]) {
  ------------------
  |  Branch (320:21): [True: 4.44k, False: 0]
  ------------------
  321|  4.44k|                    break;
  322|  4.44k|                }
  323|      0|                counter++;
  324|      0|            }
  325|  4.44k|            if (counter == numChar) {
  ------------------
  |  Branch (325:17): [True: 0, False: 4.44k]
  ------------------
  326|      0|                for (size_t i = 0; i < numChar; ++i) {
  ------------------
  |  Branch (326:36): [True: 0, False: 0]
  ------------------
  327|      0|                    saveName(str[i]);
  328|      0|                }
  329|      0|                return true;
  330|  4.44k|            } else {
  331|       |                // called getChar one more than counter times
  332|  4.44k|                counter++;
  333|  8.88k|                while (counter) {
  ------------------
  |  Branch (333:24): [True: 4.44k, False: 4.44k]
  ------------------
  334|  4.44k|                    ungetChar();
  335|  4.44k|                    counter--;
  336|  4.44k|                }
  337|  4.44k|                return false;
  338|  4.44k|            }
  339|  4.44k|        };
PpScanner.cpp:_ZZN7glslang10TPpContext12tStringInput4scanEPNS_8TPpTokenEENK3$_0clEi:
  518|   462k|    const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
  ------------------
  |  Branch (518:57): [True: 102, False: 462k]
  |  Branch (518:70): [True: 1.50k, False: 461k]
  |  Branch (518:83): [True: 305, False: 460k]
  ------------------
  519|   460k|                                                                     ch == 'f' || ch == 'F' ||
  ------------------
  |  Branch (519:70): [True: 886, False: 460k]
  |  Branch (519:83): [True: 282, False: 459k]
  ------------------
  520|   459k|                                                                     ch == 'h' || ch == 'H'; };
  ------------------
  |  Branch (520:70): [True: 393, False: 459k]
  |  Branch (520:83): [True: 199, False: 459k]
  ------------------

_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE:
  102|   128k|{
  103|   128k|    TokenStream::Token streamToken(atom, *ppToken);
  104|   128k|    stream.push_back(streamToken);
  105|   128k|}
_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE:
  109|  2.16k|{
  110|  2.16k|    if (atEnd())
  ------------------
  |  Branch (110:9): [True: 1, False: 2.16k]
  ------------------
  111|      1|        return EndOfInput;
  112|       |
  113|  2.16k|    int atom = stream[currentPos++].get(*ppToken);
  114|  2.16k|    ppToken->loc = parseContext.getCurrentLoc();
  115|       |
  116|  2.16k|    return atom;
  117|  2.16k|}
_ZN7glslang10TPpContext11TokenStream20peekTokenizedPastingEb:
  125|  2.15k|{
  126|       |    // 1. preceding ##?
  127|       |
  128|  2.15k|    size_t savePos = currentPos;
  129|       |    // skip white space
  130|  2.15k|    while (peekToken(' '))
  ------------------
  |  Branch (130:12): [True: 0, False: 2.15k]
  ------------------
  131|      0|        ++currentPos;
  132|  2.15k|    if (peekToken(PpAtomPaste)) {
  ------------------
  |  Branch (132:9): [True: 0, False: 2.15k]
  ------------------
  133|      0|        currentPos = savePos;
  134|      0|        return true;
  135|      0|    }
  136|       |
  137|       |    // 2. last token and we've been told after this there will be a ##
  138|       |
  139|  2.15k|    if (! lastTokenPastes) {
  ------------------
  |  Branch (139:9): [True: 2.15k, False: 0]
  ------------------
  140|  2.15k|        currentPos = savePos;
  141|  2.15k|        return false;
  142|  2.15k|    }
  143|       |    // Getting here means the last token will be pasted, after this
  144|       |
  145|       |    // Are we at the last non-whitespace token?
  146|      0|    savePos = currentPos;
  147|      0|    bool moreTokens = false;
  148|      0|    do {
  149|      0|        if (atEnd())
  ------------------
  |  Branch (149:13): [True: 0, False: 0]
  ------------------
  150|      0|            break;
  151|      0|        if (!peekToken(' ')) {
  ------------------
  |  Branch (151:13): [True: 0, False: 0]
  ------------------
  152|      0|            moreTokens = true;
  153|      0|            break;
  154|      0|        }
  155|      0|        ++currentPos;
  156|      0|    } while (true);
  ------------------
  |  Branch (156:14): [True: 0, Folded]
  ------------------
  157|      0|    currentPos = savePos;
  158|       |
  159|      0|    return !moreTokens;
  160|  2.15k|}
_ZN7glslang10TPpContext20pushTokenStreamInputERNS0_11TokenStreamEbb:
  163|      1|{
  164|      1|    pushInput(new tTokenInput(this, &ts, prepasting, expanded));
  165|      1|    ts.reset();
  166|      1|}
_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE:
  181|      1|{
  182|      1|    pushInput(new tUngotTokenInput(this, token, ppToken));
  183|      1|}

_ZN7glslang22PropagateNoContractionERKNS_13TIntermediateE:
  792|      4|{
  793|       |    // First, traverses the AST, records symbols with their defining operations
  794|       |    // and collects the initial set of precise symbols (symbol nodes that marked
  795|       |    // as 'noContraction') and precise return nodes.
  796|      4|    auto mappings_and_precise_objects =
  797|      4|        getSymbolToDefinitionMappingAndPreciseSymbolIDs(intermediate);
  798|       |
  799|       |    // The mapping of symbol node IDs to their defining nodes. This enables us
  800|       |    // to get the defining node directly from a given symbol ID without
  801|       |    // traversing the tree again.
  802|      4|    NodeMapping& symbol_definition_mapping = std::get<0>(mappings_and_precise_objects);
  803|       |
  804|       |    // The mapping of object nodes to their access chains recorded.
  805|      4|    AccessChainMapping& accesschain_mapping = std::get<1>(mappings_and_precise_objects);
  806|       |
  807|       |    // The initial set of 'precise' objects which are represented as the
  808|       |    // access chain toward them.
  809|      4|    ObjectAccesschainSet& precise_object_accesschains = std::get<2>(mappings_and_precise_objects);
  810|       |
  811|       |    // The set of 'precise' return nodes.
  812|      4|    ReturnBranchNodeSet& precise_return_nodes = std::get<3>(mappings_and_precise_objects);
  813|       |
  814|       |    // Second, uses the initial set of precise objects as a work list, pops an
  815|       |    // access chain, extract the symbol ID from it. Then:
  816|       |    //  1) Check the assignee object, see if it is 'precise' object node or
  817|       |    //  contains 'precise' object. Obtain the incremental access chain from the
  818|       |    //  assignee node to its nested 'precise' node (if any).
  819|       |    //  2) If the assignee object node is 'precise' or it contains 'precise'
  820|       |    //  objects, traverses the right side of the assignment operation
  821|       |    //  expression to mark arithmetic operations as 'noContration' and update
  822|       |    //  'precise' access chain work list with new found object nodes.
  823|       |    // Repeat above steps until the work list is empty.
  824|      4|    TNoContractionAssigneeCheckingTraverser checker(accesschain_mapping);
  825|      4|    TNoContractionPropagator propagator(&precise_object_accesschains, accesschain_mapping);
  826|       |
  827|       |    // We have two initial precise work lists to handle:
  828|       |    //  1) precise return nodes
  829|       |    //  2) precise object access chains
  830|       |    // We should process the precise return nodes first and the involved
  831|       |    // objects in the return expression should be added to the precise object
  832|       |    // access chain set.
  833|      4|    while (!precise_return_nodes.empty()) {
  ------------------
  |  Branch (833:12): [True: 0, False: 4]
  ------------------
  834|      0|        glslang::TIntermBranch* precise_return_node = *precise_return_nodes.begin();
  835|      0|        propagator.propagateNoContractionInReturnNode(precise_return_node);
  836|      0|        precise_return_nodes.erase(precise_return_node);
  837|      0|    }
  838|       |
  839|      4|    while (!precise_object_accesschains.empty()) {
  ------------------
  |  Branch (839:12): [True: 0, False: 4]
  ------------------
  840|       |        // Get the access chain of a precise object from the work list.
  841|      0|        ObjectAccessChain precise_object_accesschain = *precise_object_accesschains.begin();
  842|       |        // Get the symbol id from the access chain.
  843|      0|        ObjectAccessChain symbol_id = getFrontElement(precise_object_accesschain);
  844|       |        // Get all the defining nodes of that symbol ID.
  845|      0|        std::pair<NodeMapping::iterator, NodeMapping::iterator> range =
  846|      0|            symbol_definition_mapping.equal_range(symbol_id);
  847|       |        // Visits all the assignment nodes of that symbol ID and
  848|       |        //  1) Check if the assignee node is 'precise' or contains 'precise'
  849|       |        //  objects.
  850|       |        //  2) Propagate the 'precise' to the top layer object nodes
  851|       |        //  in the right side of the assignment operation, update the 'precise'
  852|       |        //  work list with new access chains representing the new 'precise'
  853|       |        //  objects, and mark arithmetic operations as 'noContraction'.
  854|      0|        for (NodeMapping::iterator defining_node_iter = range.first;
  855|      0|             defining_node_iter != range.second; defining_node_iter++) {
  ------------------
  |  Branch (855:14): [True: 0, False: 0]
  ------------------
  856|      0|            TIntermOperator* defining_node = defining_node_iter->second;
  857|       |            // Check the assignee node.
  858|      0|            auto checker_result = checker.getPrecisenessAndRemainedAccessChain(
  859|      0|                defining_node, precise_object_accesschain);
  860|      0|            bool& contain_precise = std::get<0>(checker_result);
  861|      0|            ObjectAccessChain& remained_accesschain = std::get<1>(checker_result);
  862|       |            // If the assignee node is 'precise' or contains 'precise', propagate the
  863|       |            // 'precise' to the right. Otherwise just skip this assignment node.
  864|      0|            if (contain_precise) {
  ------------------
  |  Branch (864:17): [True: 0, False: 0]
  ------------------
  865|      0|                propagator.propagateNoContractionInOneExpression(defining_node,
  866|      0|                                                                 remained_accesschain);
  867|      0|            }
  868|      0|        }
  869|       |        // Remove the last processed 'precise' object from the work list.
  870|      0|        precise_object_accesschains.erase(precise_object_accesschain);
  871|      0|    }
  872|      4|}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_147getSymbolToDefinitionMappingAndPreciseSymbolIDsERKN7glslang13TIntermediateE:
  422|      4|{
  423|      4|    auto result_tuple = std::make_tuple(NodeMapping(), AccessChainMapping(), ObjectAccesschainSet(),
  424|      4|                                        ReturnBranchNodeSet());
  425|       |
  426|      4|    TIntermNode* root = intermediate.getTreeRoot();
  427|      4|    if (root == nullptr)
  ------------------
  |  Branch (427:9): [True: 0, False: 4]
  ------------------
  428|      0|        return result_tuple;
  429|       |
  430|      4|    NodeMapping& symbol_definition_mapping = std::get<0>(result_tuple);
  431|      4|    AccessChainMapping& accesschain_mapping = std::get<1>(result_tuple);
  432|      4|    ObjectAccesschainSet& precise_objects = std::get<2>(result_tuple);
  433|      4|    ReturnBranchNodeSet& precise_return_nodes = std::get<3>(result_tuple);
  434|       |
  435|       |    // Traverses the AST and populate the results.
  436|      4|    TSymbolDefinitionCollectingTraverser collector(&symbol_definition_mapping, &accesschain_mapping,
  437|      4|                                                   &precise_objects, &precise_return_nodes);
  438|      4|    root->traverse(&collector);
  439|       |
  440|      4|    return result_tuple;
  441|      4|}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_136TSymbolDefinitionCollectingTraverserC2EPNSt3__118unordered_multimapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPN7glslang15TIntermOperatorENS1_4hashIS8_EENS1_8equal_toIS8_EENS6_INS1_4pairIKS8_SB_EEEEEEPNS1_13unordered_mapIPNS9_12TIntermTypedES8_NSC_ISO_EENSE_ISO_EENS6_INSG_IKSO_S8_EEEEEEPNS1_13unordered_setIS8_SD_SF_NS6_IS8_EEEEPNSW_IPNS9_13TIntermBranchENSC_IS11_EENSE_IS11_EENS6_IS11_EEEE:
  278|      4|    : TIntermTraverser(true, false, false), symbol_definition_mapping_(*symbol_definition_mapping),
  279|      4|      precise_objects_(*precise_objects), precise_return_nodes_(*precise_return_nodes),
  280|      4|      current_object_(), accesschain_mapping_(*accesschain_mapping),
  281|      4|      current_function_definition_node_(nullptr) {}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_136TSymbolDefinitionCollectingTraverser11visitSymbolEPN7glslang13TIntermSymbolE:
  288|      2|{
  289|      2|    current_object_ = generateSymbolLabel(node);
  290|      2|    accesschain_mapping_[node] = current_object_;
  291|      2|}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_119generateSymbolLabelEPN7glslang13TIntermSymbolE:
  141|      2|{
  142|      2|    ObjectAccessChain symbol_id =
  143|      2|        std::to_string(node->getId()) + "(" + node->getName().c_str() + ")";
  144|      2|    return symbol_id;
  145|      2|}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_136TSymbolDefinitionCollectingTraverser14visitAggregateEN7glslang6TVisitEPNS1_16TIntermAggregateE:
  296|      8|{
  297|       |    // This aggregate node might be a function definition node, in which case we need to
  298|       |    // cache this node, so we can get the preciseness information of the return value
  299|       |    // of this function later.
  300|      8|    StateSettingGuard<glslang::TIntermAggregate*> current_function_definition_node_setting_guard(
  301|      8|        &current_function_definition_node_);
  302|      8|    if (node->getOp() == glslang::EOpFunction) {
  ------------------
  |  Branch (302:9): [True: 0, False: 8]
  ------------------
  303|       |        // This is function definition node, we need to cache this node so that we can
  304|       |        // get the preciseness of the return value later.
  305|      0|        current_function_definition_node_setting_guard.setState(node);
  306|      0|    }
  307|       |    // Traverse the items in the sequence.
  308|      8|    glslang::TIntermSequence& seq = node->getSequence();
  309|     14|    for (int i = 0; i < (int)seq.size(); ++i) {
  ------------------
  |  Branch (309:21): [True: 6, False: 8]
  ------------------
  310|      6|        current_object_.clear();
  311|      6|        seq[i]->traverse(this);
  312|      6|    }
  313|      8|    return false;
  314|      8|}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_117StateSettingGuardIPN7glslang16TIntermAggregateEEC2EPS3_:
  199|      8|    StateSettingGuard(T* state_ptr) : state_ptr_(state_ptr), previous_state_(*state_ptr) {}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_117StateSettingGuardIPN7glslang16TIntermAggregateEED2Ev:
  201|      8|    ~StateSettingGuard() { *state_ptr_ = previous_state_; }
propagateNoContraction.cpp:_ZN12_GLOBAL__N_139TNoContractionAssigneeCheckingTraverserC2ERKNSt3__113unordered_mapIPN7glslang12TIntermTypedENS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_4hashIS5_EENS1_8equal_toIS5_EENS9_INS1_4pairIKS5_SB_EEEEEE:
  470|      4|        : TIntermTraverser(true, false, false), accesschain_mapping_(accesschain_mapping),
  471|      4|          precise_object_(nullptr) {}
propagateNoContraction.cpp:_ZN12_GLOBAL__N_124TNoContractionPropagatorC2EPNSt3__113unordered_setINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_4hashIS8_EENS1_8equal_toIS8_EENS6_IS8_EEEERKNS1_13unordered_mapIPN7glslang12TIntermTypedES8_NS9_ISJ_EENSB_ISJ_EENS6_INS1_4pairIKSJ_S8_EEEEEE:
  623|      4|        : TIntermTraverser(true, false, false),
  624|      4|          precise_objects_(*precise_objects), added_precise_object_ids_(),
  625|      4|          remained_accesschain_(), accesschain_mapping_(accesschain_mapping) {}

Initialize.cpp:_ZN4spanIKN7glslang12_GLOBAL__N_110VersioningEEC2Ev:
   50|     90|    span() = default;
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_115BuiltInFunctionEE5beginEv:
   58|  2.67k|    const_iterator begin() const { return data_; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_115BuiltInFunctionEE3endEv:
   61|  2.67k|    const_iterator end() const { return data_ + count_; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_110VersioningEE5emptyEv:
   73|  92.6k|    bool empty() const { return count_ == 0; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_110VersioningEE5beginEv:
   58|  37.8k|    const_iterator begin() const { return data_; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_110VersioningEE3endEv:
   61|  37.8k|    const_iterator end() const { return data_ + count_; }
Initialize.cpp:_ZN4spanIKN7glslang12_GLOBAL__N_110VersioningEEC2IKNSt3__15arrayIS2_Lm2EEEEERT_:
   55|     68|    span(Container &c) : data_(c.data()), count_(c.size()) {}
Initialize.cpp:_ZN4spanIKN7glslang12_GLOBAL__N_115BuiltInFunctionEEC2IKNSt3__15arrayIS2_Lm79EEEEERT_:
   55|  1.11k|    span(Container &c) : data_(c.data()), count_(c.size()) {}
Initialize.cpp:_ZN4spanIKN7glslang12_GLOBAL__N_115BuiltInFunctionEEC2IKNSt3__15arrayIS2_Lm3EEEEERT_:
   55|  1.56k|    span(Container &c) : data_(c.data()), count_(c.size()) {}

_ZN7glslang7TShader5parseEPK16TBuiltInResourceib11EShMessages:
  687|  1.23k|    {
  688|  1.23k|        return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages);
  689|  1.23k|    }
_ZN7glslang7TShader5parseEPK16TBuiltInResourcei8EProfilebb11EShMessages:
  680|  1.23k|    {
  681|  1.23k|        TShader::ForbidIncluder includer;
  682|  1.23k|        return parse(res, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, forwardCompatible, messages, includer);
  683|  1.23k|    }
_ZN7glslang7TShader8IncluderD2Ev:
  664|  1.23k|        virtual ~Includer() {}

_Z19GetDefaultResourcesv:
  540|  1.23k|{
  541|  1.23k|    return &DefaultTBuiltInResource;
  542|  1.23k|}

